Ë
    Í«£jŠ+  ã                   óh  — 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Zddlm	Z	 ddl
Z ej                  ej                  j                  «       dZdZedz   ZdZdd	d
dœZ ej(                  dd«      Zh d£Zd„ Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  rŒdZ! e"ejF                  «      dkD  r[ e$ejF                  «      D ]F  \  Z%Z&e&dv r4e%dz    e"ejF                  «      k  sŒ#	  e'ejF                  e%dz      «      Z! n	  e'e&«      Z!ŒH  e(d e)e!d«      «      Z!e!Z e«        yy#  Y Œ,xY w#  Y ŒoxY w)uT   yjgx.gov.cn é˜³æ±Ÿæ»¨æµ·æ–°åŒºï¼ˆé˜³æ±Ÿé«˜æ–°åŒºï¼‰- çŽ¯å¢ƒä¿�æŠ¤ä¿¡æ�¯å…¬å¼€ çˆ¬è™«é    N©ÚBeautifulSoupu@   é˜³æ±Ÿæ»¨æµ·æ–°åŒºï¼ˆé˜³æ±Ÿé«˜æ–°åŒºï¼‰-çŽ¯å¢ƒä¿�æŠ¤ä¿¡æ�¯å…¬å¼€zhttp://www.yjgx.gov.cnz"/zwgk/zdlyxxgk/hjbhxxgk/index.htmlé   z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/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-LanguageÚ	SEARCH_DBz/root/search.db>)   Ú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Úchr3   ÚoutÚwalks     €€€úcrawl_yjgx.pyrA   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]*r7   z\n{3,}ú

)ÚreÚbs4r3   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr3   r@   rA   s      @@@rB   Ú	body_textrM   !   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrC   c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   úhtml.parserÚaÚhrefr2   )ÚhttpÚ
javascriptú#ÚimgÚsrc)rR   z//zdata:)	rF   r   r;   Úfind_allÚgetÚ
startswithÚurllibÚparseÚurljoin)r   Úbase_urlr   ÚtblrP   rQ   rU   rV   s           rB   Úhtml_table_to_htmlr_   <   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€OrC   c                 ó   — t        | d¬«       y )NT)Úflush)Úprint)Úmsgs    rB   Úlogrd   J   s   € Ü	ˆ#�TÖrC   é   c                 óv   — t        j                  | t        d|¬«      }d|_        t	        |j
                  d«      S )NF)ÚheadersÚverifyÚtimeoutzutf-8rO   )ÚrequestsrX   ÚHEADERSÚencodingr   Útext)Úurlri   Úrs      rB   Úget_souprp   M   s.   € Ü�‰�S¤'°%ÀÔI€AØ€A„JÜ˜Ÿ™ Ó/Ð/rC   c           	      ó�  — t        j                  d| «      }|rK|j                  d«      › dt        |j                  d«      «      d›dt        |j                  d«      «      d›�S t        j                  d| «      }|rK|j                  d«      › dt        |j                  d«      «      d›dt        |j                  d«      «      d›�S y)	Nz(\d{4})-(\d{1,2})-(\d{1,2})é   ú-é   Ú02dé   u"   (\d{4})å¹´(\d{1,2})æœˆ(\d{1,2})æ—¥r2   )rE   ÚsearchÚgroupÚint)rm   Úms     rB   Úextract_dater{   R   s§   € Ü
