Ë
    ¸¬uj�'  ã                   ó†  — d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 dZ
dZdZdZd	Zd
ddddœZdZd„ Zd„ Zd„ Zdefd„Zedk(  rxdej,                  v ZerdneZdej,                  v rKej,                  j3                  d«      Zedz    eej,                  «      k  r eej,                  edz      «      Z eee¬«       yy)uw   
æ± å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯å¢ƒå½±å“�è¯„ä»·å…¬ä¼—å�‚ä¸Ž
https://sthjj.chizhou.gov.cn/News/showList/5578/page_1.html
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu+   æ± å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯è¯„å…¬ä¼—å�‚ä¸Žu   å®‰å¾½zhttps://sthjj.chizhou.gov.cné   z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8zhttps://sthjj.chizhou.gov.cn/)z
User-AgentÚAcceptzAccept-LanguageÚRefererzž
INSERT OR REPLACE INTO gov_raw 
    (site_name, page_url, title, publish_date, summary, content, category, attachments)
    VALUES (?, ?, ?, ?, '', ?, ?, ?)
c                  ó|   — dd l } | j                  t        «      }|j                  d«       |j                  d«       |S )Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r	   Úconns     ú"/root/gov_crawler/crawl_chizhou.pyÚinit_dbr   "   s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 ó°  — d| › d�}	 t        j                  |t        d¬«      }d|_        |j                  d
k7  rt        d|j                  › d| › �d¬	«       g S t        |j                  d«      }g }|j                  d«      }|st        d| › �d¬	«       g S |j                  d«      D ]ä  }|j                  dd¬«      }|sŒ|j                  dd«      j                  «       }	|	s|j                  d¬«      }	t        j                  dd|	«      j                  «       }	|d   j                  «       }
|
r|
j!                  d«      rŒ™t#        t$        |
«      }|j                  d«      }|r|j                  d¬«      nd}|j'                  |	||dœ«       Œæ t        d| › dt)        |«      › d�d¬	«       |S # t        $ r}t        d| › d|› �d¬	«       g cY d }~S d }~ww xY w)Nz5https://sthjj.chizhou.gov.cn/News/showList/5578/page_z.htmlé   ©ÚheadersÚtimeoutúutf-8z  [ERROR] Failed to fetch page ú: T©ÚflushéÈ   ú  [ERROR] HTTP z
 for page úhtml.parserzdiv.m-cglistz  [ERROR] No list div on page ÚliÚa©ÚhrefÚtitleÚ ©Ústripú\s+ú r    Ú
javascriptÚspan)r!   ÚurlÚdateú  Page z items)ÚrequestsÚgetÚHEADERSÚencodingÚ	ExceptionÚprintÚstatus_coder   ÚtextÚ
select_oneÚfind_allÚfindr$   Úget_textÚreÚsubÚ
startswithr   ÚBASE_URLÚappendÚlen)Úpage_numr)   ÚrÚeÚsoupÚitemsÚlist_divr   Úa_tagr!   r    Úfull_urlÚ	date_spanÚdate_strs                 r   Úextract_list_pagerH   *   sÎ  € ØAÀ(ÀÈ5Ð
Q€CðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ð
 	‡}�}˜ÒÜ� §¡˜¨j¸¸
