Ë
    ^¨£jˆ  ã                   óL  — 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ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZdZdZdZdZdd	„Zdd
„Zd„ Zedk(  r ej0                   e«       «       yy)u³  
crawl_gddrc_jnjc.py - å¹¿ä¸œçœ�èƒ½æº�å±€-å›ºå®šèµ„äº§æŠ•èµ„é¡¹ç›®èŠ‚èƒ½å®¡æŸ¥ç»“æžœ (drc.gd.gov.cn/gdsnyj)
ç«™ç‚¹: TLS æŒ‡çº¹æ‹¦æˆª (curl Empty reply), playwright çœŸå®žæµ�è§ˆå™¨å�¯è¿‡, å�¶å�‘ goto è¶…æ—¶éœ€é‡�è¯•
åˆ—è¡¨: GET /gdsnyj/gkmlpt/api/all/3869?page={N}&sid=257  (JSON)
  {classify:{post_count}, articles:[{id, title, date, document_number, publisher, url}]}
  æ �ç›® 3869 = å›ºå®šèµ„äº§æŠ•èµ„é¡¹ç›®èŠ‚èƒ½å®¡æŸ¥ç»“æžœ, total=900
è¯¦æƒ…: /gdsnyj/gkmlpt/content/{a}/{b}/post_{id}.html (API url å­—æ®µ)
  meta ArticleTitle/PubDate/ContentSource, æ­£æ–‡ div.article-content
å†…å®¹: å¹¿ä¸œçœ�èƒ½æº�å±€èŠ‚èƒ½æŠ¥å‘Šå®¡æŸ¥æ„�è§� (ç²¤èƒ½è®¸å�¯ã€”2026ã€•XXå�·, å�«é¡¹ç›®æŠ•èµ„/ç”¨èƒ½å·¥è‰º)
é    N)Úpush_to_searchdbzhttps://drc.gd.gov.cnÚ3869Ú257u=   å¹¿ä¸œçœ�èƒ½æº�å±€-å›ºå®šèµ„äº§æŠ•èµ„é¡¹ç›®èŠ‚èƒ½å®¡æŸ¥ç»“æžœzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36c              ƒ   óB  K  — t        |«      D ]V  }	 t        j                  | j                  |d|¬«      |dz  dz   ¬«      ƒ d {  –—† }| j	                  d«      ƒ d {  –—†  |c S  y 7 Œ#7 Œ# t
        $ r' ||dz
  k  r| j	                  d«      ƒ d {  –—†7   n‚ Y Œ�w xY w­w)	NÚdomcontentloaded)Ú
wait_untilÚtimeoutiè  é   ©r	   iˆ  é   i'  )ÚrangeÚasyncioÚwait_forÚgotoÚwait_for_timeoutÚ	Exception)ÚpageÚurlr	   ÚretriesÚattemptÚresps         úcrawl_gddrc_jnjc.pyÚgoto_with_retryr      s®   è ø€ Ü˜“>ò ˆð	ä ×)Ñ)Ø—	‘	˜#Ð*<Àg�	ÓNØ $™¨Ñ+ô÷ ˆDð ×'Ñ'¨Ó-×-Ð-ØŠKñðøð .ùäò 	Ø˜ 1™Ò$Ø×+Ñ+¨EÓ2×2Ò2àñ 3ð	üsX   ‚B’2A,ÁA(ÁA,ÁA*ÁA,Á#BÁ(A,Á*A,Á,%BÂBÂBÂBÂBÂBc              ƒ   ó  K  — ddl m} ddlm}  |«       4 ƒd {  –—† }|j                  j                  ddg d¢¬«      ƒ d {  –—† }|j                  t        dd	d
dœd¬«      ƒ d {  –—† } |«       }|j                  |«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }t        dd¬«       	 t        |t        › dt        › �«      ƒ d {  –—† }t        d|r|j                  nd› d|j                  «       ƒ d {  –—† d d › �d¬«       g }
t'        «       }d}t)        d| dz   «      D �]c  }t        › dt        › d|› dt*        › �}|j-                  d|› d�«      ƒ d {  –—† }d|v rt        d|d   › �«        �n|j/                  d«      xs i j/                  d d«      }|j/                  d!g «      xs g }|s nÖt        d"|› d#t1        |«      › d$|› d%�«       |D ]�  }|j/                  d&d'«      }|sŒ||vsŒ|j3                  |«       |j/                  d(d'«      j5                  «       }|
j7                  ||t#        |j/                  d)d'«      «      |j/                  d*d'«      |j/                  d+d'«      d,œ«       ŒŸ |t1        |«      z  |k\  s�Œd n t        d-|› d.t1        |
«      › d/�d¬«       	 dd l}|j;                  t=        j>                  d0d1«      d2¬3«      }t'        d4„ |jA                  d5tB        f«      jE                  «       D «       «      }|j%                  «        t1        |
«      }|
D �cg c]  }|d&   |vsŒ|‘Œ }
}t        d7t1        |«      › d8t1        |
«      › d9|› �d¬«       g }tG        |
«      D �]
  \  }}t        d:|dz   › d9t1        |
