Ë
    ÀFljê  ã            	       ó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Zddlm	Z	 ej                  j                  ej                  j                  e«      «      Z ej                  dd«      ZdZdZdZd	Zd
ZdZdZdZddiZdZddddœZd„ Zd„ Zd*d„Zedk(  �r"ddl Z  e jB                  d¬«      Z"e"jG                  ddd¬«       e"jG                  de$dd¬ «       e"jK                  «       Z& ejN                  e«       e&jP                  rene&jR                  Z* e+d!e*z  «        ee*«      Z, e+d" e-e,«      z  «        e.e,«      D ]_  \  Z/\  Z0Z1 e+d#e/dz    e-e,«      e0dd$ fz  «        ee1«      \  Z2Z3Z4Z5e2xs e0Z6e3xs dZ7e5xs e6Z8 ee6e1e7e4e8«        ejr                  d%«       Œa  e+d&ed'   ed(   ed)   fz  «       yy)+uà  
xuanzhou.gov.cn å®£å·žåŒº - çŽ¯è¯„æ‰¹å‰�å…¬ç¤º/å�—ç�†å…¬ç¤º çˆ¬è™«
==================================================
åˆ—è¡¨é¡µéœ€ Playwrightï¼ˆWAFå±�è”½ï¼‰ï¼Œè¯¦æƒ…é¡µå�¯ç›´æŽ¥ requests è®¿é—®ã€‚
æ �ç›®: XxgkContent/showList/894/179634ï¼ˆæ‰¹å‰�å…¬ç¤º/å�—ç�†å…¬ç¤ºï¼Œå…±69é¡µ1007æ�¡ï¼‰

ç”¨æ³•:
  python3 crawl_xuanzhou_pqgs.py             # å¢žé‡�ï¼ˆç¬¬1é¡µï¼‰
  python3 crawl_xuanzhou_pqgs.py --pages 5   # çˆ¬å‰�5é¡µ
  python3 crawl_xuanzhou_pqgs.py --full      # å…¨é‡�69é¡µ
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbu   å®£å·žåŒº-çŽ¯è¯„æ‰¹å‰�å…¬ç¤ºzwww.xuanzhou.gov.cni~  i²½ u   çŽ¯è¯„æ‰¹å‰�å…¬ç¤ºu   å®‰å¾½u   çŽ¯è¯„å…¬ç¤ºéE   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zhttps://www.xuanzhou.gov.cn)ÚnewÚskipÚerrorsc           	      ób  — ddl m} g } |«       5 }|j                  j                  ddg¬«      }|j	                  dd¬«      }|j                  «       }	 t        d	| d	z   «      D �]  }d
t        t        |fz  }|j                  |dd¬«       |j                  d«       |j                  «       }	t        |	d«      }
|
j                  d«      D ]Z  }|j                  dd«      }d|v sŒ|j                  d¬«      }|j!                  d«      r|nt"        |z   }|j%                  ||f«       Œ\ |D �cg c]   }|d	   j!                  t"        dz   «      sŒ|‘Œ" }}|d	kD  rt'        |«      dk(  r nt)        j*                  d«       �Œ |j5                  «        	 ddd«       t7        «       }g }|D ].  \  }}||vsŒ|j9                  |«       |j%                  ||f«       Œ0 |S c c}w # t,        $ r(}t/        d|z  t0        j2                  ¬«       Y d}~Œ‹d}~ww xY w# |j5                  «        w xY w# 1 sw Y   Œ˜xY w)u=   PlaywrightèŽ·å�–åˆ—è¡¨é¡µå†…å®¹ï¼ˆç»•è¿‡WAFï¼‰ï¼Œæ”¯æŒ�å¤šé¡µr   )Úsync_playwrightTz--no-sandbox)ÚheadlessÚargsz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zzh-CN)Ú
user_agentÚlocaleé   zChttps://www.xuanzhou.gov.cn/XxgkContent/showList/%d/%d/page_%d.htmli`ê  Únetworkidle)ÚtimeoutÚ
wait_untiliÐ  ÚlxmlÚaÚhrefÚ z/OpennessContent/show/©ÚstripÚhttpç      à?z  Playwright error: %s©ÚfileN)Úplaywright.sync_apir
   ÚchromiumÚlaunchÚnew_contextÚnew_pageÚrangeÚCATEGORY_IDÚSUB_IDÚgotoÚwait_for_timeoutÚcontentr   Úfind_allÚgetÚget_textÚ
startswithÚDETAIL_BASEÚappendÚlenÚtimeÚsleepÚ	ExceptionÚprintÚsysÚstderrÚcloseÚsetÚadd)Úpagesr
   ÚitemsÚpÚbrowserÚctxÚpageÚpnÚurlÚhtmlÚsoupr   r   ÚtitleÚfull_urlÚitÚ