�	‰	Ð0°$Ó7€AÙØ—'‘'˜!“*�˜Qœs 1§7¡7¨1£:›¨sÐ3°1´S¸¿¹À»³_ÀSÐ4IÐJÐJÜ
�	‰	Ð7¸Ó>€AÙØ—'‘'˜!“*�˜Qœs 1§7¡7¨1£:›¨sÐ3°1´S¸¿¹À»³_ÀSÐ4IÐJÐJØrC   c                 ó°  — g }| j                  dd¬«      }|st        d«       |S |j                  d«      }t        |«      dk  rt        d«       |S |d   }|j                  d	«      D ]ì  }|j                  d
«      }|sŒ|j	                  dd«      }|j                  d¬«      }|r|sŒ@|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  dt        j                  dt        j                  «      ¬«      }	t        |	r|	j                  «       nd«      }
|j                  |||
f«       Œî |S )u%   ä»Žåˆ—è¡¨é¡µæ��å�– (title, url, date)r   Úxwlist©Úclass_u     [WARN] æœªæ‰¾åˆ° div.xwlistr   rt   u$     [WARN] xwlist ä¸­æ²¡æœ‰ç¬¬äºŒä¸ªulrr   r   rP   rQ   r2   T©rI   ú/rR   ÚspanÚdate)Úfindrd   rW   ÚlenrX   Úget_textrY   ÚBASE_URLÚlstriprE   ÚcompileÚIr{   r:   )ÚsoupÚitemsr}   Úulsr   r   rP   rQ   Útitler‚   Údate_strs              rB   Úextract_list_itemsr�   [   s4  € à€Eà�Y‰Y�u XˆYÓ.€FÙÜÐ+Ô,ØˆØ
�/‰/˜$Ó
€CÜ
ˆ3ƒx�!‚|ÜÐ2Ô3ØˆØ	ˆQ‰€BØ�k‰k˜$Óò .ˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆØ—
‘
 �
Ó&ˆÙ™5Øà�?‰?˜3ÔÜ˜d‘?‰DØ—‘ Ô(Ü˜c‘> D§K¡K°Ó$4Ñ4ˆDà�w‰w�v¤b§j¡j°¼"¿$¹$Ó&?ˆwÓ@ˆÜ±4 §¡¤¸RÓ@ˆØ�‰�e˜T 8Ð,Õ-ð!.ð" €LrC   c                  ó|   — t         g} t        dt        dz   «      D ]  }| j                  t        d|› d�z   «       Œ  | S )u   ç”Ÿæˆ�å‰�5é¡µçš„URLrt   rr   z/zwgk/zdlyxxgk/hjbhxxgk/index_z.html)ÚLIST_URLÚrangeÚ	MAX_PAGESr:   r‡   )Úurlsr   s     rB   Úget_pagination_urlsr–   {   sE   € äˆ:€DÜ�1”i !‘mÓ$ò JˆØ�‰”HÐ!?À¸sÀ%ÐHÑHÕIðJà€KrC   c           	      ó’  — 	 t        | d¬«      }|j                  dd¬	«      }|s|j                  dd
¬	«      }|st        d| › �«       dg dfS g }|j	                  g d¢d¬«      D ]ò  }|j
                  dk(  r%|j                  d¬«      }|r|j                  |«       |j
                  dk(  r|j                  t        || «      «       Œb|j
                  dk(  sŒr|j                  dd«      }|j                  dd«      }|sŒ™|j                  d«      r|j                  d|› d|› d�«       ŒÃ|j                  d«      sŒÕ|j                  d|› dt        › |› d�«       Œô dj                  |«      }	|	s 
