Ë
    ¡Š£jq(  ã                   ó¦  — 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Zdd	d
dœ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d„ Zedk(  �r�dej<                  v �rj ed«       ejA                  ed¬«      Z!de!_"         ee!jF                  «      Z$ ed e%e$«      › d�«        e&edd¬«      5 Z'e$D ]÷  Z(	 ejA                  e(d   d¬«      Z!de!_"         ee(d   e!jF                  «      Z)e)d    xs e(d    Z*e)d!   Z+e+sF ejX                  d"e(d   «      Z-e-r.e(d#   r)e-j]                  d$«      › d%e(d#   j_                  d&d%«      › �Z+e*e(d   e+e)d'   e)d(   d)d*e)d+   r ej`                  e)d+   d,¬-«      nd.d/œZ1e'je                   ej`                  e1d,¬-«      d0z   «        ejj                  d2«       Œù 	 ddd«        ed3 e%e$«      › d4�«       y e«        yy# e3$ rZ4 ed1e4› �«       Y dZ4[4ŒNdZ4[4ww xY w# 1 sw Y   ŒBxY w)5u‡  
Crawl æ–°é‚±åŒºäººæ°‘æ”¿åºœ - ä¾¿æ°‘é€šçŸ¥
https://www.fxxq.gov.cn/channel/list/11520.html
CMS: Custom government CMS
List: <a title="å®Œæ•´æ ‡é¢˜" href="/content/{year}/{id}.html"><span class="time">MM-DD</span></a>
Pagination: /channel/list/11520_2.html ... _19.html (19 pages total)
Detail: <meta ArticleTitle> for title, "æ—¥æœŸï¼šYYYY-MM-DD" for date, .Detailcontent_inner for content
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.fxxq.gov.cnz/https://www.fxxq.gov.cn/channel/list/11520.htmlz#/root/gov_crawler/output/fxxq.jsonlz<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.8)z
User-AgentÚAcceptzAccept-LanguageT)Ú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Úchr2   ÚoutÚwalks     €€€ú/root/gov_crawler/crawl_fxxq.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]*r6   z\n{3,}z

)ÚreÚbs4r2   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr2   r?   r@   s      @@@rA   Ú	body_textrK   '   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrB   c                 ó$   — | dk(  rt         S d| › d�S )Né   z+https://www.fxxq.gov.cn/channel/list/11520_z.html)ÚLIST_URL)Úpage_nums    rA   Úget_page_urlrP   B   s   € Ø�1‚}ÜˆØ8¸¸
À%ÐHÐHrB   c                 óh   — t        j                  d| «      }|rt        |j                  d«      «      S y)Nu   å…±(\d+)é¡µrM   )rC   ÚsearchÚintÚgroup)ÚhtmlÚms     rA   Úget_total_pagesrW   G   s*   € Ü
�	‰	�. $Ó'€AÙÜ�1—7‘7˜1“:‹ÐØrB   c                 ó  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  dd¬«      D ]Í  }|j                  dd	«      }d
|vsd|v rŒ|j	                  d«      st        t        |«      }|j                  dd¬«      }|r|j                  d¬«      n|j                  d¬«      }|sŒ{d	}|j                  dd¬«      }	|	r'|	j                  dd¬«      }
|
r|
j                  d¬«      }|j                  |||dœ«       ŒÏ |S )Núhtml.parserr   Úlist1©Úclass_ÚaT©Úhrefr_   r1   z	/content/zfuxin.gov.cnÚhttpzlist1-ul-link-inner©rG   z
list1-lineÚspanzlist1-ul-date)ÚurlÚtitleÚdate)
r   ÚfindÚfind_allÚgetÚ
startswithr   ÚBASE_URLÚget_textÚfind_parentr9   )rU   ÚsoupÚitemsÚlist_containerr]   r_   Ú	title_divrd   re   Úparent_linerb   s              rA   Ú
parse_listrr   M   s   € Ü˜˜}Ó-€DØ€EØ—Y‘Y˜u¨W�YÓ5€NÙØˆØ×$Ñ$ S¨tÐ$Ó4ò BˆØ�u‰u�V˜RÓ ˆØ˜dÑ" n¸Ñ&<ØØ�‰˜vÔ&Üœ8 TÓ*ˆDà—F‘F˜5Ð)>�FÓ?ˆ	Ù2;�	×"Ñ"¨Ð"Ô.ÀÇÁÐRVÀÓAWˆÙØàˆØ—m‘m E°,�mÓ?ˆÙØ×#Ñ# F°?Ð#ÓCˆDÙØ—}‘}¨4�}Ó0�Ø�‰˜T¨E¸4Ñ@ÕAð%Bð& €LrB   c                 ó  — t        |d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}|j	                  g d¢«      D ]?  }|j                  d	¬
«      }t        j                  d|«      }|sŒ.|j                  d«      } n |j                  dt        j                  d«      ¬«      }	|	s|j                  dd¬«      }	d}
d}g }|	�r|	j	                  d	«      D ]:  }g d¢}t        |j                  «      D ]  }||vsŒ|j                  d«      rŒ||= Œ Œ< t        |	«      }
t        |	«      }|	j	                  dd	¬«      D ]�  }|j                  dd«      }t        j                  d|j                  «       «      sŒ:|j                  d«      r|nt!        | |«      }|j#                  ||j                  d	¬
«      xs t$        j&                  j)                  |«      dœ«       ŒŸ |||
|r|d d |dœS d|dœS )NrY   r1   Úmetar4   ÚArticleTitle)ÚattrsÚcontent)rb   r   r   r   Tra   u'   æ—¥æœŸ[ï¼š:]?\s*(\d{4}-\d{1,2}-\d{1,2})rM   r   ÚDetailcontent_innerr[   Ú
news_inner)r_   ÚsrcÚaltÚtargetÚborderzmso-r]   r^   r_   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r`   )rc   Útextiô  )rd   Úpub_dateÚcontent_htmlÚsummaryÚattachments)r   rf   rh   rG   rg   rk   rC   rR   rT   ÚcompileÚlistrv   ri   r:   rK   Úlowerr   r9   ÚosÚpathÚbasename)rc   rU   rm   rd   rt   r   ÚtagÚtxtrV   Úcontent_divr€   r�   r‚   Úattrs_to_keepÚattrr]   ÚahrefÚfull_urls                     rA   Úparse_detailr�   h   s  € Ü˜˜}Ó-€Dð €EØ�9‰9�V F¨NÐ#;ˆ9Ó<€DÙ�—‘˜Ô#Ø�Y‘×%Ñ%Ó'ˆð €HØ�}‰}Ò7Ó8ò ˆØ�l‰l ˆlÓ&ˆÜ�I‰IÐ@À#ÓFˆÚØ—w‘w˜q“zˆHÙðð —)‘)˜E¬"¯*©*Ð5KÓ*L�)ÓM€KÙØ—i‘i ¨l�iÓ;ˆà€LØ€GØ€KÚØ×'Ñ'¨Ó-ò 	"ˆCÚFˆMÜ˜SŸY™Y›ò "�Ø˜}Ò,°T·_±_ÀVÕ5LØ˜D™	ñ"ð	"ô
 ˜;Ó'ˆÜ˜KÓ(ˆØ×%Ñ% c°Ð%Ó5ò 	qˆAØ—E‘E˜& "Ó%ˆEÜ�y‰yÐ>ÀÇÁÃÕNØ$)×$4Ñ$4°VÔ$<™5Ä'È#ÈuÓBU�Ø×"Ñ"¨8¸Q¿Z¹ZÈd¸ZÓ=SÒ=nÔWY×W^ÑW^×WgÑWgÐhmÓWnÑ#oÕpð		qð ØØ$Ù$+�7˜4˜C�=Ø"ñð ð 24Ø"ñð rB   c                  ó¨  — t        d«       t        j                  t        d¬«      } d| _        t        | j                  «      }t        d|› �«       g }t        d|dz   «      D ]¤  }t        |«      }t        d|› d|› �«       	 |dk(  r| j                  }n*t        j                  |d¬«      } d| _        | j                  }t        |«      }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 �]V  \  }}
t        |
d   «      dkD  r|
d   d d dz   n|
d   }t        d|dz   › dt        |	«      › d|› �«       	 t        j                  |
d   d¬«      } d| _        t+        |
d   | j                  «      }|d   xs |
d   }|d   }|sKt-        j.                  d|
d   «      }|r0|j1                  d«      }|
d   r|› d|
d   j3                  dd«      › �}||
d   ||d   |d   dd|d   rt5        j6                  |d   d ¬!«      nd"d#œ}|j9                  t5        j6                  |d ¬!«      d$z   «       |dz  }t        j                  d«       �ŒY 	 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)(NzFetching page 1...é   ©Útimeoutúutf-8zTotal pages: rM   z  Page ú/z
    Found z itemsz    [ERROR] ç333333Ó?rc   z
Total unique items: r   Úw©Úencodingrd   é(   z...z  [z] r   ú/content/(\d{4})/re   ú-r€   r�   õ   æ–°é‚±åŒºäººæ°‘æ”¿åºœõ	   æ–°é‚±åŒºr‚   F©Úensure_asciir1   ©rd   rc   re   rw   r�   Ú	site_namerT   r‚   r6   z: z
Done! z records written to )ÚprintÚsessionrh   rN   rš   rW   r~   ÚrangerP   rr   ÚlenÚextendÚ	ExceptionÚtimeÚsleepÚsetÚaddr9   ÚopenÚOUTPUT_FILEÚ	enumerater�   rC   rR   rT   ÚreplaceÚjsonÚdumpsÚwrite)ÚrespÚtotal_pagesÚ	all_itemsÚpagerc   Ú	resp_htmlrn   ÚeÚseenÚuniqueÚitemÚrecord_countÚfÚiÚpreviewÚdetailÚfinal_titlere   rV   ÚyearÚrecords                        rA   Ú	crawl_allrÆ   ˜   sn  € Ü	Ð
ÔÜ�;‰;”x¨ˆ;Ó,€DØ€D„MÜ! $§)¡)Ó,€KÜ	ˆM˜+˜Ð
'Ô(à€IÜ�a˜ q™Ó)ò ˆÜ˜4Ó ˆÜ�˜�v˜Q˜{˜mÐ,Ô-ð	&Ø�qŠyØ ŸI™I‘	ä—{‘{ 3°�{Ó3�Ø '�”Ø ŸI™I�	Ü˜yÓ)ˆEÜ�Jœs 5›z˜l¨&Ð1Ô2Ø×Ñ˜UÔ#ô 	�
‰
�3�ðô$ ‹5€DØ€FØò  ˆØ�‰;˜dÒ"Ø�H‰H�T˜%‘[Ô!Ø�M‰M˜$Õð ô 
Ð"¤3 v£; -Ð
0Ô1à€LÜ	Œk˜3¨Ô	1ð !°QÜ  Ó(ó  	‰GˆAˆtÜ47¸¸W¹Ó4FÈÒ4K�d˜7‘m C RÐ(¨5Ò0ÐQUÐV]ÑQ^ˆGÜ�C˜˜!™�u˜Aœc &›k˜]¨"¨W¨IÐ6Ô7ð9Ü—{‘{ 4¨¡;¸�{Ó;�Ø '�”Ü% d¨5¡k°4·9±9Ó=�Ø$ W™oÒ>°°g±�ð ˜jÑ)�ÙÜŸ	™	Ð"6¸¸U¹ÓD�AÙØ Ÿw™w q›z˜Ø š<Ø&* V¨1¨T°&©\×-AÑ-AÀ#ÀsÓ-KÐ,LÐ#M˜Dð )Ø ™;Ø Ø% nÑ5Ø% iÑ0Ø!8Ø(Ø\bÐcpÒ\q¤4§:¡:¨f°]Ñ.CÐRWÕ#XÐwyñ	�ð —‘œŸ
™
 6¸Ô>ÀÑEÔFØ Ñ!�ô �J‰J�sŽOñA 	÷!ôF 
ˆH�\�NÐ"6´{°mÐ
DÕEøôc ò 	&Ü�L  Ð$×%Ò%ûð	&ûôZ ò 9Ü˜ T¨%¡[ M°°A°3Ð7×8Ñ8ûð9ú÷?!ð !úsQ   ÂA0K9Å4AMÇ	C9LËMË9	LÌLÌLÌ	MÌ'M Ì;MÍ MÍMÍMÚ__main__z--incrementalz#Incremental mode: crawl page 1 onlyr’   r“   r•   zFound z items on page 1r˜   r™   rc   rd   r   rœ   re   rM   r�   r–   r€   r�   rž   rŸ   r‚   Fr    r1   r¢   r6   zERROR: r—   zIncremental done: z records)6Ú__doc__Úrequestsr²   rC   r†   Úsysrª   rD   r   Úurllib.parser   rj   rN   r¯   ÚHEADERSÚmakedirsr‡   ÚdirnameÚSessionr¥   ÚheadersÚupdater<   rK   rP   rW   rr   r�   rÆ   Ú__name__Úargvr¤   rh   rµ   rš   r~   rn   r§   r®   r¿   r½   rÂ   rÃ   re   rR   rV   rT   r±   r³   rÅ   r´   r©   rº   r«   © rB   rA   ú<module>rÕ      s•  ðñ÷ )× (× (Ý Ý  à$€Ø<€Ø3€ð QØOØ0ñ€ð €‡�ˆB�G‰G�O‰O˜KÓ(°4Õ 8Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ò*€òò6Iò
òò6.ò`FFðP ˆzÓØ˜#Ÿ(™(Ò"ÙÐ3Ô4Ø�{‰{˜8¨Rˆ{Ó0ˆØˆŒÙ˜4Ÿ9™9Ó%ˆÙ�‘s˜5“z�lÐ"2Ð3Ô4Ù�+˜s¨WÔ5ð 	 ¸Øò  �ð)Ø"Ÿ;™; t¨E¡{¸B˜;Ó?�DØ$+�D”MÙ)¨$¨u©+°t·y±yÓA�FØ"(¨¡/Ò"B°T¸'±]�KØ! *Ñ-�DÙØ%˜BŸI™IÐ&:¸DÀ¹KÓH˜Ù  f¢Ø&'§g¡g¨a£j \°°4¸±<×3GÑ3GÈÈSÓ3QÐ2RÐ#S˜Dà!,Ø# E™{Ø $Ø#)¨.Ñ#9Ø#)¨)Ñ#4Ø%<Ø!,Ø`fÐgtÒ`u z t§z¡z°&¸Ñ2GÐV[Õ'\Ð{}ñ	�Fð —G‘G˜J˜DŸJ™J v¸EÔBÀTÑIÔJð �—
‘
˜3•ñ1 ÷	 ñ4 	Ð"¡3 u£: ,¨hÐ7Õ8á�ðG øð< !ò )Ù˜G A 3˜-×(Ñ(ûð)ú÷/	 ð 	 ús7   ÄIÄC"H*Ç1IÈ*IÈ/H?È:IÈ?IÉIÉI