Ë
    V_Šj×$  ã                   óv  — 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Z	e	dz   Z
dZdZdd	d
dœZd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zedk(  roddlZ ej,                  d¬«      Zej1                  dedd¬«       ej1                  ddd¬«       ej5                  «       Z eej8                  ej:                  ¬«       yy) uð   ç« è´¡åŒºäººæ°‘æ”¿åºœ - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·çˆ¬è™«
ç«™ç‚¹: www.zgq.gov.cn (ç« è´¡åŒº, èµ£å·ž, æ±Ÿè¥¿)
æ �ç›®: /zgqxxgk/c108220/xxgk_list.shtml (å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·)
CMS: ç« è´¡åŒºä¿¡æ�¯å…¬å¼€ç³»ç»Ÿï¼ˆå�Œè¡Œæ”¿è®¸å�¯ï¼‰
é    N)ÚBeautifulSoupzhttps://www.zgq.gov.cnz /zgqxxgk/c108220/xxgk_list.shtmlz/root/search.dbzwww.zgq.gov.cn-hjxpzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z`text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                  óZ   — t        j                  t        «      } | j                  d«       | S )NzPRAGMA journal_mode=WAL)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    ú#/root/gov_crawler/crawl_zgq_hjxp.pyÚinit_dbr      s"   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø€Kó    c                 ó@  — 	 t        j                  | t        |¬«      }d|_        |j                  dk(  r|j
                  S t        d|j                  › d| › �t        j                  ¬«       y # t        $ r(}t        d|› �t        j                  ¬«       Y d }~y d }~ww xY w)N)ÚheadersÚtimeoutzutf-8éÈ   z  [WARN] HTTP z for )Úfilez  [ERROR] fetch failed: )
ÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚprintÚsysÚstderrÚ	Exception)Úurlr   ÚrespÚes       r   Ú
fetch_pager        s†   € ð	Ü�|‰|˜C¬¸'ÔBˆØˆŒØ×Ñ˜sÒ"Ø—9‘9ÐÜ�˜t×/Ñ/Ð0°°c°UÐ;Ä#Ç*Á*ÕMØøÜò ÜÐ(¨¨Ð,´3·:±:Õ>Üûðús   ‚=A, Á +A, Á,	BÁ5BÂBc                 ój  — g }t        | d«      }|j                  dd¬«      }|s|j                  dd¬«      }|s|S |j                  d«      }|sˆ|j                  d«      D ]t  }|j                  dd¬	«      }d
}|D ]O  }|j                  d«      }	|	sŒd|	j                  dd«      v sŒ,t	        |	j                  d¬«      «      dkD  sŒK|dz  }ŒQ |dk\  sŒr|} n |s|S |j                  dd¬	«      D �]B  }|j                  d«      }	|	r|	j                  d«      sŒ)|	d   j                  «       }
d|
vrŒA|
j                  d«      r
t        |
z   }n |
j                  d«      r|
}nt        dz   |
z   }|	j                  d«      xs |	j                  d¬«      xs d}t        j                  dd|«      j                  «       }|rt	        |«      dk  rŒÛd}|j                  g d¢«      D ];  }t        j                  d|j                  «       «      }|sŒ*|j                  d«      } n |j                  |||dœ«       �ŒE |S )u   è§£æž�åˆ—è¡¨é¡µúhtml.parserÚdivzxxgk-mainContent©Úclass_zxxgk-mainBoxÚulÚliF)Ú	recursiver   Úaz	/c108220/ÚhrefÚ T©Ústripé
   é   ú/ÚhttpÚtitlez\s+ú é   )ÚspanÚemÚfontú(\d{4}-\d{2}-\d{2}))r   r2   Úpub_date)r   ÚfindÚfind_allr   ÚlenÚget_textr-   Ú
