Ë
     E¶j—&  ã                   ó*  — 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ZddlmZ ddl	m
Z
 dZdZddiZ ej                  ej                  j!                  e«      d	¬
«        ej"                  «       Zej&                  j)                  e«       h d£Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  �rDdej8                  v Ze�r+ ed«       ej?                  ed¬«      Z de _!         ee jD                  e«      Z# ed e$e#«      › d�«        e%edd¬«      5 Z&e#D ]·  Z'	 ej?                  e'd   d¬«      Z de _!         ee'd   e jD                  «      Z(e(d   re(d   ne'd   Z)e)e'd   e(d   xs e'd   e(d   e(d    d!d"e(d#   r ejT                  e(d#   d$¬%«      nd&d'œZ+e&jY                   ejT                  e+d$¬%«      d(z   «        ej^                  d+«       Œ¹ 	 ddd«        ed, e$e#«      › d-�«       y e«        yy# e-$ rZ. ed)e'd   › d*e.› �«       Y dZ.[.ŒTdZ.[.ww xY w# 1 sw Y   ŒHxY w).uL  
Crawl åŒ—äº¬ä¸­çŽ¯é•¿é�’çŽ¯å¢ƒç§‘æŠ€æœ‰é™�å…¬å�¸ - å…¬å‘Šå…¬ç¤ºæ �
https://www.zhcqhj.com/html/news/gsl/
Pagination: index_2.html ... index_4.html (4 pages, ~95 items)
List: <td class="news_list"> with table containing links + dates
Detail: <td id="text"> HTML content
Date: <td class="info_text">æ—¶é—´ï¼šYYYY-MM-DD HH:MM:SS</td>
é    N)ÚBeautifulSoup)Úurljoinz%https://www.zhcqhj.com/html/news/gsl/z)/root/gov_crawler/output/zhcqhj_gsl.jsonlz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36T)Úexist_ok>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr1   ÚoutÚwalks     €€€ú!/root/gov_crawler/crawl_zhcqhj.pyr?   zbody_text.<locals>.walk.   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r5   z\n{3,}z

)ÚreÚbs4r1   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr1   r>   r?   s      @@@r@   Ú	body_textrJ   &   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrA   c                 ó$   — | dk(  rt         S d| › d�S )Né   z+https://www.zhcqhj.com/html/news/gsl/index_ú.html)ÚBASE_URL)Úpage_nums    r@   Úget_page_urlrP   A   s   € Ø�1‚}ÜˆØ8¸¸
À%ÐHÐHrA   c                 ó6  — t        | d«      }g }t        «       }|j                  dd¬«      D ]ê  }|d   }|j                  d«      sŒd|v sŒd|vsŒ$||v rŒ)|j	                  |«       |j                  d	d
«      xs |j                  d¬«      }t        ||«      }d
}	|j                  d«      }
|
rU|
j                  d«      }|D ]?  }|j                  d¬«      }t        j                  d|«      }|sŒ.|j                  d«      }	 n |j                  |||	dœ«       Œì |S )z1Extract article links and dates from a list page.úhtml.parserÚaT©ÚhrefrU   rM   ÚgslÚindex_Útitler0   ©rF   r   r   ú(\d{4}-\d{1,2}-\d{1,2})rL   )ÚurlrX   Údate)r   ÚsetÚfind_allÚendswithÚaddÚgetÚget_textr   Úfind_parentrB   ÚsearchÚgroupr8   )ÚhtmlÚbase_urlÚsoupÚitemsÚseenrS   rU   rX   Úfull_urlr\   Ú	parent_trÚtd_cellsr   Útd_textÚms                  r@   Ú
parse_listrp   F   s"  € ä˜˜}Ó-€DØ€Eä‹5€Dà�]‰]˜3 Tˆ]Ó*ò JˆØ�‰yˆà�=‰=˜Õ! e¨t¢m¸ÈÒ8LØ�t‰|ØØ�H‰H�TŒNà—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEÜ˜x¨Ó.ˆHð ˆDØŸ™ dÓ+ˆIÙØ$×-Ñ-¨dÓ3�Ø"ò �BØ Ÿk™k°˜kÓ5�GÜŸ	™	Ð"<¸gÓF�AÚØ Ÿw™w q›z˜Ùðð �L‰L °EÀ4ÑHÕIð/Jð2 €LrA   c                 ó”  ‡— t        |d«      }|j                  d«      }d}|r7|j                  d¬«      }t        j                  dd|«      j                  «       }d}|j                  dd¬	«      }|r7t        j                  d
|j                  «       «      }|r|j                  d«      }|j                  dd¬«      }	d}
d}|	rR|	j                  d«      D ](  }g d¢}t        |j                  «      D ]
  }||vsŒ||= Œ Œ* t        |	«      }