ÐCÈ4ÕPØˆ	ä˜Ÿ™ Ó/€DØ€Eà�‰˜~Ó.€HÙÜÐ.¨x¨jÐ9ÀÕFØˆ	à×Ñ Ó%ò JˆØ—‘˜ $�Ó'ˆÙØà—	‘	˜' 2Ó&×,Ñ,Ó.ˆÙØ—N‘N¨�NÓ.ˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆà�V‰}×"Ñ"Ó$ˆÙ�t—‘ |Ô4ØÜœ8 TÓ*ˆà—G‘G˜F“Oˆ	Ù5>�9×%Ñ%¨DÐ%Ô1ÀBˆà�‰˜u¨X¸xÑHÕIð%Jô( 
ˆG�H�:˜R¤ E£
˜|¨6Ð
2¸$Õ?Ø€LøôK ò ÜÐ/°¨z¸¸A¸3Ð?ÀtÕLØ�	ûðús   ˆ#F- Æ-	GÆ6GÇ
GÇGc                 óN  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  rt        d	|j                  › d
| › �d¬«       y t        |j                  d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}|j                  dddi¬«      }|r;|j                  d«      r*|d   j                  «       }t        j                  dd|«      }|j                  d«      }|s|j                  d«      }|s|j                  d«      }d}	g }
|�ret        |«      }|j                  d«      }t!        |«      D ]'  \  }}d|› d�}|j#                  t        |«      |d«      }Œ) t        |d«      }g }|j                  d«      D ])  }|j%                  dd¬«      }|sŒ|j'                  |«       Œ+ dj)                  |«      }	t        j                  dd|	«      }	t        j                  d d!|	«      }	t        j                  d"d!|	«      }	|�råg }t!        |«      D �]–  \  }}|j                  d#«      }|s|j'                  d«       Œ,d$}|D ]*  }|j                  d%d&g«      }t+        |t-        |«      «      }Œ, |d'k(  ršd(d)g}|D ]p  }|j                  d%d&g«      }t-        |«      d'k\  sŒ%|d$   j%                  dd¬«      }|d   j%                  dd¬«      }|j'                  |r	d*|› d+|› d,�nd-|› d,�«       Œr |j'                  d.j)                  |«      «       Œüd$g|z  }|D ]V  }|j                  d%d&g«      }t!        |«      D ]3  \  }}|j%                  dd¬«      }t+        ||   t-        |«      «      ||<   Œ5 ŒX |D � cg c]  } t+        d/t/        | d'z   d0«      «      ‘Œ }} g }t!        |«      D ]ä  \  }!}|j                  d%d&g«      }g }"t1        |«      D ]K  }#|#t-        |«      k  r||#   j%                  dd¬«      nd}$|"j'                  |$j3                  ||#   «      «       ŒM d*}%|j'                  |%|%j)                  |"«      z   d,z   «       |!d$k(  sŒ¢g }&|D ]  } |&j'                  d1| z  «       Œ |j'                  d2d3j)                  |&«      z   d4z   «       Œæ |j'                  d.j)                  |«      «       �Œ™ t1        t-        |«      «      D ]'  }d|› d�}||   sŒ|	j#                  |d||   › d�«      }	Œ) |j                  d5d¬6«      D ]u  }'|'d7   }(t        j4                  d8|(t        j6                  «      sŒ.|'j%                  d¬«      xs |(j9                  d9«      d:   })t;        | |(«      }*|
j'                  |)|*d;œ«       Œw t-        |	j                  «       «      d<k  rd=|xs | j9                  d9«      d:   › d>| › d?�}	||	||
rt=        j>                  |
d@¬A«      dBœS ddBœS # t        $ r}t        d| › d|› �d¬«       Y d }~y d }~ww xY wc c} w )CNr   r   r   z  [ERROR] Failed to fetch r   Tr   r   r   z for r   r"   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez\s.*zdiv.j-fontContentzdiv.m-dttextszdiv.m-detailboxÚtablez	
__TABLE_z__
é   Úpr&   r#   z