startswithÚBASE_URLÚreÚsubÚsearchÚgroupÚappend)ÚhtmlÚitemsÚsoupÚmainr&   ÚuÚlisÚcountr'   r)   r*   Úfull_urlr2   r9   r5   Úms                   r   Ú
parse_listrN   ,   s/  € à€EÜ˜˜}Ó-€Dð �9‰9�UÐ#5ˆ9Ó6€DÙØ�y‰y˜ ~ˆyÓ6ˆÙØˆà	�‰�4‹€BÙà—‘˜tÓ$ò 		ˆAØ—*‘*˜T¨U�*Ó3ˆCØˆEØò �Ø—G‘G˜C“L�Ú˜¨¯©¨f°RÓ(8Ò8¼SÀÇÁÐRVÀÓAWÓ=XÐ[]Ó=]Ø˜Q‘J‘Eðð ˜‹{Ø�Ùð		ñ Øˆà�k‰k˜$¨%ˆkÓ0ó NˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØà�‰y�‰Ó ˆØ˜dÑ"Øà�?‰?˜3ÔÜ $‘‰HØ�_‰_˜VÔ$Ø‰Hä #‘~¨Ñ,ˆHà—‘�g“Ò> !§*¡*°4 *Ó"8Ò>¸BˆÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙœ˜E›
 QšØð ˆØ—K‘KÒ 6Ó7ò 	ˆDÜ—	‘	Ð0°$·-±-³/ÓBˆAÚØŸ7™7 1›:�Ùð		ð 	�‰˜X°À8ÑLÖMð;Nð> €Lr   c                 ób  ‡— t        | d«      }d}|j                  d«      }|r|j                  d¬«      }|s'|j                  dd¬«      }|r|j                  d¬«      }d}|j                  d	«      }|r7t        j                  d
|j                  «       «      }|r|j                  d«      }|sL|j                  dd¬«      }	|	r7t        j                  d|	j                  «       «      }|r|j                  d«      }|j                  dd¬«      }
|
s|j                  dd¬«      }
d}|j                  d«      }|r|j                  dd¬«      }g }|
rØ|
j                  d«      D ]Ä  }|j                  dd«      j                  «       Št        ˆfd„dD «       «      sŒ8‰j                  d«      s t        j                  j                  |‰«      Š|j                  d¬«      xs t        j                  j!                  ‰«      }t        ˆfd„|D «       «      rŒ±|j#                  ‰|dœ«       ŒÆ d}|
�r#|
j                  ddg«      D ]  }|j%                  «        Œ t'        «       }|
j                  d«      D ];  }|j                  d¬«      }||v rŒ|j)                  |«       |t+        |«      dz   z  }Œ= t        t+        |
«      d«      }|j                  d«      D ]  }|j%                  «        Œ |j                  d«      }|rAg }|D ](  }|j                  d¬«      }|sŒ|j#                  |«       Œ* dj-                  |«      }n|j                  dd¬«      }t        j.                  dd|«      }|r|d |z   z  }t1        |j                  «       «      d!k  r"d"|› d#|› d$�}|D ]  }|d%|d&   › d'|d(   › d)�z  }Œ ||||fS )*u'   è§£æž�è¯¦æƒ…é¡µï¼ˆå�Œè¡Œæ”¿è®¸å�¯CMSï¼‰r"   r+   Ú	ucaptitleTr,   Úh1zarticle-titler$   ÚPUBLISHTIMEr8   r/   r#   z	meta-datau(   ç”Ÿæˆ�æ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})zarticle-content-bodyzarticle-contentÚucapcontentz

)Ú	separatorr-   r)   r*   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Úendswith)Ú.0Úextr*   s     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>–   s    øè ø€ ò `¨#�4—=‘= ×%ñ `ùs   ƒ)	z.docz.docxz.pdfz.xlsz.xlsxz.zipz.rarz.pptz.pptxr1   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r   N© )rW   r)   r*   s     €r   rY   zparse_detail.<locals>.<genexpr>›   s   øè ø€ ÒA°˜1˜U™8 tÕ+ÑAùs   ƒ)r   r2   ÚscriptÚstyleÚtableÚpz\n{4,}u   

[è¡¨æ ¼]

é   z<p><a href="z">z	</a></p>
u
   
