Ë
    +„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ZddlmZm	Z	 ddl
mZ ddlmZ dZdZdZeez   d	z   Zd
ZdZ ej(                  «        e	d¬«      z
  j+                  d«      Zej.                  j1                  dd«      ZddiZd„ Zd„ Zd"d„Zd„ Zd#d„Zd„ Z d$d„Z!e"dk(  rƒejF                  dd Z$dZ%dZ&ddjO                  e$«      v r7 e( ejR                  ddjO                  e$«      «      jU                  d«      «      Z%d e$v re$e$jW                  d «      dz      Z& e!e%e&¬!«       yy)%u4  
é‡‘æ²™åŽ¿äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤ (gzjinsha.gov.cn/xxgk/zxgk/tgrye/)
åˆ—è¡¨: /xxgk/zxgk/tgrye/ (P1), index_{N}.html (PN, å…±12é¡µ)
åˆ—è¡¨é¡¹: JSå�˜é‡� var str_1=URL str_3=æ—¥æœŸ str_4=æ ‡é¢˜ (document.writeç”Ÿæˆ�)
è¯¦æƒ…: TRS_UEDITOR
ç”¨æ³•: python3 crawl_gzjinsha_hjbh.py [--pages=N] [--json out.jsonl]
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinu"   é‡‘æ²™åŽ¿äººæ°‘æ”¿åºœ-çŽ¯å¢ƒä¿�æŠ¤zhttps://www.gzjinsha.gov.cnz/xxgk/zxgk/tgryeú/zwww.gzjinsha.gov.cnu   è´µå·žiG  )Údaysz%Y-%m-%dÚDB_PATHz/root/search.dbz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú(/root/gov_crawler/crawl_gzjinsha_hjbh.pyÚlogr      s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 ó´   — t        j                  dd| xs d«      } t        j                  dd| «      } t        j                  dd| «      j                  «       } | S )Nz&nbsp;|&#160;|\u200b|\ufeffÚ z\s+ú u   \.\.\.|â€¦$)ÚreÚsubÚstrip)Úts    r   Úclean_titler      sK   € Ü
�‰Ð-¨r°1²7¸Ó;€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰ˆ~˜r 1Ó%×+Ñ+Ó-€AØ€Hr   c                 ó&  — t        d«      D ]3  }	 t        j                  | t        |¬«      }d|_        |j
                  c S  y# t        $ rD}|dk(  rt        d| dd  › d|› �«       Y d }~ yt        j                  d	|d
z   z  «       Y d }~Œd }~ww xY w)Né   )ÚheadersÚtimeoutúutf-8é   z
fetch ERR iÎÿÿÿú: r   é   é   )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	Exceptionr   ÚtimeÚsleep)Úurlr   ÚattemptÚrÚes        r   Úfetchr1   "   s�   € Ü˜“8ò 	*ˆð	*Ü—‘˜S¬'¸7ÔCˆAØ ˆAŒJØ—6‘6ŠMð		*ð øô ò 	*Ø˜!Š|Ü�j  S T  ¨2¨a¨SÐ1Ô2ÝÜ�J‰J�q˜G a™KÑ(×)Ñ)ûð		*ús   �.AÁ	BÁBÁ+BÂBc                 óð  — | dk(  rt         nt         › d| › d�}t        |«      }|sg S g }t        j                  dt        j                  «      }|j                  |«      D ]•  }|j                  d«      |j                  d«      |j                  d«      }}}t        |«      }|j                  d«      r|nt        t         |«      }	|sŒgd|v sd	|v sŒp|j                  ||	|j                  «       d d
 dœ«       Œ— |S )Nr#   Úindex_z.htmlz]var str_1\s*=\s*"([^"]*)"\s*;.*?var str_3\s*=\s*"([^"]*)"\s*;.*?var str_4\s*=\s*"([^"]*)"\s*;r"   r    ÚhttpÚt20Ú20é
   )Útitler-   Údate)ÚLIST_URLr1   r   ÚcompileÚSÚfinditerÚgroupr   Ú
startswithr   Úappendr   )
Úpager-   ÚhtmlÚitemsÚ	block_patÚmÚhrefr9   r8   Úfulls
             r   Ú
fetch_listrH   /   sê   € Ø˜a’i�(¬ z°¸°v¸UÐ%C€CÜ�‹:€DÙØˆ	Ø€Eä—
‘
ð	)ô 	�‰ó	€Ið
 ×Ñ Ó%ò SˆØŸG™G A›J¨¯©°«