|«      }	g }|j	                  dd¬«      D ]¯  }|d   }t        j                  d|j                  «       «      sŒ-|j                  d¬«      xs |j!                  d«      d   }|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j#                  d«      z   }|j                  ||d œ«       Œ± |j                  «       }
t%        |
«      }t        j                  d!|
«      }|r|j'                  d"«      }|	rt)        |	j+                  «       «      d#k  r|d}|j                  d$«      }|r|j                  d¬«      }|sF|j,                  r:|j,                  j.                  r$|j,                  j.                  j+                  «       }d%| › d&|xs | › d'�}	|	||fS # t        $ r }t        d| › d|› �«       dg dfcY d}~S d}~ww xY w)(uC   æŠ“å�–è¯¦æƒ…é¡µï¼šè¿”å›ž (content_text, attachments_list, pub_date)é   ©ri   u      [WARN] è¯¦æƒ…é¡µè¯·æ±‚å¤±è´¥: z -> r2   Nr   ÚContentr~   Ú
content_nru      [WARN] æœªæ‰¾åˆ°å†…å®¹å®¹å™¨: )r   r   r   rU   T)Ú	recursiver   r€   r   rU   rV   ÚaltrR   z![ú](ú)r�   rD   rP   )rQ   rQ   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$éÿÿÿÿ)r5   rn   u,   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})rr   re   r   ú<p><a href="ú">ú</a></p>)rp   Ú	Exceptionrd   r„   rW   r5   r†   r:   r_   rX   rY   r‡   rG   rE   rw   ÚlowerÚsplitrˆ   r{   rx   r…   rI   rŽ   Ústring)rn   r‹   ÚeÚcontent_divÚpartsÚtagrm   rV   r�   ÚcontentrM   ÚattachmentsrP   ÚahrefÚanameÚpub_daterz   Ú_tÚ_hs                      rB   Úfetch_detailr³   ‚   s  € ðÜ˜ RÔ(ˆð —)‘)˜E¨)�)Ó4€KÙØ—i‘i ¨l�iÓ;ˆÙÜÐ.¨s¨eÐ4Ô5Ø�2�rˆzÐð €EØ×#Ñ#Ò$@ÈDÐ#ÓQò ?ˆØ�8‰8�sŠ?Ø—<‘< d�<Ó+ˆDÙØ—‘˜TÔ"Ø�8‰8�wÒØ�L‰LÔ+¨C°Ó5Õ6Ø�X‰X˜ÓØ—'‘'˜% Ó$ˆCØ—'‘'˜% Ó$ˆCÚØ—>‘> &Ô)Ø—L‘L 2 c U¨"¨S¨E°Ð!3Õ4Ø—^‘^ CÕ(Ø—L‘L 2 c U¨"¬X¨J°s°e¸1Ð!=Õ>ð?ð  �k‰k˜%Ó €GÙÙ˜KÓ(ˆð €KØ×!Ñ! #¨DÐ!Ó1ò >ˆØ�&‘	ˆÜ�9‰9Ð:¸E¿K¹K»MÕJØ—J‘J T�JÓ*ÒB¨e¯k©k¸#Ó.>¸rÑ.BˆEØ×Ñ Ô$Ü  5Ñ(‘Ø×%Ñ% fÔ-Ü  3™¨¯©°cÓ):Ñ:�Ø×Ñ¨°eÑ<Õ=ð>ð —‘“€IÜ˜IÓ&€HÜ
�	‰	ÐAÀ9ÓM€AÙØ—7‘7˜1“:ˆá”c˜'Ÿ-™-›/Ó*¨RÒ/ØˆØ�Y‰Y�t‹_ˆÙØ—‘ 4�Ó(ˆBÙ�d—j’j T§Z¡Z×%6Ò%6Ø—‘×"Ñ"×(Ñ(Ó*ˆBØ    R¨ª	¨c {°(Ð;ˆà�K Ð)Ð)øô} ò ÜÐ.¨s¨e°4¸°sÐ;Ô<Ø�2�rˆzÕûðús   ‚L Ì	MÌ&MÌ;MÍMc                  ó<  — dd l } | j                  t        d¬«      }|j                  d«       t	        «       }g }t        |«      D ]g  \  }}t        d|dz   › dt        |«      › d|› �«       	 t        |d	¬«      }t        |«      }t        d
t        |«      › d�«       |j                  |«       Œi t        dt        |«      › d�«       t        «       }	g }
|D ]0  \  }}}||	vsŒ|	j                  |«       |
j                  |||f«       Œ2 t        dt        |
«      › d�«       t        «       }	 |j                  dt        f«      D ]  }|j                  |d   «       Œ 	 d}d}d}t        |
«      D �]Y  \  }\  }}}||v r|dz  }Œt        d|dz   › dt        |
«      › d|d d › d�«       t!        |«      \  }}}|r|s|}|rt        |j#                  «       «      d	k  r+d|› d|› d�}|r dj%                  d„ |D «       «      }|d|z   z  }|r|d d n|}d}t'        |«      D ]•  }	 |j                  d|||||t        |f«       |j(                  dkD  rE|dz  }t        d|d d › d |› �«       |r:|j                  d!t+        j,                  |d"¬#«      |f«       n|dz  }t        d$«       |j/                  «         n t3        j4                  d)«       �Œ\ |j9                  «        t        dd*› �«       t        d+|› d,|› d-|› �«       t        d*› «       y # t        $ r}t        d|› �«       Y d }~�Œád }~ww xY w#  Y �Œ×xY w# t        $ r]}d%t1        |«      v rC||dz
  k  r;t        d&|dz   › d|› d'�«       t3        j4                  d(«       |j7                  «        n|‚Y d }~�Œ}d }~ww xY w).Nr   é<   r™   zPRAGMA busy_timeout=5000u   