é™„ä»¶: [r2   z](r   ú))r   r:   r=   r@   rB   rC   r;   r   r-   Úanyr>   r   ÚcompatÚurljoinÚosÚpathÚbasenamerD   Ú	decomposeÚsetÚaddÚstrÚjoinrA   r<   )rE   r   rG   r2   ÚucaprQ   r9   ÚptrM   Úmeta_divÚcontent_divÚcontentÚucap_cÚattachmentsÚa_tagÚ	att_titleÚtables_htmlÚtagÚseen_tablesr^   ÚtxtÚcontent_div_cleanÚ
paragraphsÚ
para_textsr_   Úp_textÚattr*   s                              @r   Úparse_detailr   j   s·  ø€ ä˜˜}Ó-€Dð €EØ�9‰9�[Ó!€DÙØ—‘ D�Ó)ˆÙØ�Y‰Y�t OˆYÓ4ˆÙØ—K‘K d�KÓ+ˆEð €HØ	�‰�=Ó	!€BÙ	Ü�I‰IÐ,¨b¯k©k«mÓ<ˆÙØ—w‘w˜q“zˆHÙØ—9‘9˜U¨;�9Ó7ˆÙÜ—	‘	ÐEÀx×GXÑGXÓGZÓ[ˆAÙØŸ7™7 1›:�ð —)‘)˜EÐ*@�)ÓA€KÙØ—i‘i Ð.?�iÓ@ˆð €GØ�Y‰Y�}Ó%€FÙØ—/‘/¨F¸$�/Ó?ˆð €KÙØ ×)Ñ)¨#Ó.ò 	JˆEØ—9‘9˜V RÓ(×.Ñ.Ó0ˆDÜó `Ø^ô`õ `à—‘ vÔ.Ü#Ÿ?™?×2Ñ2°3¸Ó=�DØ!ŸN™N°˜NÓ6ÒP¼"¿'¹'×:JÑ:JÈ4Ó:P�	ÜÓA°[ÔAÕAØ×&Ñ&¨t¸iÑ'HÕIð	Jð €KÚØ×'Ñ'¨°7Ð(;Ó<ò 	ˆCØ�M‰M�Oð	ô “eˆØ ×)Ñ)¨'Ó2ò 	/ˆEØ—.‘. t�.Ó,ˆCØ�kÑ!ØØ�O‰O˜CÔ Øœ3˜u›:¨Ñ.Ñ.‰Kð	/ô *¬#¨kÓ*:¸MÓJÐØ$×-Ñ-¨gÓ6ò 	ˆCØ�M‰M�Oð	ð '×/Ñ/°Ó4ˆ
ÙØˆJØò .�ØŸ™¨$˜Ó/�ÚØ×%Ñ% fÕ-ð.ð —k‘k *Ó-‰Gà'×0Ñ0¸6ÈÐ0ÓNˆGä�f‰f�Y ¨Ó0€GÙØÐ%¨Ñ3Ñ3ˆä
ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨jÐ9ˆØò 	CˆCØ˜ S¨¡\ N°"°S¸±Z°LÀÐBÑB‰Gð	Cð �'˜8 [Ð0Ð0r   c                 óÄ   — |rt        j                  |d¬«      nd}t        t        |«      «      dz  dz   }| j	                  d|||||||||f	«       | j                  «        y )NF)Úensure_asciiz[]r.   r/   u  
        INSERT OR REPLACE INTO gov_raw 
        (page_url, site_name, source_url, title, publish_date, summary, content, attachments, date_rank, status, category, visits)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'published', 'å»ºè®¾é¡¹ç›®çŽ¯è¯„', 0)
    )ÚjsonÚdumpsÚabsÚhashr	   Úcommit)	r
   Úpage_urlr2   Úsummary_textÚpublish_daters   Ú	site_nameÚattachments_jsonÚlevels	            r   Úsave_articler�   Æ   sg   € ÙFQ”t—z‘z +¸EÕBÐW[ÐÜ”�X“Ó "Ñ$ qÑ(€EØ‡L�Lð ð �I˜x¨°¸lÈLÐZjÐlqÐ	rô	tð
 	‡K�K…Mr   é   c                 ó  — t        «       }d}d}t        «       }t        | «      D �]³  }|dk(  rt        }nt        j	                  dd|dz   › d�«      }t        d|dz   › d|› �«       t        |«      }|st        d|dz   › d�«        �nTt        |«      }	|	st        d	«        �n9|	D �
cg c]  }
|
d
   |vsŒ|