page_itemsÚeÚseenÚdedupedÚtÚus                         ú(/root/gov_crawler/crawl_xuanzhou_pqgs.pyÚfetch_list_pages_via_playwrightrL   #   s$  € å3à€EÙ	Ó	ð  ˜aØ—*‘*×#Ñ#¨T¸Ð8HÐ#ÓIˆØ×!Ñ!ØUØð "ó 
ˆð �|‰|‹~ˆð	Ü˜A˜u q™yÓ)ó  �Ø[Ü¤¨ð_-ñ -�à—	‘	˜# u¸�	ÔGØ×%Ñ% dÔ+Ø—|‘|“~�Ü$ T¨6Ó2�ð Ÿ™ sÓ+ò 8�AØŸ5™5 ¨Ó,�DØ/°4Ò7Ø !§
¡
° 
Ó 6˜Ø+/¯?©?¸6Ô+B¡4ÌÐVZÑHZ˜ØŸ™ e¨XÐ%6Õ7ð8ð ,1Öm R°B°q±E×4DÑ4DÄ[ÐSkÑEkÕ4lšbÐm�
ÐmØ˜’6œc *›o°Ò2ÙÜ—
‘
˜3–ð) ð0 �M‰M�O÷A ôF ‹5€DØ€GØò #‰ˆˆ1Ø�DŠ=Ø�H‰H�QŒKØ�N‰N˜A˜q˜6Õ"ð#ð €Nùò! nøô ò 	AÜÐ*¨QÑ.´S·Z±Z×@Ò@ûð	Aûð �M‰M�Oú÷A ð  úsb   �AH%ÁBGÃ"AGÄ) GÅ
GÅ/GÅ=H%ÇGÇ	HÇ%HÈHÈHÈHÈH"È"H%È%H.c                 ó„  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }d}|j                  dddi¬	«      }|r'|j                  d
«      r|d
   j                  «       dd }|si|j                  d«      }|rV|j                  d«      D ]B  }|j                  d¬«      }	d|	v sŒ|j                  d«      }
|
sŒ.|
j                  d¬«      dd }ŒD d}d}|j                  d«      }|rH|j                  ddg«      D ]  }|j                  «        Œ t        |«      }|j                  d¬«      dd }||||fS # t        $ r.}t        d| dd ›d|›�t         j"                  ¬«       Y d}~yd}~ww xY w)u   èŽ·å�–è¯¦æƒ…é¡µå†…å®¹é   )Úheadersr   zutf-8r   r   ÚmetaÚnameÚArticleTitle)Úattrsr'   ÚPubDateNé
   ztable.m-detailtbÚtdTr   u   å�‘å¸ƒæ—¥æœŸz#zoomÚscriptÚstyleéÈ   z    detail error iØÿÿÿz: r   )r   r   r   r   )Úrequestsr)   ÚHEADERSÚencodingr   ÚtextÚfindr   Ú
select_oner(   r*   Úfind_next_siblingÚ	decomposeÚstrr1   r2   r3   r4   )r?   ÚrrA   rB   rP   ÚdateÚmeta_dÚtbrV   ÚtxtÚnext_tdÚ	body_htmlÚsummaryÚzoomÚtagrF   s                   rK   Úfetch_detailrm   T   sÆ  € ð'Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V VÓ,ˆð ˆØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙ�D—H‘H˜YÔ'Ø˜‘O×)Ñ)Ó+ˆEð ˆØ—‘˜6¨&°)Ð)<�Ó=ˆÙ�f—j‘j Ô+Ø˜)Ñ$×*Ñ*Ó,¨S¨bÐ1ˆDÙØ—‘Ð!3Ó4ˆBÙØŸ+™+ dÓ+ò E�BØŸ+™+¨D˜+Ó1�CØ%¨Ò,Ø"$×"6Ñ"6°tÓ"<˜Ú"Ø#*×#3Ñ#3¸$Ð#3Ó#?ÀÀÐ#D™DðEð ˆ	ØˆØ�‰˜wÓ'ˆÙØ—}‘} h°Ð%8Ó9ò  �Ø—‘•ð ä˜D›	ˆIØ—m‘m¨$�mÓ/°°Ð5ˆGà�d˜I wÐ.Ð.øÜò Ý¨3¨s¨tª9±aÐ8¼s¿z¹zÕJÜûðús%   ‚C5F Ã8F ÄA;F Æ	F?Æ$F:Æ:F?r   c                 ó@  — t        j                  t        «      }	 |j                  d| j	                  «       |t
        t        |t        t        t        ||f