t        |	«      }g }|	r¡|	j                  dd¬«      D ]‹  }|j                  dd«      Št        ˆfd„dD «       «      sŒ*|j                  ‰j!                  d«      st#        | ‰«      n‰|j                  d¬«      xs t$        j&                  j)                  ‰«      dœ«       Œ� |||
|r|dd |dœS d|dœS )z0Extract title, date, content from a detail page.rR   rX   r0   TrY   u   \s*[-â€“â€”]\s*ä¸­çŽ¯é•¿é�’\s*$r   Ú	info_text)Úclass_rZ   rL   Útext)Úid)rU   ÚsrcÚaltÚtargetÚstylerS   rT   rU   c              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)Úlowerr_   )Ú.0ÚextÚahrefs     €r@   ú	<genexpr>zparse_detail.<locals>.<genexpr>�   s"   øè ø€ Òu°3�5—;‘;“=×)Ñ)¨#×.Ñuùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarÚhttp)r[   rt   Niô  )rX   Úpub_dateÚcontent_htmlÚsummaryÚattachments)r   Úfindrb   rB   rE   rF   rd   re   r^   ÚlistÚattrsr9   rJ   ra   Úanyr8   Ú
startswithr   ÚosÚpathÚbasename)r[   rf   rh   Ú	title_tagrX   Ú
full_titler�   Úinfo_tdro   Ú
content_tdr‚   Útext_summaryÚtagÚattrs_to_keepÚattrr„   rS   r~   s                    @r@   Úparse_detailr•   h   sä  ø€ ä˜˜}Ó-€Dð —	‘	˜'Ó"€IØ€EÙØ×'Ñ'¨dÐ'Ó3ˆ
ä—‘Ð9¸2¸zÓJ×PÑPÓRˆð €HØ�i‰i˜ [ˆiÓ1€GÙÜ�I‰IÐ0°'×2BÑ2BÓ2DÓEˆÙØ—w‘w˜q“zˆHð —‘˜4 F�Ó+€JØ€LØ€LÙà×&Ñ& tÓ,ò 	"ˆCÚEˆMÜ˜SŸY™Y›ò "�Ø˜}Ò,Ø˜D™	ñ"ð	"ô
 ˜:“ˆÜ  Ó,ˆð €KÙØ×$Ñ$ S¨tÐ$Ó4ò 	ˆAØ—E‘E˜& "Ó%ˆEÜÓuÐ:tÔuÕuØ×"Ñ"Ø6;×6FÑ6FÀvÔ6Nœ7 3¨Ô.ÐTYØŸJ™J¨T˜JÓ2ÒM´b·g±g×6FÑ6FÀuÓ6Mñ$õ ð	ð ØØ$Ù)5�<  Ð%Ø"ñð ð <>Ø"ñð rA   c                  ój  — d} g }t        d| dz   «      D ]•  }t        |«      }t        d|› d| › d|› d�«       	 t        j	                  |d¬«      }d	|_        t        |j                  |«      }t        d
t        |«      › d�«       |j                  |«       t        j                  d«       Œ— t        «       }g }|D ]/  }	|	d   |vsŒ|j                  |	d   «       |j                  |	«       Œ1 t        dt        |«      › �«       d}
t!        t"        dd	¬«      5 }t%        |«      D �]  \  }}	t        d|dz   › dt        |«      › d|	d   d d › d�«       	 t        j	                  |	d   d¬«      }d	|_        t'        |	d   |j                  «      }|	d   }|d   r"t        |d   «      t        |	d   «      k\  r|d   }||	d   |d   xs |	d   |d   |d   dd|d   rt)        j*                  |d   d¬ «      nd!d"œ}|j-                  t)        j*                  |d¬ «      d#z   «       |
dz  }
t        j                  d%«       �Œ 	 d d d «       t        d&|
› d't"        › �«       y # t        $ r}t        d|› �«       Y d }~�Œâd }~ww xY w# t        $ r}t        d|	d   › d$|› �«       Y d }~Œ~d }~ww xY w# 1 sw Y   ŒnxY w)(Né   rL   z  Page ú/z (ú)é   ©Útimeoutúutf-8z
    Found z itemsú    [ERROR] g      à?r[   z
Total unique items: r   Úw©Úencodingz  [z] rX   é(   z...r�   r\   r‚   rƒ   õ*   åŒ—äº¬ä¸­çŽ¯é•¿é�’çŽ¯å¢ƒç§‘æŠ€æœ‰é™�å…¬å�¸õ   ä¼�ä¸šr„   F©Úensure_asciir0   ©rX   r[   r\   Úcontentrƒ   Ú	site_namere   r„   r5   ú: ç333333Ó?z
Done! z records written to )ÚrangerP   ÚprintÚsessionra   r¡   rp   rt   ÚlenÚextendÚ	ExceptionÚtimeÚsleepr]   r`   r8   ÚopenÚOUTPUT_FILEÚ	enumerater•   ÚjsonÚdumpsÚwrite)Útotal_pagesÚ	all_itemsÚpager[   Úrespri   ÚeÚ	seen_urlsÚunique_itemsÚitemÚrecord_countÚfÚiÚdetailrX   Úrecords                   r@   Ú	crawl_allrÇ   �   sâ  € Ø€Kà€IÜ�a˜ q™Ó)ò ˆÜ˜4Ó ˆÜ�˜�v˜Q˜{˜m¨2¨c¨U°!Ð4Ô5ð	&Ü—;‘;˜s¨B�;Ó/ˆDØ#ˆDŒMÜ˜tŸy™y¨#Ó.ˆEÜ�Jœs 5›z˜l¨&Ð1Ô2Ø×Ñ˜UÔ#ô 	�
‰
�3�ðô “€IØ€LØò &ˆØ�‰;˜iÒ'Ø�M‰M˜$˜u™+Ô&Ø×Ñ Õ%ð&ô 
Ð"¤3 |Ó#4Ð"5Ð
6Ô7ð €LÜ	Œk˜3¨Ô	1ð °QÜ  Ó.ó 	‰GˆAˆtÜ�C˜˜!™�u˜Aœc ,Ó/Ð0°°4¸±=ÀÀ"Ð3EÐ2FÀcÐJÔKð9Ü—{‘{ 4¨¡;¸�{Ó;�Ø '�”Ü% d¨5¡k°4·9±9Ó=�ð ˜W™�à˜'’?¤s¨6°'©?Ó';¼sÀ4ÈÁ=Ó?QÒ'QØ" 7™O�Eð #Ø ™;Ø" :Ñ.Ò>°$°v±,Ø% nÑ5Ø% iÑ0Ø!MØ%Ø\bÐcpÒ\q¤4§:¡:¨f°]Ñ.CÐRWÕ#XÐwyñ	�ð —‘œŸ
™
 6¸Ô>ÀÑEÔFØ Ñ!�ô �J‰J�sŽOñ7	÷ô< 
ˆH�\�NÐ"6´{°mÐ
DÕEøô[ ò 	&Ü�L  Ð$×%Ò%ûð	&ûôR ò 9Ü˜ T¨%¡[ M°°A°3Ð7×8Ñ8ûð9ú÷5ð úsO   ¸AIÄ:J)ÅCI?È#J)É	I<É#I7É7I<É?	J&ÊJ!ÊJ)Ê!J&Ê&J)Ê)J2Ú__main__z--incrementalz&Incremental mode: crawling page 1 onlyrš   r›   r�   z  Found z items on page 1rŸ   r    r[   rX   r�   r\   r‚   rƒ   r£   r¤   r„   Fr¥   r0   r§   r5   rž   rª   r«   zIncremental done: z records)0Ú__doc__Úrequestsr·   rB   rŠ   Úsysr²   rC   r   Úurllib.parser   rN   rµ   ÚHEADERSÚmakedirsr‹   ÚdirnameÚSessionr®   ÚheadersÚupdater;   rJ   rP   rp   r•   rÇ   Ú__name__ÚargvÚis_incrementalr­   ra   r½   r¡   rt   ri   r¯   r´   rÃ   rÁ   rÅ   rX   r¸   rÆ   r¹   r±   r¾   r³   © rA   r@   ú<module>r×      sV  ðñ÷ )× (× (Ý Ý  à2€Ø9€ð ð  Dð€ð €‡�ˆB�G‰G�O‰O˜KÓ(°4Õ 8à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ò*€òò6Iò
 òD3òj:Fðx ˆzÓØ$¨¯©Ð0€NÚáÐ6Ô7Ø�{‰{˜8¨Rˆ{Ó0ˆØˆŒÙ˜4Ÿ9™9 hÓ/ˆÙ�™˜U›˜Ð$4Ð5Ô6á�+˜s¨WÔ5ð 	 ¸Øò  �ð=Ø"Ÿ;™; t¨E¡{¸B˜;Ó?�DØ$+�D”MÙ)¨$¨u©+°t·y±yÓA�FØ/5°gª˜F 7šOÀDÈÁM�Eà!&Ø# E™{Ø & zÑ 2Ò B°d¸6±lØ#)¨.Ñ#9Ø#)¨)Ñ#4Ø%QØ!)Ø`fÐgtÒ`u z t§z¡z°&¸Ñ2GÐV[Õ'\Ð{}ñ	�Fð —G‘G˜J˜DŸJ™J v¸EÔBÀTÑIÔJð �—
‘
˜3•ñ' ÷	 ñ* 	Ð"¡3 u£: ,¨hÐ7Õ8á�ðC øð8 !ò =Ù˜L¨¨e©¨°R¸°sÐ;×<Ñ<ûð=ú÷%	 ð 	 ús7   ÄH	ÄB"G&Æ-H	Ç&HÇ+HÇ<H	ÈHÈH	È	H