‘Œ }}
|	D ]  }
|j                  |
d
   «       Œ t        dt        |	«      › dt        |«      › d�«       |s|dkD  rt        d«        nÏ|D ]Ç  }|d
   }|d   }|d   }|r$|j                  d|f«      j                  «       }|rŒ8t        d|d d › d�«       t        |«      }|s|dz  }Œ]t        ||«      \  }}}}|s|r|}|rGt        ||||||t        «       |dz  }t        |«      }|rd|› d�nd}t        d|› d|d d › d|› �«       Œ½t        d«       ŒÉ �Œ¶ |j                  «        t        d|› d|› �«       y c c}
w )Nr   z.shtmlÚ_r/   z[PAGE z] z  [WARN] Page z unreachable, stoppingz  No articles found, stoppingr   z  Found z articles (z new)z  No new items, stoppingr2   r9   z/SELECT page_url FROM gov_raw WHERE page_url = ?z
  [FETCH] é2   z...z +u   é™„ä»¶r+   u       âœ“ saved [u       âœ— empty title, skippedz
[DONE] Total: z articles, Errors: )r   ri   ÚrangeÚLIST_URLÚreplacer   r    rN   rj   r<   r	   Úfetchoner   r�   Ú	SITE_NAMEÚclose)Ú	max_pagesÚincrementalr
   ÚtotalÚerrorsÚ	seen_urlsÚpageÚlist_urlrE   rF   ÚitÚunique_itemsÚitemr   r2   Ú	list_dateÚexistingÚdetail_htmlÚdetail_titlerq   r9   rs   Ú	att_countÚatt_strs                           r   Úcrawlr¨   Ð   s\  € Ü‹9€DØ€EØ€FÜ“€Iä�iÓ ó 87ˆØ�1Š9Ü‰Hä×'Ñ'¨°A°d¸1±f°X¸VÐ2DÓEˆHä��t˜A‘v�h˜b  
Ð+Ô,Ü˜(Ó#ˆÙÜ�N 4¨¡6 (Ð*@ÐAÔBÚä˜4Ó ˆÙÜÐ1Ô3Úà%*ÖI˜r¨b°©i¸yÒ.HšÐIˆÐIØò 	%ˆBØ�M‰M˜"˜U™)Õ$ð	%ä�œ˜U›˜ K´°LÓ0AÐ/BÀ%ÐHÔIáØ�aŠxÜÐ0Ô2Ùà ò 	7ˆDØ�u‘+ˆCØ˜‘MˆEØ˜ZÑ(ˆIáØŸ<™<ØEÈÀvóç‘(“*ð ñ Øä�J˜u S b˜z˜l¨#Ð.Ô/Ü$ S›/ˆKÙØ˜!‘�Øä;GÈÐUXÓ;YÑ8ˆL˜' 8¨[Ù¡	Ø$�áÜ˜T 3¨°g¸xÈÔV_Ô`Ø˜‘
�Ü Ó,�	Ù4=˜B˜y˜k¨Ñ0À2�Ü˜¨ z°°LÀÀ"Ð4EÐ3FÀcÈ'ÈÐSÕTäÐ4Õ6ò;	7ð787ðt 	‡J�J„LÜ	Ð˜U˜GÐ#6°v°hÐ
?Õ@ùòU Js   Â&G=Â3G=Ú__main__u9   ç« è´¡åŒºäººæ°‘æ”¿åºœå»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·çˆ¬è™«)Údescriptionz--max-pagesu   æœ€å¤§çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--incrementalÚ
store_trueu   å¢žé‡�æ¨¡å¼�)Úactionr­   )r˜   r™   )é   )rŽ   F)Ú__doc__r   r   r@   r   re   r‚   Úbs4r   r?   r“   r   r–   r   r   r    rN   r   r�   r¨   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsr˜   r™   r[   r   r   ú<module>r»      sæ   ðñó Û Û 	Û 
Û 	Û Ý à#€ØÐ8Ñ8€Ø
€Ø!€	ð DØpØ0ñ€òó

ò<ò|Z1òxóAAðF ˆzÒÛØ$ˆX×$Ñ$Ð1lÔm€FØ
×Ñ˜¨C¸ÐAUÐÔVØ
×Ñ˜°À>ÐÔRØ×ÑÓ€DÙ	�D—N‘N°×0@Ñ0@ÖAð r   