Ë
    Æq«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!d„ Z"e#dk(  r e"«        yy)u¤  crawl_hsq_tztg.py - é»„å±±å¸‚é»„å±±åŒºäººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Š
ç«™ç‚¹: https://www.hsq.gov.cn (å¸�è�” NWAF: 412 + Environment Checking + ctct_bundle)
è¿‡ç›¾: playwright + playwright-stealth (å�Œ ahshx æ–¹æ¡ˆ)
åˆ—è¡¨: é�™æ€�HTML /dwzw/tztg/index.html â†’ /dwzw/tztg/{id}.html
  åˆ†é¡µ: /content/column/6794244?pageIndex=N (Ls.pagination)
è¯¦æƒ…: div.wzcon.j-fontContent æ­£æ–‡ + meta ArticleTitle/PubDate + é™„ä»¶ä¸‹è½½
é    N)ÚdatetimeÚ	timedelta)Úsync_playwright)ÚStealthu   é»„å±±å¸‚é»„å±±åŒº-å…¬ç¤ºå…¬å‘Šzhttps://www.hsq.gov.cnz+https://www.hsq.gov.cn/dwzw/tztg/index.htmlÚ6794244é   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/hsq_tztg.jsonlz/root/search.dbz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chromez/tmp/hsq_tztg.lockzcrawl_hsq_tztg.pyc                 óv  ‡— | s| S | D �cg c]  }t        |t        «      sŒ|‘Œ }}t        |«      t        | «      k7  r| S t        «       g }}| D ])  }||vsŒ|j	                  |«       |j                  |«       Œ+ |D �‡cg c]&  Št        ‰«      dk\  rt        ˆfd„|D «       «      s‰‘Œ( }}|r|S |S c c}w c c}w )uB  å‰”é™¤ã€Œå®¹å™¨æ®µã€�ï¼šfind_all(['p','div']) ä¼šå�Œæ—¶æ”¶ä¸‹å®¹å™¨ <div> ä¸Žå®ƒå†…éƒ¨çš„ <p>ï¼Œ
    å¯¼è‡´å�Œä¸€å†…å®¹é‡�å¤�ï¼ˆå®¹å™¨é‚£ä»½å¸¸è¿˜è¢« get_text(strip=True) æ‹�å¹³ï¼‰ã€‚
    åˆ¤æ�®ï¼šæŸ�æ®µè¢«åˆ—è¡¨å†…å�¦ä¸€æ®µå®Œå…¨åŒ…å�« â†’ å®ƒæ˜¯å®¹å™¨æ®µ â†’ å‰”é™¤ã€‚
    ä¿�æŠ¤ï¼šå‰”é™¤å�Žä¸ºç©ºåˆ™åŽŸæ ·è¿”å›žã€‚
    é(   c              3   ó:   •K  — | ]  }|‰uxr |xr |‰v –— Œ y ­w)N© )Ú.0ÚbÚas     €ú#/root/gov_crawler/crawl_hsq_tztg.pyú	<genexpr>z(_drop_container_parts.<locals>.<genexpr>0   s&   øè ø€ Ò(SÈ¨°!¨Ò)D¸Ò)D¸aÀ1¸fÓ)DÑ(Sùs   ƒ)Ú