«      › d;|d(   d d< › d=�«       	 t        ||d&   d>d?¬@«      ƒ d {  –—† }|jI                  «       ƒ d {  –—† }|d(   }tK        jL                  dG|«      }|r>|jO                  d«      j5                  «       r|jO                  d«      j5                  «       }|d)   }tK        jL                  dH|«      }|r7tK        jL                  dI|jO                  d«      «      }|r|jO                  «       }d'}tK        jL                  dJ|«      }|r|jO                  d«      j5                  «       }|j5                  «       st        dK«       �ŒftK        jP                  dLdMt        z   d9z   |«      }tK        jP                  dNdOt        z   d9z   |«      }|j7                  ||d&   |tB        |d'dPœ«       |t1        |
«      dz
  k  s�ŒÚtS        jT                  tW        jX                  dQdR«      «      ƒ d {  –—†  �Œ |j%                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  t        dSt1        «      › dT�«       |rt[        |dU«       t1        |«      S 7 �ŒÂ7 �Œ�7 �Œ|7 �Œ_7 �ŒJ7 �Œ7 �Œò# t         $ rN}	t        dt#        |	«      d d › �«       |j%                  «       ƒ d {  –—†7   Y d }	~	d d d «      ƒd {  –—†7   yd }	~	ww xY w7 �Œí# t         $ r%}	t        d6|	› �d¬«       t'        «       }Y d }	~	�ŒYd }	~	ww xY wc c}w 7 �ŒË7 �Œ¶# t         $ rU}	t        dAt#        |	«      d dB › dC�«       |j7                  tB        |d(   |d)   dD|d(   › dE�|d&   |d&   dFœ«       Y d }	~	�Œnd }	~	ww xY w7 �Œp7 �ŒX7 �ŒK# 1 ƒd {  –—†7  sw Y   �Œ\xY w­w)VNr   )Úasync_playwright)ÚStealthTz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chrome)z--no-sandboxz--disable-setuid-sandboxz---disable-blink-features=AutomationControlled)ÚheadlessÚexecutable_pathÚargszzh-CNi   i„  )ÚwidthÚheightzAsia/Shanghai)Ú
user_agentÚlocaleÚviewportÚtimezone_idu%     [NAV] æ‰“å¼€æ �ç›®é¦–é¡µ(è¿‡ç›¾)â€¦)Úflushz/gdsnyj/gkmlpt/index#z  [LOAD] status=ú?z title=é2   z  [LOAD ERR] éx   r   z/gdsnyj/gkmlpt/api/all/z?page=z&sid=zOasync () => {
                try {
                    const r = await fetch('zv');
                    return await r.json();
                } catch(e) { return {error: e.message}; }
            }Úerrorz  [API ERR] ÚclassifyÚ