åˆ—è¡¨é¡µ rr   r�   z: re   u	     æ‰¾åˆ° u    æ�¡u     [ERROR] åˆ—è¡¨é¡µå¤±è´¥: u   
å…±èŽ·å�– u    æ�¡æ–‡ç« é“¾æŽ¥u   åŽ»é‡�å�Ž: z.SELECT page_url FROM gov_raw WHERE site_name=?z
[z] é2   z...r¡   r¢   r£   r7   c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)z- [r5   rž   rn   rŸ   N© )Ú.0rP   s     rB   ú	<genexpr>zcrawl.<locals>.<genexpr>   s'   è ø€ Ò(]ÈA¨3¨q°©y¨k¸¸A¸e¹H¸:ÀQÔ)GÑ(]ùs   ‚rD   éÈ   rv   z¼
                    INSERT OR IGNORE INTO gov_raw(title, content, publish_date, source_url, page_url, site_name, summary)
                    VALUES (?, ?, ?, ?, ?, ?, ?)
                u     âœ… æ–°å¢ž: é(   z | date=z1UPDATE gov_raw SET attachments=? WHERE page_url=?F)Úensure_asciiu     â�­ï¸� å·²å­˜åœ¨zdatabase is lockedu     â�³ DBé”�ä½�, ç­‰å¾… (z)...rt   g      à?z2==================================================u     å®Œæˆ�! æ–°å¢ž: u
     è·³è¿‡: u
     é”™è¯¯: )Úsqlite3Úconnectr   Úexecuter–   Ú	enumeraterd   r…   rp   r�   Úextendr¤   ÚsetÚaddr:   Ú	SITE_NAMEr³   rI   rG   r“   Útotal_changesÚjsonÚdumpsÚcommitr;   ÚtimeÚsleepÚrollbackÚclose)r¾   ÚconnÚ	list_urlsÚ	all_itemsÚpiÚpurlr‹   rŒ   r¨   Ú	seen_urlsÚunique_itemsrŽ   rn   rƒ   ÚexistingÚrowÚ	new_countÚ
