Ë
    ƒúƒ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Z	ddl
m
Z
mZ ddlmZ ddlmZ dZdZdZd	Zd
Z e
j*                  «        ed¬«      z
  j-                  d«      ZdZdZdZdZdZdZd„ Zd„ Zd„ Z d„ Z!e"dk(  r e!«        yy)uy  crawl_feidong_tzgg.py - è‚¥ä¸œåŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Š
ç«™ç‚¹: https://www.feidong.gov.cn (CDN 521 ä½†å†…å®¹æ­£å¸¸; playwright è¿‡ç›¾)
åˆ—è¡¨: é�™æ€�HTML /dtxw/tzgg/index.html â†’ /dtxw/tzgg/{id}.html
  åˆ†é¡µ: /content/column/6787531?pageIndex=N (Ls.pagination, total=64 pageCount=3 pageSize=30)
è¯¦æƒ…: div.wzcon.min_h500.j-fontContent æ­£æ–‡ + meta ArticleTitle/PubDate
é    N)ÚdatetimeÚ	timedelta)Úsync_playwright)ÚStealthu   è‚¥ä¸œåŽ¿-é€šçŸ¥å…¬å‘Šzhttps://www.feidong.gov.cnz/https://www.feidong.gov.cn/dtxw/tzgg/index.htmlÚ6787531é   im  )Údaysz%Y-%m-%dzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36z/tmp/feidong_tzgg.jsonlz/root/search.dbz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chromez/tmp/feidong_tzgg.lockzcrawl_feidong_tzgg.pyc                  óØ   — t         j                  dd  D ]O  } | j                  d«      rt        | j	                  d«      d   «      c S | j                  «       sŒDt        | «      c S  t        S )Né   z--pages=ú=)ÚsysÚargvÚ
startswithÚintÚsplitÚisdigitÚMAX_PAGES_DEFAULT)Úas    ú'/root/gov_crawler/crawl_feidong_tzgg.pyÚparse_pages_argr      sX   € Ü�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMð	ô
 Ðó    c                 óâ   — t        j                  dd| xs d«      j                  «       } t        j                  dd| «      j                  «       } | j                  dd«      j                  dd«      S )Nu   ^\[å›¾\]\s*Ú u   ^[â€¢Â·Â·\s]+u   â€‹u   ï»¿)ÚreÚsubÚstripÚreplace)Úts    r   Úclean_titler   %   s[   € Ü
�‰ˆ~˜r 1¢7¨Ó+×1Ñ1Ó3€AÜ
�‰Ð  QÓ'×-Ñ-Ó/€AØ�9‰9�X˜rÓ"×*Ñ*¨8°RÓ8Ð8r   c                 ó,  — | j                  «       }d}t        j                  d|«      }|r|j                  d«      j	                  «       }|sFt        j                  d|t        j
                  «      }|r|j                  d«      j	                  «       }d}t        j                  d|«      }|r|j                  d«      }|s)t        j                  d|«      }|r|j                  d«      }d}	 ddlm}  ||d	«      }|j                  d
t        j                  d«      ¬«      }|s5|j                  d
t        j                  dt        j                  «      ¬«      }|�r¨|j                  t        j                  dt        j                  «      ¬«      D ]  }	|	j                  «        Œ g }
|j                  dt        j                  dt        j                  «      ¬«      D ]j  }|j                  dd«      }|j                  d¬«      xs |j                  d«      d   }|j!                  d«      r	t"        |z   }|
j%                  ||dœ«       Œl g }|j                  g d¢d¬«      D �]  }	|	j&                  dv r|	j)                  d«      rŒ$|	j&                  dk(  r|	j)                  d«      rŒE|	j&                  dk(  r5t+        |	«      }t        j,                  dd„ |«      }|j%                  |«       Œ‰|	j&                  d
k(  r=|	j                  g d¢d ¬«      rŒ®|	j                  dd¬«      }|r|j%                  |«       ŒÕ|	j                  dd¬«      }|sŒët        j.                  d!|«      r�Œ|j%                  |«       �Œ g }|D ]!  }|sŒ|r	|d   |k7  sŒ|j%                  |«       Œ# |}d"j1                  |«      }|
D ]  }d#|d$   › d%|d&   › d'�}||vsŒ|d(|z   z  }Œ  t3        |j	                  «       «      d)k  rd#| j4                  › d%|› d'�}|||fS # t6        $ r Y Œw xY w)*u;   ä»Žè¯¦æƒ…é¡µæ��å�– (title, date, content_html, attachments)r   z+<meta name="ArticleTitle" content="([^"]*)"r   u8   <title>(.*?)(?:_é»„å±±å¸‚é»„å±±åŒºäººæ°‘æ”¿åºœ)?</title>z1<meta name="PubDate" content="(\d{4}-\d{2}-\d{2})u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   )ÚBeautifulSoupzhtml.parserÚdivzwzcon|j-fontContent)Úclass_zzoom|content|article)Úidz(appendix|share|qrcode|scan|ewm|print|wzar   z'\.(docx?|pdf|xlsx?|rar|zip|wps|et|dps)$)Úhrefr%   T)r   ú/éÿÿÿÿ)ÚnameÚurl)ÚpÚpreÚtabler"   )Ú	recursive)r*   r+   r,   zhref=["\'](/[^"\']+)["\']c                 ó8   — dt         ›| j                  d«      ›d�S )Nzhref="r   ú")ÚBASEÚgroup)Úmms    r   ú<lambda>zparse_content.<locals>.<lambda>\   s   � Õ[_Ðac×aiÑaiÐjkÕalÐJm€ r   )r*   r+   r,   FuW   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|\[çº é”™\]|æµ�è§ˆæ¬¡æ•°|å­—å�·|åˆ†äº«åˆ°|æ‰«ä¸€æ‰«)z