«       |j                  «        |j                  dkD  }|sj|rh|j                  d|f«      j                  «       }|rE|d   r|d   j	                  «       dk(  r*|j                  d|||d   f«       |j                  «        d}|rš|j                  d|f«      j                  «       }|ret        j                  t        «      }	 |j                  d	|d   | j	                  «       t        |f«       |j                  «        |j                  «        t        d
xx   dz  cc<   nt        dxx   dz  cc<   |j                  «        y # t        $ r Y ŒOw xY w# |j                  «        w xY w# t        $ r9}	t        dxx   dz  cc<   t!        d|	z  t"        j$                  ¬«       Y d }	~	Œrd }	~	ww xY w# |j                  «        w xY w)Nz£INSERT OR IGNORE INTO gov_raw (title, page_url, source_url, site_name, publish_date, category, industry, group_name, content, summary) VALUES (?,?,?,?,?,?,?,?,?,?)r   z0SELECT id, content FROM gov_raw WHERE page_url=?r   r   z2UPDATE gov_raw SET content=?, summary=? WHERE id=?Tz'SELECT id FROM gov_raw WHERE page_url=?zSINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?,?,?,?)r   r   r   z  DB error: %sr   )Úsqlite3Úconnectr   Úexecuter   ÚDOMAINÚ	SITE_NAMEÚCATEGORY_NAMEÚINDUSTRYÚGROUPÚcommitÚtotal_changesÚfetchoner1   r5   Ústatsr2   r3   r4   )
rB   Úpage_urlÚpublish_dateri   rj   ÚconnÚis_newÚrowÚ_c2rF   s
             rK   Ústore_recordr�   €   sÈ  € Ü�?‰?œ9Ó%€Dð'Ø�‰ð+ð �[‰[‹]˜H¤f¬i¸ÜœH¤e¨Y¸ðAô		
ð 	�‰ŒØ×#Ñ# aÑ'ˆá™)Ø—,‘,ÐQÐT\ÐS^Ó_×hÑhÓjˆCÙ˜C šF c¨!¡f§l¡l£n¸Ò&:Ø—‘ÐQÐT]Ð_fÐhkÐlmÑhnÐSoÔpØ—‘”Ø�áØ—,‘,ÐHÈ8È+ÓV×_Ñ_ÓaˆCÙÜ—o‘o¤iÓ0�ð	 Ø—K‘KØmØ˜Q™ §¡£´	¸7ÐCôð —J‘J”Lð —I‘I”KÜ�%‹L˜AÑŒLä�&‹M˜QÑ‹Mð
 	�
‰
�øô !ò Ùðûð —I‘I•Kûô ò 5Üˆh‹˜1Ñ‹ÜÐ Ñ"¬¯©×4Ò4ûð5ûð 	�
‰
�úsZ   ›DG Ä#;F" Å3G Æ"	F.Æ+F1 Æ-F.Æ.F1 Æ1GÇG Ç	HÇ/HÇ>H ÈHÈH ÈHÚ__main__u!   xuanzhou çŽ¯è¯„æ‰¹å‰�å…¬ç¤ºçˆ¬è™«)Údescriptionz--fullÚ
store_trueu   å…¨é‡�69é¡µ)ÚactionÚhelpz--pagesr   u   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultr†   u/   ðŸ“„ èŽ·å�–åˆ—è¡¨é¡µï¼ˆPlaywrightï¼Œ%dé¡µï¼‰...u   ðŸ”� åˆ—è¡¨å…± %d æ�¡z  [%d/%d] %sé2   r   u&   
âœ… å®Œæˆ�! æ–°%d, è·³è¿‡%d, é”™è¯¯%dr   r   r   )r   r   ):Ú__doc__ÚosÚrer3   r/   Újsonro   rZ   Úbs4r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   rs   rr   r#   r$   rt   rv   ru   Ú	MAX_PAGESr[   r,   rz   rL   rm   r�   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsr   ÚchdirÚfullr8   Úpages_to_crawlr2   r9   r.   Ú	enumerateÚidxrB   r?   Údt_titleÚdt_dateÚbodyrj   Úfinal_titleÚ
final_dateÚfinal_summaryr0   © ó    rK   ú<module>rª      s  ðñ
÷ (× '× 'Û Ý à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#8Ó9€	à*€	Ø	€Ø€Ø	€Ø$€Ø€Ø€Ø€	Øð  Kð  L€à+€Ø˜1¨Ñ*€ò.òb)óX)ðX ˆzÓÛØ$ˆX×$Ñ$Ð1TÔU€FØ
×Ñ˜¨¸MÐÔJØ
×Ñ˜	¨°Q¸^ÐÔLØ×ÑÓ€Dà€B‡H�HˆXÔà"&§)¢)‘Y°·±€NÙ	Ð
;¸nÑ
LÔMÙ+¨NÓ;€EÙ	Ð
!¡C¨£JÑ
.Ô/á& uÓ-ò 	Ñˆ‰\ˆe�SÙˆn  a¡©¨U«°U¸3¸B°ZÐ@Ñ@ÔAÙ+7¸Ó+<Ñ(ˆ�'˜4 àÒ' %ˆØ’] ˆ
ØÒ. ;ˆá�[ # z°4¸ÔGØˆ�
‰
�3�ð	ñ 
Ð
3°u¸U±|ÀUÈ6Á]ÐTYÐZbÑTcÐ6dÑ
dÕeð3 r©   