z +u,    ([.,;:!?ï¼Œã€‚ï¼›ï¼šï¼�ï¼Ÿã€�\)ï¼‰ã€‘ã€‹"])z\1u   (["\'\(ï¼ˆã€�ã€Š]) Útrr   ÚtdÚthé   u   | é¡¹ ç›® | å†… å®¹ |z|------|------|z| z | z |z| | ú
é   é(   ú-z|-z-|-z-|r   r   r    z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$ú/éÿÿÿÿ)rK   r)   é   ú[z](u   )
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰F)Úensure_ascii)r!   rN   Úpub_dateÚattachments) r,   r-   r.   r/   r0   r1   r2   r   r3   r6   r$   r8   r9   r4   Ústrr5   Ú	enumerateÚreplacer7   r<   ÚjoinÚmaxr=   ÚminÚrangeÚljustÚsearchÚ
IGNORECASEÚsplitr   ÚjsonÚdumps)+r)   r?   r@   rA   r!   Ú
meta_titler`   Ú	meta_dateÚcontent_divÚcontent_textÚattachments_listÚcontent_html_strÚ
all_tablesÚtirP   ÚmarkerÚ
clean_soupÚpartsÚp_tagÚtÚtable_textsÚrowsÚnum_colsÚrowÚcellsÚt_linesÚlabelÚvalueÚ
col_widthsÚicÚcellÚ	cell_textÚwÚriÚ
cell_textsÚciÚtxtÚsepÚsep_linerD   r    Ú	att_titlerE   s+                                              r   Úextract_detailr�   W   s�  € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ð
 	‡}�}˜ÒÜ� §¡˜¨e°C°5Ð9ÀÕFØä˜Ÿ™ Ó/€Dà€EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆà€HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜YÑ'×-Ñ-Ó/ˆÜ—6‘6˜' 2 xÓ0ˆà—/‘/Ð"5Ó6€KÙØ—o‘o oÓ6ˆÙØ—o‘oÐ&7Ó8ˆà€LØÐâä˜{Ó+ÐØ ×)Ñ)¨'Ó2ˆ
Ü" :Ó.ò 	O‰IˆB�Ø! "  TÐ*ˆFØ/×7Ñ7¼¸E»
ÀFÈAÓNÑð	Oô
 #Ð#3°]ÓCˆ
àˆØ×(Ñ(¨Ó-ò 	 ˆEØ—‘˜s¨$�Ó/ˆAÚØ—‘˜Q•ð	 ð —{‘{ 5Ó)ˆô —v‘v˜e S¨,Ó7ˆÜ—v‘vÐMÈuÐVbÓcˆÜ—v‘vÐ4°e¸\ÓJˆò ØˆKÜ& zÓ2ó );‘	��EØ—~‘~ dÓ+�ÙØ×&Ñ& rÔ*ØØ�Øò 9�CØŸL™L¨$°¨Ó6�EÜ" 8¬S°«ZÓ8‘Hð9ð ˜q’=Ø6Ð8IÐJ�GØ#ò d˜Ø #§¡¨d°D¨\Ó :˜Ü˜u›:¨›?Ø$)¨!¡H×$5Ñ$5°cÀÐ$5Ó$F˜EØ$)¨!¡H×$5Ñ$5°cÀÐ$5Ó$F˜EØ#ŸN™NÁu¨R°¨w°c¸%¸ÀÑ+CÐTXÐY^ÐX_Ð_aÐRbÕcðdð  ×&Ñ& t§y¡y°Ó'9Õ:à"#  x¡�JØ#ò Q˜Ø #§¡¨d°D¨\Ó :˜Ü(1°%Ó(8ò Q™H˜B Ø(,¯©°cÀ¨Ó(F˜IÜ-0°¸B±ÄÀYÃÓ-P˜J ršNñQðQð
 CMÖ!M¸Q¤# a¬¨Q°©U°B«Õ"8Ð!M�JÐ!MØ �GÜ#,¨T£?ò O™˜˜CØ #§¡¨d°D¨\Ó :˜Ø%'˜
Ü"'¨£/ò I˜BØIKÌcÐRWËjÊ %¨¡)×"4Ñ"4°SÀÐ"4Ô"EÐ^`˜CØ&×-Ñ-¨c¯i©i¸
À2¹Ó.GÕHðIð #˜ØŸ™ s¨S¯X©X°jÓ-AÑ'AÀDÑ'HÔIØ ›7Ø')˜HØ%/ò 9 Ø (§¡°°a±Õ 8ð9à#ŸN™N¨4°%·*±*¸XÓ2FÑ+FÈÑ+MÕNðOð  ×&Ñ& t§y¡y°Ó'9Ö:ðS);ôX œC 
›OÓ,ò ^�Ø% b T¨Ð.�Ø˜r“?Ø#/×#7Ñ#7¸À$À{ÐSUÁÐFWÐW[Ð@\Ó#]‘Lð^ð
 !×)Ñ)¨#°DÐ)Ó9ò 	NˆEØ˜‘=ˆDÜ�y‰yÐ>ÀÄbÇmÁmÕTØ!ŸN™N°˜NÓ6ÒM¸$¿*¹*ÀS»/È"Ñ:M�	Ü" 3¨Ó-�Ø ×'Ñ'°À8Ñ(LÕMð	Nô ˆ<×ÑÓÓ  2Ò%Ø˜5Ò6 C§I¡I¨c£N°2Ñ$6Ð7°r¸#¸Ð>YÐZˆð ØØÙK[”t—z‘zÐ"2ÀÔGñ	ð ð bdñ	ð øôk ò ÜÐ*¨3¨%¨r°!°Ð5¸TÕBÜûðüòh "Ns   ‚#W9 Î X"×9	XØXØXFc                 óŽ  — t        dt        › d|› �d¬«       t        «       }|j                  «       }d}d}d}t	        d|dz   «      D �]M  }t        |«      }|st        d|› d�d¬«        �n,|dz  }|D ]à  }	t        j                  d	d