z<p><a href="r)   z" target="_blank">r(   z</a></p>ú
é   )Úcontentr   Úsearchr1   r   ÚSÚbs4r!   ÚfindÚcompileÚIÚfind_allÚ	decomposeÚgetÚget_textr   r   r0   Úappendr(   Úfind_parentÚstrr   ÚmatchÚjoinÚlenr)   ÚImportError)ÚpageÚhtmlÚtitleÚmÚ	date_textr6   r!   ÚsoupÚwzÚelÚattachmentsr   r%   r(   ÚpartsÚtblÚtxtÚdedupr*   Úlinks                       r   Úparse_contentrV   +   sË  € à�<‰<‹>€DØ€EÜ
�	‰	Ð@À$ÓG€AÙØ—‘˜“
× Ñ Ó"ˆÙÜ�I‰IÐQÐSWÔY[×Y]ÑY]Ó^ˆÙØ—G‘G˜A“J×$Ñ$Ó&ˆEØ€IÜ
�	‰	ÐFÈÓM€AÙØ—G‘G˜A“Jˆ	ÙÜ�I‰IÐAÀ4ÓHˆÙØŸ™ ›
ˆIð €Gð6Ý%Ù˜T =Ó1ˆØ�Y‰Y�u¤R§Z¡ZÐ0FÓ%GˆYÓHˆÙØ—‘˜5¤R§Z¡ZÐ0GÌÏÉÓ%N�ÓOˆBÚà—k‘k¬¯©Ð4_Ôac×aeÑaeÓ)f�kÓgò �Ø—‘•ðð ˆKØ—[‘[ ¬2¯:©:Ð6`Ôbd×bfÑbfÓ+g�[Óhò @�Ø—u‘u˜V RÓ(�Ø—z‘z¨�zÓ-ÒD°·±¸C³ÀÑ1D�Ø—?‘? 3Ô'Ü $™;�DØ×"Ñ"¨D¸Ñ#>Õ?ð@ð ˆEØ—k‘kÒ">È$�kÓOó &�Ø—7‘7˜lÑ*¨r¯~©~¸gÔ/FØØ—7‘7˜gÒ%¨"¯.©.¸Ô*AØØ—7‘7˜gÒ%Ü˜b›'�CÜŸ&™&Ð!=Ñ?mÐorÓs�CØ—L‘L Ô%ØØ—7‘7˜eÒ#Ø—w‘wÒ4À�wÔFØ ØŸ+™+ b°˜+Ó5�CÙØŸ™ SÔ)ØØ—k‘k "¨D�kÓ1�ÚœrŸx™xð  )Cð  EHö   IØ—L‘L Ö%ð'&ð( ˆEØò $�Ú™e u¨R¡y°A£~Ø—L‘L •Oð$ð ˆEØ—k‘k %Ó(ˆGà ò +�Ø% a¨¡h ZÐ/AÀ!ÀFÁ)ÀÈHÐU�Ø˜wÒ&Ø˜t d™{Ñ*‘Gð+ô �7—=‘=“?Ó# bÒ(Ø(¨¯©¨
Ð2DÀUÀGÈ8ÐT�ð �)˜WÐ$Ð$øô ò Ùðús1   Ã+IP Í	P Í!P Í?
P Î
>P Ï	9P Ð	PÐPc                  óH  — t        «       } dt        j                  v }dt        j                  v }t        d| › dt        › �d¬«       t        «       5 }|j                  j                  t        dg d¢¬«      }|j                  t        d	d
dœ¬«      }t        «       j                  |«       |j                  «       }	 g }t        d| dz   «      D �]_  }|dk(  rt        }	nt         › dt"        › d|› �}	t        d|› d|	› �d¬«       |j%                  |	dd¬«       t'        j(                  |dk(  rdnd«       |j+                  dd«      }
t-        «       }g }|
D ]l  }t/        j0                  d|d   «      }|r|d   |v rŒ&|j3                  |d   «       |j5                  t7        |d   «      |d   |j9                  d«      dœ«       Œn |st        d|› d�d¬«        nZt        d|› dt;        |«      › d�d¬«       |j=                  |«       t'        j(                  t?        j@                  d d!«      «       �Œb t        d"t;        |«      › d�d¬«       g }tC        |«      D ]È  \  }}t'        j(                  t?        j@                  d#d$«      «       	 |j%                  |d%   d&d¬«       t'        j(                  d «       tE        |«      \  }}}|sd'}|r
|t        k  rŒ{|j5                  |d%   |xs |d(   ||d)œ«       t        d*|dz   › d+t;        |«      › d,|d-   d(   d d. › d/|› �d¬«       ŒÊ t        d2t;        |«      › d�d¬«       |rA|D ]"  }t        tK        jL                  |d3¬4«      «       Œ$ 	 |jO                  «        d d d «       y |r†tQ        tR        d5d6¬7«      5 }|D ]+  }|jU                  tK        jL                  |d3¬4«      d8z   «       Œ- 	 d d d «       t        d9t;        |«      › d:tR        › �d¬«       	 |jO                  «        d d d «       y tW        jX                  tZ        «      }|j]                  d;«       |j_                  «       }d<}|D ]¢  }|j]                  d=|d%   f«       |ja                  «       rŒ*|j]                  d>|d(   tb        d?|d%   |d@   |dA   d'd't/        jd                  dB|d@   «      rtg        |d@   ji                  dCd'«      «      nd<tj        f
«       |jl                  sŒž|dz  }Œ¤ |jo                  «        |jO                  «        t        dD|› �d¬«       |jO                  «        	 d d d «       y # tF        $ r9}t        d*|dz   › d+t;        |«      › d0tI        |«      d d1 › �d¬«       Y d }~�Œd }~ww xY w# 1 sw Y   �Œ¶xY w# |jO                  «        w xY w# 1 sw Y   y xY w)ENz--dryrunz--jsonlu   [hsq] å…¬ç¤ºå…¬å‘Š pages=z cutoff=T)Úflush)z--no-sandboxz--disable-setuid-sandboxz---disable-blink-features=AutomationControlled)Úexecutable_pathÚheadlessÚargsiV  i   )ÚwidthÚheight)Ú
user_agentÚviewportr   z/content/column/z?pageIndex=u     [åˆ—è¡¨] ç¬¬u   é¡µ i`ê  Údomcontentloaded)ÚtimeoutÚ
wait_untilé
   r   za[href*='/dtxw/tzgg/']zUels => els.map(e => ({t: e.innerText.trim(), h: e.href})).filter(x => x.t.length > 5)z/dtxw/tzgg/(\d+)\.htmlÚhr   )rJ   r)   r$   u       ç¬¬u   é¡µ 0 æ�¡, å�œæ­¢u    æ�¡é   é   u   [åˆ—è¡¨] å…± é   é   r)   iÈ¯  r   rJ   )r)   rJ   Údater6   z  [r&   z] r'   é(   z | u
   ] å¤±è´¥: é<   u	   [å®Œæˆ�] F)Úensure_asciir   zutf-8)Úencodingr4   z[jsonl] u    æ�¡ -> zPRAGMA busy_timeout=300000r   z'SELECT id FROM gov_raw WHERE page_url=?z¨INSERT OR IGNORE INTO gov_raw (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank, script_name) VALUES (?,?,?,?,?,?,?,?,?,?)u   å®‰å¾½ri   r6   z\d{4}-\d{2}-\d{2}ú-u   [å…¥åº“] æ–°å¢ž )8r   r   r   ÚprintÚCUTOFFr   ÚchromiumÚlaunchÚCHROMIUMÚnew_contextÚUAr   Úapply_stealth_asyncÚnew_pageÚrangeÚLIST_URLr0   Ú	COLUMN_IDÚgotoÚtimeÚsleepÚeval_on_selector_allÚsetr   r7   ÚaddrA   r   r1   rF   ÚextendÚrandomÚuniformÚ	enumeraterV   Ú	ExceptionrC   ÚjsonÚdumpsÚcloseÚopenÚOUTÚwriteÚsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchoneÚ	SITE_NAMErD   r   r   ÚSCRIPT_NAMEÚrowcountÚcommit)Ú	max_pagesÚdryrunÚ