post_countÚarticlesu     ç¬¬u   é¡µ: u    æ�¡ (total=ú)r   Ú ÚtitleÚdateÚdocument_numberÚ	publisher)r   r0   r1   Údoc_nor3   z  [LIST] total=u   , åŽ»é‡�å�Ž u    æ�¡Ú	SEARCH_DBz/root/search.dbé<   r   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )Ú.0Úrs     r   ú	<genexpr>zrun_async.<locals>.<genexpr>j   s   è ø€ ò \˜q�a˜•dñ \ùs   ‚z.SELECT page_url FROM gov_raw WHERE site_name=?u#     [WARN] è¯»å�–å·²å…¥åº“URLå¤±è´¥: u     [DB] å·²å…¥åº“ u    æ�¡ï¼Œæœ¬æ¬¡å¾…æŠ“è¯¦æƒ… ú/z  [z] é(   z...iPÃ  é   )r	   r   z    [DETAIL ERR] éd   u    é™�çº§ä¸ºæ ‡é¢˜è®°å½•z<p>z</p>)Ú	site_namer0   Úpub_dateÚcontentÚ
source_urlr   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"z*<meta\s+name="PubDate"\s+content="([^"]*)"z\d{4}-\d{2}-\d{2}z2<div class="article-content"[^>]*>([\s\S]*?)</div>u       [SKIP] æ­£æ–‡ç©ºzhref="/zhref="zsrc="/zsrc=")r0   r   rA   r@   rB   Úsummaryg      ø?g      @u     å…± u
    æ�¡æœ‰æ•ˆÚ
gddrc_jnjc).Úplaywright.async_apir   Úplaywright_stealthr   ÚchromiumÚlaunchÚnew_contextÚUAÚapply_stealth_asyncÚnew_pageÚprintr   ÚBASEÚCOL_IDÚstatusr0   r   ÚstrÚcloseÚsetr   ÚSITE_IDÚevaluateÚgetÚlenÚaddÚstripÚappendÚsqlite3ÚconnectÚosÚgetenvÚexecuteÚ	SITE_NAMEÚfetchallÚ	enumeraterB   ÚreÚsearchÚgroupÚsubr   ÚsleepÚrandomÚuniformr   )Úpagesr   r   ÚpÚbrowserÚctxÚstealthr   r   ÚeÚ	items_allÚseenÚtotalÚpgÚapiÚdataÚartsÚitr   r0   Ú_sqÚ_dbÚ_exÚ_beforeÚrecordsÚidxÚdhÚmrA   ÚdmrB   s                                  r   Ú	run_asyncr‚   (   så  è ø€ Ý5Ý*ÙÓ!÷ uð u QØŸ
™
×)Ñ)ØØ\Únð *ó 
÷ 
ˆð
 ×'Ñ'´2¸gØ;?È3Ñ1OÐ]lð (ó n÷ nˆá“)ˆØ×)Ñ)¨#Ó.×.Ð.Ø—\‘\“^×#ˆô 	Ð5¸TÕBð	Ü(¨´$°Ð7LÌVÈHÐ/UÓV×VˆDÜÐ$±D T§[¢[¸cÐ$BÀ'ÐQU×Q[ÑQ[ÓQ]×K]Ð_bÐ`bÐJcÐIdÐeÐmqÕrð ˆ	Ü‹uˆØˆÜ˜˜5 1™9Ó%ó 	ˆBÜ�FÐ1´&°¸À¸tÀ5ÌÈ	ÐRˆCØŸ™ð ,,à,/¨5ð 1ð(ó ÷ ˆDð ˜$‰Ü˜ T¨'¡] OÐ4Ô5ÚØ—X‘X˜jÓ)Ò/¨R×4Ñ4°\À1ÓEˆEØ—8‘8˜J¨Ó+Ò1¨rˆDÙÙÜ�E˜"˜˜U¤3 t£9 +¨\¸%¸ÀÐBÔCØò �Ø—f‘f˜U BÓ'�Ú˜3 dš?Ø—H‘H˜S”MØŸF™F 7¨BÓ/×5Ñ5Ó7�EØ×$Ñ$Ø"Ø!&Ü # B§F¡F¨6°2Ó$6Ó 7Ø"$§&¡&Ð):¸BÓ"?Ø%'§V¡V¨K¸Ó%<ñ&õ ðð ”C˜“I‰~ Ô&Ùð;	ô> 	� ˜w l´3°y³>Ð2BÀ$ÐGÈtÕTð	Û!Ø—+‘+œbŸi™i¨Ð5FÓGÐQS�+ÓTˆCÜñ \ C§K¡KØ@Ä9À,ó%PßPXÑPXÓPZô\ó \ˆCà�I‰IŒKô �i“.ˆØ"+ÖD˜B¨r°%©yÀÒ/C’RÐDˆ	ÐDÜÐ!¤# c£( Ð+EÄcÈ)ÃnÐEUÐUVÐW^ÐV_Ð`ÐhlÕmð ˆÜ  Ó+ó )	>‰GˆC�Ü�C˜˜A™�w˜a¤ I£Ð/¨r°"°W±+¸c¸rÐ2BÐ1CÀ3ÐGÔHð