|	d   «      j                  «       }
|	d   }|	d   }|j                  d|t        f«       |j                  «       r|dz  }Œct        |«      }|€|dz  }Œv|d   rt        |d   «      t        |
«      kD  r|d   }
|d   }|xs |d   }|d   }|j                  t        t        ||
||t        |f«       |dz  }| sŒÚ|dk\  sŒà n |j                  «        | r|dk\  rt        d|› d�d¬«        nt!        j"                  d«       �ŒP |j%                  «        t        dt        › d|› d|› d|› �d¬«       |S )Nr^   z] Starting crawl, max_pages=Tr   r   rQ   r+   z empty, stoppingr%   r&   r!   r)   r*   z;SELECT id FROM gov_raw WHERE page_url = ? AND site_name = ?rN   r`   ra   é
   z  Test mode: stopping after z insertsg      à?z] Done. Inserted=z
, Skipped=z, Pages=)r1   Ú	SITE_NAMEr   Úcursorrh   rH   r8   r9   r$   r   Úfetchoner�   r=   Ú
INSERT_SQLÚCATEGORYÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr   ÚcurÚtotal_insertedÚtotal_skippedÚpages_crawledr>   rB   Úitemr!   r)   r*   ÚdetailrN   r`   ra   s                    r   Úcrawlr¤   Ø   s  € Ü	ˆAŒiˆ[Ð4°Y°KÐ
@ÈÕMÜ‹9€DØ
�+‰+‹-€Cà€NØ€MØ€Mä˜!˜Y¨™]Ó+ó ,ˆÜ! (Ó+ˆÙÜ�G˜H˜:Ð%5Ð6¸dÕCÚà˜ÑˆØò 	ˆDÜ—F‘F˜6 3¨¨W©Ó6×<Ñ<Ó>ˆEØ�u‘+ˆCØ˜‘<ˆDà�K‰KÐUÐX[Ô]fÐWgÔhØ�|‰|Œ~Ø Ñ"�Øä# CÓ(ˆFØˆ~Ø Ñ"�Øà�gŠ¤3 v¨g¡Ó#7¼#¸e»*Ò#DØ˜w™�à˜YÑ'ˆGØÒ1˜v jÑ1ˆHØ  Ñ/ˆKà�K‰Kœ
Ü˜3  xØœ ;ð%ô ð ˜aÑˆNâ˜^¨rÓ1Ùð;	ð> 	�‰Œá˜¨2Ò-ÜÐ0°Ð0@ÀÐIÐQUÕVÙä�
‰
�3ŽðY,ð\ 	‡J�J„LÜ	ˆAŒiˆ[Ð)¨.Ð)9¸ÀMÀ?ÐRZÐ[hÐZiÐ
jÐrvÕwØÐr   Ú__main__z--testé   z--max-pagesrQ   )rœ   r�   )Ú__doc__r8   Úsysr™   rm   r,   Úbs4r   Úurllib.parser   r   r“   r—   r;   Ú	MAX_PAGESr.   r–   r   rH   r�   r¤   Ú__name__Úargvrœ   ÚmpÚindexÚidxr=   Úint© r   r   ú<module>r³      sï   ðñó 
Û 
Û Û Û Ý Ý  à
€Ø9€	Ø€Ø)€Ø€	ð QØOØ0Ø.ñ	€ð€
òò*òZ~ðB  Yó 9ðx ˆzÒØ˜CŸH™HÐ$€IÙ‰˜Y€BØ˜Ÿ™Ñ Ø�h‰h�n‰n˜]Ó+ˆØ�‰7‘S˜Ÿ™“]Ò"Ù�S—X‘X˜c A™gÑ&Ó'ˆBÙ	�I¨Ö,ð r   