jsonl_moder*   ÚbrowserÚctxrH   ÚitemsÚpnr)   ÚrowsÚseenÚ
page_itemsÚrrK   ÚresultsÚidxÚitrJ   rL   r6   ÚeÚfÚconnÚcÚ	new_counts                             r   Úmainr©   {   s•  € ÜÓ!€IØœ3Ÿ8™8Ð#€FØœcŸh™hÐ&€JÜ	Ð% i [°¼¸Ð
AÈÕNä	Ó	ð \˜aØ—*‘*×#Ñ#Ü$¨tÚnð $ó pˆð ×!Ñ!¬RÀDÐTWÑ:XÐ!ÓYˆÜ‹	×%Ñ% cÔ*Ø�|‰|‹~ˆðU	ØˆEÜ˜A˜y¨1™}Ó-ó 1�Ø˜’7Ü"‘Cä!˜FÐ"2´9°+¸[ÈÈÐM�CÜ˜ r d¨$¨s¨eÐ4¸DÕAØ—	‘	˜# uÐ9K�	ÔLÜ—
‘
  q¢™2¨aÔ0à×0Ñ0Ø,Økóm�ô “u�Ø�
Øò g�AÜŸ	™	Ð";¸Q¸s¹VÓD�AÙ  #¡¨$¡Ø Ø—H‘H˜Q˜s™VÔ$Ø×%Ñ%´¸A¸c¹FÓ0CÈAÈcÉFÐZ[×ZaÑZaÐbcÓZdÑ&eÕfðgñ "Ü˜G B 4Ð'8Ð9ÀÕFÙÜ˜ ˜t 4¬¨J«Ð'8¸Ð=ÀTÕJØ—‘˜ZÔ(ä—
‘
œ6Ÿ>™>¨!¨QÓ/Ö0ð51ô8 �M¤# e£* ¨TÐ2¸$Õ?ð ˆGÜ$ UÓ+ò Y‘��RÜ—
‘
œ6Ÿ>™>¨!¨QÓ/Ô0ðYØ—I‘I˜b ™i°ÐCU�IÔVÜ—J‘J˜q”MÜ0=¸dÓ0CÑ-�E˜9 gÙ$Ø$&˜	Ù  Y´Ò%7Ø Ø—N‘NØ! %™yØ!&Ò!5¨"¨W©+Ø )Ø#*ñ	$ô ô ˜C  A¡˜w a¬¨E«
 |°2°g¸b±kÀ'Ñ6JÈ3ÈBÐ6OÐ5PÐPSÐT]ÐS^Ð_ÐgkÖlð!Yô( �Iœc '›l˜^¨4Ð0¸Õ=ÙØ ò =�AÜœ$Ÿ*™* Q°UÔ;Õ<ð=àð6 �M‰MŒO÷y\ð \ñD Üœ#˜s¨WÔ5ð J¸Ø$ò J˜ØŸ™¤§
¡
¨1¸5Ô AÀDÑ HÕIñJ÷Jô ˜¤ W£ ¨h´s°eÐ<ÀDÕIØð* �M‰MŒO÷y\ð \ôR —?‘?¤7Ó+ˆDØ�L‰LÐ5Ô6Ø—‘“ˆAØˆIØò 
#�Ø—	‘	ÐCÀaÈÁhÀ[ÔQØ—:‘:”<ØØ—	‘	ð Ø�w‘Z¤¨H°a¸±hÀÀ&Á	È1ÈYÉ<ÐY[Ð]_Ü8:¿¹ÐAUÐWXÐY_ÑW`Ô8a”S˜˜6™×*Ñ*¨3°Ó3Ô4ÐghÜ ð"ô#ð
 —:“:Ø ‘N‘Ið
#ð �K‰KŒMØ�J‰JŒLÜÐ$ Y KÐ0¸Õ=à�M‰M�O÷y\ð \øôt !ò YÜ˜C  A¡˜w a¬¨E«
 |°:¼cÀ!»fÀSÀb¸k¸]ÐKÐSW×XÓXûðYú÷Jñ Jûð2 �M‰M�Oú÷y\ð \ús–   ÁA(VÂ9G
VÊA
T1ËVËAT1ÌAVÍ#VÍ<VÎ1U6Ï(VÏ+VÐCVÓ 7VÔVÔ1	U3Ô:.U.Õ(VÕ.U3Õ3VÕ6V 	Õ;VÖVÖVÖV!Ú__main__)#Ú__doc__r   Úosr   r†   r|   r‚   rŒ   rI   Úhtml_libr   r   Úplaywright.sync_apir   Úplaywright_stealthr   r’   r0   ry   rz   r   ÚnowÚstrftimerp   ru   rŠ   rŽ   rs   Ú	LOCK_FILEr“   r   r   rV   r©   Ú__name__© r   r   ú<module>rµ      s¨   ðñ÷ B× A× A× Aß (Ý /Ý &à$€	Ø#€Ø<€Ø€	ØÐ Ø
ˆ(�,‰,‹.™9¨#Ô.Ñ
.×	8Ñ	8¸Ó	D€Øv€Ø€Ø
€ØK€Ø$€	Ø%€òò9òM%ò`bðJ ˆzÒÙ…Fð r   