°A·G±G¸A³J�EˆdˆÜ˜EÓ"ˆØ—‘ vÔ.‰t´G¼HÀdÓ4KˆÚ�e˜t‘m t¨t¢|Ø�L‰L 5°¸t¿z¹z»|ÈCÈRÐ?PÑQÕRðSð €Lr   c                 ó°  — | syt        | d«      }|j                  dd¬«      D ]V  }|j                  dd«      }|j                  d¬«      xs d}t	        |xs t
        |«      }|j                  d	|› d
|› d�«       ŒX |j                  g d¢«      D ]  }|j                  «        Œ g }|j                  ddg«      D ]y  }	|	j                  dk(  r|j                  t        |	«      «       Œ-|	j                  dk(  sŒ=|	j                  d«      rŒO|	j                  dd¬«      }
|
sŒe|j                  d|
› d�«       Œ{ |rdj                  |«      S | j                  «       S )Nr   úhtml.parserÚaT)rF   rF   ©r   u   é™„ä»¶z<p><a href="z">z</a></p>)ÚspanÚbÚstrongÚfontÚemÚiÚuÚsÚtableÚp)Ú	separatorr   z<p>z</p>z

)r   Úfind_allr&   Úget_textr   ÚBASE_URLÚreplace_withÚunwrapÚnamer@   ÚstrÚfind_parentÚjoinr   )Úcontent_htmlÚpage_urlÚsoupÚa_tagrF   r)   Úfull_urlÚtagÚpartsÚelr   s              r   Úextract_clean_textri   C   sF  € ÙØÜ˜ }Ó5€DØ—‘˜s¨�Ó.ò FˆØ�y‰y˜ Ó$ˆØ�~‰~ Dˆ~Ó)Ò5¨XˆÜ˜8Ò/¤x°Ó6ˆØ×Ñ˜\¨(¨°2°d°V¸8ÐDÕEð	Fð
 �}‰}ÒQÓRò ˆØ�
‰
�ðà€EØ�m‰m˜W c˜NÓ+ò ,ˆØ�7‰7�gÒØ�L‰Lœ˜R›Õ!Ø�W‰W˜‹^ B§N¡N°7Õ$;Ø—‘ b°�Ó5ˆAÚØ—‘˜s 1 # T˜]Õ+ð,ñ "'ˆ6�;‰;�uÓÐ@¨L×,>Ñ,>Ó,@Ð@r   c                 ó”  — t        | «      }|sddddœS t        |d«      }ddddœ}|j                  d«      }|rt        |j	                  d¬«      «      |d<   t        j                  d|d d «      }|r|j                  d	«      |d
<   |j                  dd¬«      }|s|j                  dd¬«      }|rt        t        |«      | «      |d<   |S )Nr   )r8   Úpublish_dateÚcontentrJ   r8   TrL   z(\d{4}-\d{2}-\d{2})i@  r#   rk   ÚdivÚTRS_UEDITOR)Úclass_rl   )
r1   r   Úfindr   rY   r   Úsearchr>   ri   r^   )r-   rB   rc   ÚresultÚttagrE   Úcontent_divs          r   Úparse_detailru   X   sÎ   € Ü�‹:€DÙØ¨R¸BÑ?Ð?Ü˜˜}Ó-€DØ¨2¸"Ñ=€FØ�9‰9�WÓ€DÙÜ% d§m¡m¸$ mÓ&?Ó@ˆˆw‰Ü
�	‰	Ð(¨$¨u°¨+Ó6€AÙØ!"§¡¨£ˆˆ~ÑØ—)‘)˜E¨-�)Ó8€KÙØ—i‘i ¨i�iÓ8ˆÙÜ.¬s°;Ó/?ÀÓEˆˆyÑØ€Mr   é   c                 ó¨  — t        d| › dt        › �«       g }t        «       }t        d| dz   «      D ]Š  }t	        |«      }d}|D ]4  }|d   |vsŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        d|› dt        |«      › d|› d	t        |«      › �«       |s nt        j                  d
«       ŒŒ g }t        |d«      D ]ž  \  }	}t        |d   «      }
|
d   s|d   r|
d   xs |d   t        k  rŒ2|j                  |
d   xs |d   |d   |
d   xs |d   |
d   t        ddœ«       |	dz  dk(  rt        d|	› dt        |«      › �«       t        j                  d«       Œ  |rct        |dd¬«      5 }|D ]+  }|j                  t        j                   |d¬«      dz   «       Œ- 	 d d d «       t        dt        |«      › d|› �«       y t#        j$                  t&        «      }|j)                  d«       |j+                  «       }dx}}|D ]W  }	 |j)                  d|d   |d    |d    |d   |d   |d   |d   xs d!d d" |d#   d$f	«       |j,                  dkD  r|dz  }n|dz  }ŒY |j1                  «        |j3                  «        t        d&|› d'|› d(�«       y # 1 sw Y   ŒñxY w# t.        $ r}t        d%|› �«       |dz  }Y d }~Œºd }~ww xY w))NzCrawl pages=z cutoff=r#   r   r-   ÚPr!   z items (z new), total g333333ã?rk   r9   r8   rl   u   çŽ¯å¢ƒä¿�æŠ¤)r8   rb   rk   rl   Ú	site_nameÚcolumnr7   z  r   g333333Ó?Úwr   )r(   F)Úensure_asciiú
zJSONL: z
 items -> zPRAGMA busy_timeout=10000z˜INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, content, summary, category, script_name) VALUES (?,?,?,?,?,?,?,?,?)ry   rb   r   iô  rz   zcrawl_gzjinsha_hjbh.pyz
