Ë
    ¸¬ujÆ  ã            	       ó.  — 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diZdez  ZdZddddœZd„ Zd„ Zd)d„Zedk(  rþddlZ ej@                  d¬«      Z!e!jE                  ddd¬«       e!jE                  de#dd¬«       e!jI                  «       Z% ejL                  e«        e'd «        e«       Z( e'd! e)e(«      z  «        e*e(«      D ]Y  \  Z+\  Z,Z- e'd"e+dz    e)e(«      e,dd# fz  «        ee-«      \  Z.Z/Z0Z1e.xs e,Z2e/xs dZ3 ee2e-e3e0e1«        ejh                  d$«       Œ[  e'd%ed&   ed'   ed(   fz  «       yy)*u‘  
xuanzhou.gov.cn å®£å·žåŒºæ”¿åºœä¿¡æ�¯å…¬å¼€ - çŽ¯è¯„å…¬ç¤ºçˆ¬è™«
==================================================
åˆ—è¡¨é¡µéœ€ Playwrightï¼ˆWAFå±�è”½ï¼‰ï¼Œè¯¦æƒ…é¡µå�¯ç›´æŽ¥ requests è®¿é—®ã€‚
ç±»åˆ«: 909ï¼ˆæœ€æ–°å…¬å¼€-å®£åŸŽé«˜æ–°åŒºç®¡å§”ä¼šï¼‰

ç”¨æ³•:
  python3 crawl_xuanzhou.py                    # å¢žé‡�çˆ¬ï¼ˆç¬¬1é¡µï¼‰
  python3 crawl_xuanzhou.py --full             # å…¨é‡�ï¼ˆä»…1é¡µï¼‰
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbu   å®£å·žåŒºäººæ°‘æ”¿åºœzwww.xuanzhou.gov.cni�  u   æœ€æ–°å…¬å¼€-çŽ¯è¯„å…¬ç¤ºu   å®‰å¾½-å®£åŸŽu   çŽ¯è¯„å…¬ç¤ºz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zAhttps://www.xuanzhou.gov.cn/XxgkContent/showList/%d/0/page_1.htmlzhttps://www.xuanzhou.gov.cn)ÚnewÚskipÚerrorsc                  óp  — ddl m}  g } | «       5 }|j                  j                  ddg¬«      }|j	                  dd¬«      }|j                  «       }	 |j                  t        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«       Œ\ t#        «       }g }|D ].  \  }}||vsŒ|j%                  |«       |j!                  ||f«       Œ0 |}|j/                  «        	 ddd«       |S # t&        $ r(}t)        d|z  t*        j,                  ¬«       Y d}~ŒGd}~ww xY w# |j/                  «        w xY w# 1 sw Y   |S 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Úlocalei`ê  Únetworkidle)ÚtimeoutÚ
wait_untili¸  ÚlxmlÚaÚhrefÚ z/OpennessContent/show/©ÚstripÚhttpz  Playwright error: %s©ÚfileN)Úplaywright.sync_apir	   ÚchromiumÚlaunchÚnew_contextÚnew_pageÚgotoÚLIST_URLÚwait_for_timeoutÚcontentr   Úfind_allÚgetÚget_textÚ
startswithÚDETAIL_BASEÚappendÚsetÚaddÚ	ExceptionÚprintÚsysÚstderrÚclose)r	   ÚitemsÚpÚbrowserÚctxÚpageÚhtmlÚsoupr   r   ÚtitleÚfull_urlÚseenÚdedupedÚtÚuÚes                    ú#/root/gov_crawler/crawl_xuanzhou.pyÚfetch_list_via_playwrightr?   !   s«  € å3à€EÙ	Ó	ð  ˜aØ—*‘*×#Ñ#¨T¸Ð8HÐ#ÓIˆØ×!Ñ!ØUØð "ó 
ˆð �|‰|‹~ˆð	Ø�I‰I”h¨¸-ˆIÔHØ×!Ñ! $Ô'Ø—<‘<“>ˆDÜ   vÓ.ˆDð —]‘] 3Ó'ò 4�Ø—u‘u˜V RÓ(�Ø+¨tÒ3ØŸJ™J¨T˜JÓ2�EØ'+§¡°vÔ'>™tÄKÐRVÑDV�HØ—L‘L %¨Ð!2Õ3ð4ô “5ˆDØˆGØò +‘��1Ø˜D’=Ø—H‘H˜Q”KØ—N‘N A q 6Õ*ð+ð ˆEð �M‰M�O÷A ðB €Løô	 ò 	AÜÐ*¨QÑ.´S·Z±Z×@Ò@ûð	Aûð �M‰M�Oú÷A ðB €LúsP   �AF+ÁA/E"ÃAE"Ä(E"ÅF+Å"	FÅ+FÆ	FÆFÆFÆF(Æ(F+Æ+F5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Ústrr+   r,   r-   r.   )ÚurlÚrr6   r7   rC   ÚdateÚmeta_dÚtbrI   ÚtxtÚnext_tdÚ	body_htmlÚsummaryÚzoomÚtagr=   s                   r>   Úfetch_detailra   J   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                  «       }|rdt        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 #  Y ŒHxY w# |j                  «        w xY w# t        $ r9}	t        dxx   dz  cc<   t!        d|	z  t"        j$                  ¬«       Y d }	~	Œjd }	~	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   z2UPDATE gov_raw SET content=?, summary=? WHERE id=?Tz'SELECT id FROM gov_raw WHERE page_url=?zHINSERT OR IGNORE INTO gov_search(rowid, title, site_name) VALUES (?,?,?)r   r   r   z  DB error: %sr   )Úsqlite3Úconnectr   Úexecuter   ÚDOMAINÚ	SITE_NAMEÚCATEGORY_NAMEÚINDUSTRYÚGROUPÚcommitÚtotal_changesÚfetchoner/   Ústatsr+   r,   r-   r.   )
r7   Úpage_urlÚpublish_dater]   r^   ÚconnÚis_newÚrowÚ_c2r=   s
             r>   Ústore_recordrv   w   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Ð jØ!$ Q¡¨¯©«¼	Ð BôDà—J‘J”Lð —I‘I”KÜ�%‹L˜AÑŒLä�&‹M˜QÑ‹Mð
 	�
‰
�øðÙûà—I‘I•Kûô ò 5Üˆh‹˜1Ñ‹ÜÐ Ñ"¬¯©×4Ò4ûð5ûð 	�
‰
�úsN   ›DF= Ä#:F! Å3F= Æ!F%Æ#F( Æ(F:Æ:F= Æ=	G?Ç/G:Ç5H Ç:G?Ç?H ÈHÚ__main__u   xuanzhou çŽ¯è¯„å…¬ç¤ºçˆ¬è™«)Údescriptionz--fullÚ
store_trueu	   å…¨é‡�çˆ¬)ÚactionÚhelpz--pagesrc   u   çˆ¬å�–é¡µæ•°ï¼ˆä»…1é¡µï¼‰)ÚtypeÚdefaultr{   u'   ðŸ“„ èŽ·å�–åˆ—è¡¨é¡µï¼ˆPlaywrightï¼‰...u   ðŸ”� åˆ—è¡¨å…± %d æ�¡z  [%d/%d] %sé2   g      à?u&   
âœ… å®Œæˆ�! æ–°%d, è·³è¿‡%d, é”™è¯¯%dr   r   r   )r   r   )5Ú__doc__ÚosÚrer-   ÚtimeÚjsonrd   rM   Úbs4r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   rh   rg   ÚCATEGORY_IDri   rk   rj   rN   r    r'   ro   r?   ra   rv   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsr   Úchdirr,   r0   ÚlenÚ	enumerateÚidxr7   rV   Údt_titleÚdt_dateÚbodyr^   Úfinal_titleÚ
final_dateÚsleep© ó    r>   ú<module>rŸ      så  ðñ	÷ (× '× 'Û Ý à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#8Ó9€	à#€	Ø	€Ø€Ø+€Ø€Ø€Øð  Kð  L€àNÐQ\Ñ\€Ø+€Ø˜1¨Ñ*€ò&òR*óZ'ðT ˆzÒÛØ$ˆX×$Ñ$Ð1NÔO€FØ
×Ñ˜¨¸KÐÔHØ
×Ñ˜	¨°QÐ=XÐÔYØ×ÑÓ€Dà€B‡H�HˆXÔá	Ð
3Ô4Ù%Ó'€EÙ	Ð
!¡C¨£JÑ
.Ô/á& uÓ-ò 	Ñˆ‰\ˆe�SÙˆn  a¡©¨U«°U¸3¸B°ZÐ@Ñ@ÔAÙ+7¸Ó+<Ñ(ˆ�'˜4 ð Ò' %ˆØ’] ˆ
á�[ # z°4¸ÔAØˆ�
‰
�3�ð	ñ 
Ð
3°u¸U±|ÀUÈ6Á]ÐTYÐZbÑTcÐ6dÑ
dÕeð1 rž   