Ü,¨T°2°e±9ÀeÐUVÔW×W�ØŸ<™<›>×)�ð �w‘KˆEÜ—	‘	ÐLÈbÓQˆAÙ�Q—W‘W˜Q“Z×%Ñ%Ô'ØŸ™ ›
×(Ñ(Ó*�Ø˜&‘zˆHÜ—	‘	ÐGÈÓLˆAÙÜ—Y‘YÐ3°Q·W±W¸Q³ZÓ@�ÙØ!Ÿx™x›z�HØˆGÜ—	‘	ÐOÐQSÓTˆAÙØŸ'™' !›*×*Ñ*Ó,�Ø—=‘=”?ÜÐ,Ô-ÙÜ—f‘f˜Z¨´D©¸3Ñ)>ÀÓHˆGÜ—f‘f˜Y¨´$©¸Ñ(<¸gÓFˆGØ�N‰NØØ˜%‘yØ$Ü&Ø"Øñô ð ”S˜“^ aÑ'Ô'Ü—m‘m¤F§N¡N°3¸Ó$<Ó=×=Ò=ðS)	>ðT �m‰m‹o×Ð÷ku÷ uôn 
ˆF”3�w“<�. 
Ð
+Ô,ÙÜ˜ ,Ô/Üˆw‹<Ððuuùð
ùð
nùð 	/ùØ#ùð
 WùØK]úÜò 	Ü�M¤# a£&¨¨# , Ð0Ô1Ø—-‘-“/×!Ñ!Û÷)u÷ uñ uûð"	úðúôL ò 	ÜÐ7¸°sÐ;À4ÕHÜ“%ŽCûð	üò Eð XùØ)úÜò ÜÐ)¬#¨a«&°°#¨,¨Ð7MÐNÔOØ—‘Ü!*°R¸±[ÈbÐQWÉjØ!$ R¨¡[ M°Ð6Ø"$ U¡)°B°u±Iñ ô õ
 ûðúðH >ùØùðkuù÷ u÷ uò uüsË  ‚\
šW›\
ž$[4ÁWÁ#[4Á&W"Á'[4ÂW%Â[4ÂW(Â[4Â1W1ÃW+Ã.W1Ã<W.Ã=W1ÄA[4ÅYÅB[4Ç2[4Ç7B[4Ê [4Ê.A0YÌ[4Ì-Y?Ì:Y?Ì>A%[4Î$Z
Î9ZÎ:Z
ÏZÏZ
ÏE7[4Õ,[4Õ;[+Õ<[4Ö[.Ö[4Ö\
Ö&[1Ö'6\
×[4×"[4×%[4×([4×+W1×.W1×1	Y×:-YØ'X*Ø(YØ-[4Ø1\
Ø<X?Ø=\
ÙYÙ[4Ù	Y<ÙY7Ù1[4Ù7Y<Ù<[4ÚZ
ÚZ
Ú
	[(ÚA
[#Û[4Û#[(Û([4Û.[4Û1\
Û4\Û:[=Û;\Ü\
c                  óì   — dd l } | j                  «       }|j                  dt        d¬«       |j	                  «       }t        j                  t        |j                  ¬«      «      }t        d|› d�«       y)Nr   z--pagesé   )ÚtypeÚdefault)rk   zDone: z records)
ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr   Úrunr‚   rk   rN   )r‡   Úparserr   Úns       r   Úmainr�   ¨   sa   € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐÔ7Ø×ÑÓ€DÜ�‰”I D§J¡JÔ/Ó0€AÜ	ˆF�1�#�XÐ
ÔØó    Ú__main__)i0u  r>   )r„   )Ú__doc__Úsysr^   rd   r   Újsonri   ÚtimeÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rO   rP   rU   ra   rK   r   r‚   r�   Ú__name__Úexitr8   r�   r   ú<module>rž      s�   ðñ	÷ 0× /× /Ó /Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à€Ø	€Ø
€ØK€	Øv€óó"}ò@ð ˆzÒØ€C‡H�H‰T‹VÕð r�   