DB error: zResult: z new, z skipped)r   ÚCUTOFFÚsetr$   rH   Úaddr@   Úlenr+   r,   Ú	enumerateru   r   ÚopenÚwriteÚjsonÚdumpsÚsqlite3Úconnectr	   ÚexecuteÚcursorÚrowcountr*   ÚcommitÚclose)ÚpagesÚjson_outÚ	items_allÚseenrV   rC   ÚnewÚitÚenrichedÚidxÚdÚfÚitemÚconnÚcÚstoredÚskippedr0   s                     r   Úcrawlr�   k   s'  € Üˆ,�u�g˜X¤f XÐ.Ô/Ø€IÜ‹5€DÜ�1�e˜a‘iÓ ò ˆÜ˜1“ˆØˆØò 	ˆBØ�%‰y Ò$Ø—‘˜˜E™Ô#Ø× Ñ  Ô$Ø�q‘‘ð		ô
 	ˆa�ˆs�"”S˜“Z�L ¨¨¨]¼3¸y»>Ð:JÐKÔLÙÙÜ�
‰
�3�ðð €HÜ˜Y¨Ó*ò ‰ˆˆRÜ˜˜E™Ó#ˆØˆnÒ  F¢°!°NÑ2CÒ2QÀrÈ&ÁzÔU[Ò1[ØØ�‰Ø�w‘ZÒ. 2 g¡;Ø˜5™	Ø˜nÑ-Ò;°°F±Ø˜‘|Ü"Ø$ñ
ô 	ð �‰8�qŠ=Ü�"�S�E˜œ3˜y›>Ð*Ð+Ô,Ü�
‰
�3�ðñ  Ü�(˜C¨'Ô2ð 	E°aØ ò E�Ø—‘œŸ
™
 4°eÔ<¸tÑCÕDñE÷	Eô 	ˆg”c˜(“m�_ J¨x¨jÐ9Ô:Øä�?‰?œ7Ó#€DØ‡L�LÐ,Ô-Ø�‰‹€AØÐ€FˆWØò ˆð	Ø�I‰Ið.ð �kÑ" D¨Ñ$4°d¸:Ñ6FØ�g‘  ^Ñ 4°d¸9±oØ�y‘/Ò' R¨¨#Ð.°°X±Ð@XðZô	[ð �z‰z˜AŠ~Ø˜!‘‘à˜1‘�øðð  	‡K�K„MØ‡J�J„LÜˆ(�6�(˜&  	¨Ð2Õ3÷9	Eð 	Eûô. ò 	Ü�*˜Q˜CÐ Ô!Ø�q‰L�Gûð	ús%   Å=1JÈAJ+ÊJ(Ê+	KÊ4KËKÚ__main__r#   z--pages=r   z--pages=(\d+)z--json)rŽ   r�   )é   )N)rv   N),Ú__doc__r   ÚsysÚosr…   r+   r‡   r%   r   r   Úbs4r   Úurllib.parser   r   rZ   Ú	LIST_PATHr:   ÚDOMAINÚGROUPÚnowÚstrftimer~   Úenvironr&   r	   r'   r   r   r1   rH   ri   ru   r�   Ú__name__ÚargvÚargsrŽ   r�   r`   Úintrq   r>   Úindex© r   r   ú<module>r±      sC  ðñ÷ 2× 1× 1Ó 1ß (Ý Ý  à0€	Ø(€Ø€	Ø�iÑ #Ñ%€Ø	€Ø€Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€Ø
�*‰*�.‰.˜Ð$5Ó
6€Øð  Kð  L€ò.òóòó(Aò*ó&?4ðB ˆzÒØ�8‰8�A�Bˆ<€DØ€EØ€HØ�S—X‘X˜d“^Ñ#Ù�I�B—I‘IÐ.°·±¸³Ó?×EÑEÀaÓHÓIˆØ�4ÑØ˜Ÿ
™
 8Ó,¨qÑ0Ñ1ˆÙ	� Ö)ð r   