skip_countÚerror_countÚidxr°   r¬   r­   Údetail_dateÚattach_linksÚsummaryÚretriesÚattempts                               rB   Úcrawlrà   Ç   s  € Ûà�?‰?œ9¨bˆ?Ó1€DØ‡L�LÐ+Ô,ä#Ó%€Ià€IÜ˜iÓ(ò 3‰ˆˆDÜˆl˜2˜a™4˜& ¤# i£.Ð!1°°D°6Ð:Ô;ð	3Ü˜D¨"Ô-ˆDÜ& tÓ,ˆEÜ�)œC ›J˜< tÐ,Ô-Ø×Ñ˜UÕ#ð3ô ˆ,”s˜9“~Ð&Ð&6Ð7Ô8ô “€IØ€LØ%ò 4Ñˆˆs�DØ�iÒØ�M‰M˜#ÔØ×Ñ ¨¨TÐ 2Õ3ð4ô ˆ+”c˜,Ó'Ð(¨Ð-Ô.ô ‹u€HðØ—<‘<Ð PÔS\ÐR^Ó_ò 	!ˆCØ�L‰L˜˜Q™Õ ñ	!ð
 €IØ€JØ€Kä'0°Ó'>ó .Ñ#ˆÑ#ˆe�S˜(Ø�(‰?Ø˜!‰OˆJØäˆc�#�a‘%�˜œ#˜lÓ+Ð,¨B¨u°S°b¨z¨l¸#Ð>Ô?ä,8¸Ó,=Ñ)ˆ�˜kÙ™xØ"ˆHñ œ#˜gŸm™m›oÓ.°Ò3Ø$ S E¨¨E¨7°(Ð;ˆGÙØ#Ÿy™yÑ(]ÐQ\Ô(]Ó]�Ø˜6 LÑ0Ñ0�á#*�'˜$˜3‘-°ˆàˆÜ˜W“~ò 	ˆGðØ—‘ð ð ˜W h°°S¼)ÀWÐMôOð
 ×%Ñ%¨Ò)Ø ‘N�IÜ˜.¨¨s°¨¨°H¸X¸JÐGÔHÙ"ØŸ™Ð%XÔ[_×[eÑ[eÐfqð  AFô  \Gð  ILð  [Mõ  Nà !‘O�JÜÐ,Ô.Ø—‘”Ùð!	ô2 	�
‰
�3Žð].ð` 	‡J�J„LÜˆ"ˆVˆHˆÔÜÐ
˜Y˜K z°*°¸ZÈÀ}ÐUÔVÜˆ6ˆ(Õøô[ ò 	3ÜÐ-¨a¨SÐ1×2Ò2ûð	3ûð&ÚûôX ò Ø'¬3¨q«6Ñ1°gÀÈ!ÁÒ6KÜÐ2°7¸1±9°+¸Q¸w¸iÀtÐLÔMÜ—J‘J˜q”MØ—M‘M•Oà�Gõ $ûð	ús?   Á+ALÄ*0L- ÈBL5Ì	L*ÌL%Ì%L*Ì-L2Ì5	NÌ>ANÎNÚ__main__rr   )z--pagesz-pz--max-pages)r2   )re   )*Ú__doc__rj   rE   ÚosÚsysrÇ   rÊ   Úurllib3rF   r   Úurllib.parserZ   Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrÅ   r‡   r’   r”   rk   Úgetenvr   r=   rM   r_   rd   rp   r{   r�   r–   r³   rà   Ú__name__Ú	pages_argr…   ÚargvrÁ   ÚiÚargry   ÚmaxÚminr¸   rC   rB   ú<module>rò      sn  ðá Zß 1× 1× 1Ó 1Ý Û à €× Ñ ˜×+Ñ+×BÑBÔ CàN€	Ø#€ØÐ:Ñ:€Ø€	ð pØOØ0ñ€ð ˆB�I‰I�kÐ#4Ó5€	ò*€òó6òó0ò
òò@òB*òJ]ð@ ˆzÒØ€IÙ
ˆ3�8‰8ƒ}�qÒÙ §¡Ó)ò 	‰FˆAˆsØÐ6Ñ6Ø�q‘5™3˜sŸx™x›=Ó(ðÙ$'¨¯©°°1±©Ó$6˜	ñ ðÙ # C£‘Ið	ñ �A‘s˜9 bÓ)Ó*€IØ€IÙ	…Gð% øðÙûð
Ùús   Ã&D&ÄD-Ä&D*Ä-D1