isinstanceÚstrÚlenÚsetÚaddÚappendÚany)ÚpartsÚpÚpsÚseenÚuniqr   Úkeeps        ` r   Ú_drop_container_partsr       sÇ   ø€ ñ ØˆØÖ	1�œj¨¬CÕ0Š!Ð	1€BÐ	1Ü
ˆ2ƒw”#�e“*ÒØˆô “˜ˆ$€DØò (ˆØ�DŠ=Ø�H‰H�QŒK˜Ÿ™ Q�ð(ð ÷ V�!Ü˜“F˜b’L¤SÓ(SÈdÔ(SÔ%Sò ð V€Dð Váˆ4Ð!˜TÐ!ùò 
2ùòVs   ŠB1 B1Á>+B6c                  óØ   — 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)r   s    r   Úparse_pages_argr+   4   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_titler4   =   s[   € Ü
�‰ˆ~˜r 1¢7¨Ó+×1Ñ1Ó3€AÜ
�‰Ð  QÓ'×-Ñ-Ó/€AØ�9‰9�X˜rÓ"×*Ñ*¨8°RÓ8Ð8r,   c                 óB  — | 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%                  |«       Œ# |}t1        |«      }d"j3                  |«      }|
D ]  }d#|d$   › d%|d&   › d'�}||vsŒ|d(|z   z  }Œ  t5        |j	                  «       «      d)k  rd#| j6                  › d%|› d'�}|||fS # t8        $ 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)r1   ú/éÿÿÿÿ)ÚnameÚurl)r   ÚpreÚtabler7   )Ú	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>t   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/   ÚsearchrE   r1   ÚSÚbs4r6   ÚfindÚcompileÚIÚfind_allÚ	decomposeÚgetÚget_textr(   r&   rD   r   r=   Úfind_parentr   r0   Úmatchr    Újoinr   r>   ÚImportError)ÚpageÚhtmlÚtitleÚmÚ	date_textrJ   r6   ÚsoupÚwzÚelÚattachmentsr   r:   r=   r   ÚtblÚtxtÚdedupr   Úlinks                       r   Úparse_contentrf   C   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ð7Ý%Ù˜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Ü)¨%Ó0ˆEØ—k‘k %Ó(ˆGà ò +�Ø% a¨¡h ZÐ/AÀ!ÀFÁ)ÀÈHÐU�Ø˜wÒ&Ø˜t d™{Ñ*‘Gð+ô �7—=‘=“?Ó# bÒ(Ø(¨¯©¨
Ð2DÀUÀGÈ8ÐT�ð �)˜WÐ$Ð$øô ò Ùðús2   Ã+IP Í	P Í!P Í?
P Î
A	P Ï9P Ð	PÐPc                  óL  — 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        d1¬;«      }|j]                  d<«       |j_                  «       }d=}|D ]¢  }|j]                  d>|d%   f«       |ja                  «       rŒ*|j]                  d?|d(   tb        d@|d%   |dA   |dB   d'd't/        jd                  dC|dA   «      rtg        |dA   ji                  dDd'«      «      nd=tj        f
«       |jl                  sŒž|dz  }Œ¤ |jo                  «        |jO                  «        t        dE|› �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)FNz--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*='/dwzw/tztg/']zUels => els.map(e => ({t: e.innerText.trim(), h: e.href})).filter(x => x.t.length > 5)z/dwzw/tztg/(\d+)\.htmlÚhr3   )r[   r>   r9   u       ç¬¬u   é¡µ 0 æ�¡, å�œæ­¢u    æ�¡é   é   u   [åˆ—è¡¨] å…± é   é   r>   iÈ¯  r.   r[   )r>   r[   ÚdaterJ   z  [r;   z] r<   r   z | u
   ] å¤±è´¥: é<   u	   [å®Œæˆ�] F)Úensure_asciir   zutf-8)ÚencodingrH   z[jsonl] u    æ�¡ -> )rq   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   å®‰å¾½ry   rJ   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_URLrD   Ú	COLUMN_IDÚgotoÚtimeÚsleepÚeval_on_selector_allr   r/   rK   r   r   r4   rE   r   ÚextendÚrandomÚuniformÚ	enumeraterf   Ú	Exceptionr   ÚjsonÚdumpsÚcloseÚopenÚOUTÚwriteÚsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchoneÚ	SITE_NAMErV   r'   r2   ÚSCRIPT_NAMEÚrowcountÚcommit)Ú	max_pagesÚdryrunÚ
jsonl_moder   ÚbrowserÚctxrY   ÚitemsÚpnr>   Úrowsr   Ú
page_itemsÚrr\   ÚresultsÚidxÚitr[   r]   rJ   Ú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°BÔ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
T3ËVËAT3ÌAVÍ#VÍ<VÎ1U8Ï(VÏ+VÐCVÓ"7VÔVÔ3	U5Ô<.U0Õ*VÕ0U5Õ5VÕ8V	Õ=VÖVÖVÖV#Ú__main__)$Ú__doc__r$   Úosr/   r“   r‹   r�   r™   rZ   Úhtml_libr   r   Úplaywright.sync_apir   Úplaywright_stealthr   rŸ   rD   rˆ   r‰   r*   ÚnowÚstrftimer   r„   r—   r›   r‚   Ú	LOCK_FILEr    r    r+   r4   rf   rµ   Ú__name__r   r,   r   ú<module>rÀ      s­   ðñ÷ B× A× A× Aß (Ý /Ý &à-€	Ø€Ø8€Ø€	ØÐ Ø
ˆ(�,‰,‹.™9¨#Ô.Ñ
.×	8Ñ	8¸Ó	D€Øv€Ø€Ø
€ØK€Ø €	Ø!€ò"ò.ò9òN%òbbðJ ˆzÒÙ…Fð r,   