Ë
    ƒúƒ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dd	d
œdddd
œdddd
œdœZdZdd„Zdd„Zd„ Zedk(  r ej0                   e«       «       yy)u  
crawl_ahhz_public.py - å¾½å·žåŒºæ”¿åºœ public æ �ç›® (www.ahhz.gov.cn)
ç«™ç‚¹: å¸�è�”NWAF + ç‘žæ•°4ä»£å�ŒWAF (ä¸Ž ahshx å�Œæ¬¾)
è¿‡ç›¾: playwright + playwright-stealth
åˆ—è¡¨: GET /huangshanzwgk/zwgk/site/label/8888
  labelName=publicInfoList&siteId=6793339&organId={organ}&pageSize=15&pageIndex=N
  &isDate=true&dateFormat=yyyy-MM-dd&length=50&type=4&action=list&isJson=true&catId={cat}
è¯¦æƒ…: /zwgk/public/{organ}/{contentId}.html, meta ArticleTitle/PubDate, æ­£æ–‡ div.wzcon.j-fontContent

æ �ç›® (--col):
  hpysp_a : å¾½å·žåŒº-çŽ¯è¯„ç¬¬ä¸€æ¬¡å…¬ç¤º/æ„�è§�å��é¦ˆ organ=6616219 cat=6726923
  hpysp_b : å¾½å·žåŒº-çŽ¯è¯„å…¬ç¤º(è¯¢ä»·/ç¬¬ä¸€æ¬¡å…¬ç¤º) organ=6616219 cat=6726922
  nlj     : å¾½å·žåŒºå†œä¸šå†œæ�‘å±€-å…¬å¼€å…¬ç¤º organ=6616193 cat=6726922

è¿›ç¨‹é”�: flock ç«™ç‚¹çº§ä¸²è¡ŒåŒ–
é    N)Úpush_to_searchdbzhttps://www.ahhz.gov.cnÚ6793339z/tmp/ahhz_public.lockÚ6616219Ú6726923u   å¾½å·žåŒº-çŽ¯è¯„ç¬¬ä¸€æ¬¡å…¬ç¤º)ÚorganÚcatÚnameÚ6726922u   å¾½å·žåŒº-çŽ¯è¯„å…¬ç¤ºÚ6616193u%   å¾½å·žåŒºå†œä¸šå†œæ�‘å±€-å…¬å¼€å…¬ç¤º)Úhpysp_aÚhpysp_bÚnljzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36c                 ó,  — t        t        d«      }	 t        j                  |t        j                  t        j
                  z  «       |S # t        $ rÁ t        d| › d�«       t        j                  «       | z   }t        j                  «       |k  rv	 t        j                  |t        j                  t        j
                  z  «       |cY S # t        $ r t        j                  d«       Y nw xY wt        j                  «       |k  rŒvt        d«       Y yw xY w)u3   ç«™ç‚¹çº§äº’æ–¥é”�, é˜»å¡žç­‰å¾…æœ€å¤š max_wait ç§’Úwu<     [LOCK] å�¦ä¸€ ahshx å®žä¾‹è¿�è¡Œä¸­, ç­‰å¾…é‡Šæ”¾ (æœ€å¤š zs)...é
   u     [LOCK] ç­‰å¾…è¶…æ—¶, æ”¾å¼ƒN)
ÚopenÚ	LOCK_FILEÚfcntlÚflockÚLOCK_EXÚLOCK_NBÚBlockingIOErrorÚprintÚtimeÚsleep)Úmax_waitÚfdÚdeadlines      ú&/root/gov_crawler/crawl_ahhz_public.pyÚacquire_lockr    #   sÐ   € ä	Œi˜Ó	€BðÜ�‰�BœŸ™¬¯©Ñ5Ô6Øˆ	øÜò 
ÜÐLÈXÈJÐV[Ð\Ô]Ü—9‘9“; Ñ)ˆÜ�i‰i‹k˜HÒ$ðÜ—‘˜B¤§¡´·±Ñ =Ô>Ø’	øÜ"ò Ü—
‘
˜2–ðúô	 �i‰i‹k˜HÓ$ô 	Ð-Ô.Ùð
ús<   ’6A	 Á	ADÂ6C	ÃDÃ	C*Ã'DÃ)C*Ã*DÄDÄDc              ƒ   ó¶  K  — t         |    }|d   }|d   }|d   }t        › dt        › d|› d|› �}t        › d|› d|› d	�}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 {  –—† }	 |j                  |dd¬«      ƒ d {  –—† }|j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }t!        j"                  d|«      }t%        d|r|j&                  nd› d|r|j)                  d«      nd› d t+        |«      › �«       |r[d!|j)                  d«      v sd"|j)                  d«      v r5t%        d#«       |j-                  «       ƒ d {  –—†  	 d d d «      ƒd {  –—†  y
g }t3        «       }d
}t5        d|dz   «      D �]W  }|j7                  t1        t9        t;        d&| › d'|› �«      «      «      d(d  |¬)«      }|j=                  d*|› d+�«      ƒ d {  –—† }d,|v rt%        d-|d,   › �«        nì|j?                  d.d
«      }|j?                  d/g «      xs g }|s nÀt%        d0|› d1t+        |«      › d2|› d3�«       |D ]�  }|j?                  d4d5«      }|sŒ||vsŒ|jA                  |«       |jC                  |jE                  d6«      r|nt        |z   |j?                  d7d5«      jG                  «       |j?                  d8«      xs d5d d9 d:œ«       Œ’ |d;z  |k\  s�ŒX n t%        d<|› d=t+        |«      › d>�«       g }tI        |«      D �]-  \  }}t%        d?|dz   › d@t+        |«      › dA|d7   d dB › dC�«       	 |j                  |dD   ddE¬«      ƒ d {  –—† }|j                  dF«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }|d7   }t!        j"                  dI|«      }|r>|j)                  d«      jG                  «       r|j)                  d«      jG                  «       }|dJ   }t!        j"                  dK|«      }|r7t!        j"                  dL|j)                  d«      «      } | r| j)                  «       }d5}!t!        j"                  dM|«      }|st!        j"                  dN|«      }|r|j)                  d«      jG                  «       }!|!s3|jK                  dO«      }"|"d
kD  r|jK                  dP|"«      dz   }#||#|#dQz    }!|!jG                  «       st%        dR«       �ŒÑt!        jL                  dSdTt        z   d@z   |!«      }!t!        jL                  dUdVt        z   d@z   |!«      }!|jC                  ||dD   |||!d5dWœ«       �Œ0 |j-                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  t%        dXt+        «      › dY�«       |rtO        |d&| › �«       t+        |«      S 7 �Œµ7 �Œ�7 �Œo7 �ŒR7 �Œ=7 �Œ#7 �Œ7 �Œø7 �Œ\7 �ŒN# t.        $ rN}t%        d$t1        |«      d d% › �«       |j-                  «       ƒ d {  –—†7   Y d }~d d d «      ƒd {  –—†7   y
d }~ww xY w7 �Œ57 �Œ¿7 �Œ©7 �Œ”# t.        $ r%}t%        dGt1        |«      d dH › �«       Y d }~�Œ:d }~ww xY w7 Œý7 Œï# 1 ƒd {  –—†7  sw Y   ŒÿxY w­w)ZNr   r   r	   zO/huangshanzwgk/zwgk/site/label/8888?_=0.{rand}&labelName=publicInfoList&siteId=z	&organId=z™&pageSize=15&pageIndex={page}&isDate=true&dateFormat=yyyy-MM-dd&length=50&type=4&action=list&result=&isJson=true&keyWords=&isSetValue=true&catIds=&catId=z/zwgk/public/column/z?type=4&catId=z&action=list&nav=3r   )Ú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_idÚdomcontentloadedi¸ˆ  )Ú
wait_untilÚtimeoutià.  z<title>([^<]*)</title>z  [LOAD] status=ú?z title=é   z len=ÚNWAFÚEnvironmentu     [WAF] ä»�è¢«æ‹¦æˆªz  [LOAD ERR] éx   Úahshx_Ú_iñÿÿÿ)ÚrandÚpagezOasync () => {
                try {
                    const r = await fetch('zv');
                    return await r.json();
                } catch(e) { return {error: e.message}; }
            }Úerrorz  [API ERR] ÚtotalÚdatau     ç¬¬u   é¡µ: u    æ�¡ (total=ú)ÚlinkÚ ÚhttpÚtitleÚpublishDater   )Úurlr@   Údateé   z  [LIST] total=u   , åŽ»é‡�å�Ž u    æ�¡z  [ú/z] é(   z...rB   i0u  i¸  z    [DETAIL ERR] éd   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"rC   z*<meta\s+name="PubDate"\s+content="([^"]*)"z\d{4}-\d{2}-\d{2}zVclass="wzcon\s+j-fontContent[^"]*"[^>]*>([\s\S]*?)</div>\s*</div>\s*<div\s+class="zoomzAclass="wzcon\s+j-fontContent[^"]*"[^>]*>([\s\S]*?)</div>\s*</div>zclass="wzcon j-fontContent"ú>i N  u       [SKIP] æ­£æ–‡ç©ºzhref="/zhref="zsrc="/zsrc=")r@   rB   Úpub_dateÚ	site_nameÚcontentÚsummaryu     å…± u
    æ�¡æœ‰æ•ˆ)(ÚCOL_MAPÚBASEÚSITE_IDÚplaywright.async_apir"   Úplaywright_stealthr#   ÚchromiumÚlaunchÚnew_contextÚUAÚapply_stealth_asyncÚnew_pageÚgotoÚwait_for_timeoutrK   ÚreÚsearchr   ÚstatusÚgroupÚlenÚcloseÚ	ExceptionÚstrÚsetÚrangeÚformatÚabsÚhashÚevaluateÚgetÚaddÚappendÚ
startswithÚstripÚ	enumerateÚfindÚsubr   )$Úcol_keyÚpagesÚcolÚorgan_idÚcat_idrJ   ÚAPI_TPLÚLIST_URLr"   r#   ÚpÚbrowserÚctxÚstealthr8   ÚrespÚhtmlÚmÚeÚ	items_allÚseenr:   ÚpgÚapi_urlr;   ÚitemsÚitr=   ÚrecordsÚidxr@   rI   ÚdmrK   Úidx2Ústarts$                                       r   Ú	run_asyncrŠ   6   sì  è ø€ Ü
�'Ñ
€CØ�7‰|€HØ�‰Z€FØ�F‘€Iä�ð 3Ü3:°)¸9ÀXÀJðbØbhÐaiðk€Gô �Ð+¨H¨:°^ÀFÀ8ÐK]Ð^€Hå5Ý*ÙÓ!÷ nð n QØŸ
™
×)Ñ)ØØ\Únð *ó 
÷ 
ˆð
 ×'Ñ'´2¸gØ;?È3Ñ1OÐ]lð (ó n÷ nˆá“)ˆØ×)Ñ)¨#Ó.×.Ð.Ø—\‘\“^×#ˆð	ØŸ™ 8Ð8JÐTY˜ÓZ×ZˆDØ×'Ñ'¨Ó.×.Ð.ØŸ™›×'ˆDÜ—	‘	Ð3°TÓ:ˆAÜÐ$±D T§[¢[¸cÐ$BÀ'ÑXYÈ!Ï'É'ÐRSÌ*Ð_bÐIcÐchÔilÐmqÓirÐhsÐtÔuÙ�f §¡¨£
Ñ*¨m¸q¿w¹wÀq»zÑ.IÜÐ,Ô-Ø—m‘m“o×%Ð%Ø÷-n÷ nð nð: ˆ	Ü‹uˆØˆÜ˜˜5 1™9Ó%ó 	ˆBØ—n‘n¬#¬c´$¸À¸yÈÈ"ÈÐ7NÓ2OÓ.PÓ*QÐRUÐRVÐ*WÐ^`�nÓaˆGØŸ™ð ,,à,3¨9ð 5ð(ó ÷ ˆDð ˜$‰Ü˜ T¨'¡] OÐ4Ô5ÙØ—H‘H˜W aÓ(ˆEØ—H‘H˜V RÓ(Ò.¨BˆEÙÙÜ�E˜"˜˜U¤3 u£: ,¨l¸5¸'ÀÐCÔDØò �Ø—v‘v˜f bÓ)�Ú˜D¨Ò,Ø—H‘H˜T”NØ×$Ñ$Ø'+§¡°vÔ'>™tÄDÈ4ÁKØ!#§¡¨°Ó!4×!:Ñ!:Ó!<Ø!#§¡¨Ó!6Ò!<¸"¸c¸rÐ Bñ&õ ð	ð �B‰w˜%ÔÙð5	ô8 	� ˜w l´3°y³>Ð2BÀ$ÐGÔHð ˆÜ  Ó+ó -	‰GˆC�Ü�C˜˜A™�w˜a¤ I£Ð/¨r°"°W±+¸c¸rÐ2BÐ1CÀ3ÐGÔHðØ!ŸY™Y r¨%¡yÐ=OÐY^˜YÓ_×_�Ø×+Ñ+¨DÓ1×1Ð1Ø!Ÿ\™\›^×+�ð
 �w‘KˆEÜ—	‘	ÐLÈdÓSˆAÙ�Q—W‘W˜Q“Z×%Ñ%Ô'ØŸ™ ›
×(Ñ(Ó*�Ø˜&‘zˆHÜ—	‘	ÐGÈÓNˆAÙÜ—Y‘YÐ3°Q·W±W¸Q³ZÓ@�ÙØ!Ÿx™x›z�HàˆGÜ—	‘	ÐsÐuyÓzˆAÙÜ—I‘IÐbÐdhÓi�ÙØŸ'™' !›*×*Ñ*Ó,�ÙØ—y‘yÐ!>Ó?�Ø˜!’8Ø ŸI™I c¨4Ó0°1Ñ4�EØ" 5¨¨u©Ð5�GØ—=‘=”?ÜÐ,Ô-Ùä—f‘f˜Z¨´D©¸3Ñ)>ÀÓHˆGÜ—f‘f˜Y¨´$©¸Ñ(<¸gÓFˆGØ�N‰NØØ˜%‘yØ$Ø&Ø"Øñö ðM-	ð\ �m‰m‹o×Ð÷]n÷ nô` 
ˆF”3�w“<�. 
Ð
+Ô,ÙÜ˜ F¨7¨)Ð"4Ô5Üˆw‹<Ððgnùð
ùð
nùð 	/ùØ#ùð [ùØ.ùØ'ùð
 &ùð+núô. ò 	Ü�M¤# a£&¨¨# , Ð0Ô1Ø—-‘-“/×!Ñ!Û÷5n÷ nñ nûð.	úðùðB `ùØ1ùØ+úÜò ÜÐ)¬#¨a«&°°#¨,¨Ð8Ô9ÝûðúðP 	øð]nø÷ n÷ nñ nüsÈ  ‚A[ÁXÁ[Á$[Á>XÁ?#[Â"XÂ#[ÃXÃ[ÃXÃ[Ã X)Ã7XÃ8X)ÄXÄX)Ä(X Ä)BX)ÇX#ÇX)Ç[ÇX&Ç[ÇA0[ÉZÉA>[Ë[ËA>[ÍA[Î-ZÏZÏZÏ Z	Ï!ZÏ8ZÏ9ZÏ=G[×[ ×[×[×[×9[Ø[Ø[Ø[Ø[ØX)ØX)Ø X)Ø#X)Ø&[Ø)	Z Ø2-Y;ÙY"Ù Y;Ù%[Ù)[Ù4Y7Ù5[Ù;Z Ú [ÚZÚ	ZÚZÚ	Z=ÚZ8Ú2[Ú8Z=Ú=[Û[Û[Û
[Û[Û[c            
      ó¸  — dd l } | j                  «       }|j                  ddddj                  t        j                  «       «      z   ¬«       |j                  dt        d¬	«       |j                  d
d¬«       |j                  «       }|j                  t        vr7t        d|j                  › dt        t        j                  «       «      › �«       yt        «       }|€y	 t        |j                     }t        d|d   › d|d   › d|d   › d|j                  › �«       t        j                  t        |j                  |j                   s|j                  nd¬«      «      }t        d|› d�«       	 t#        j$                  |t"        j&                  «       |j)                  «        y# t#        j$                  |t"        j&                  «       |j)                  «        w xY w)Nr   z--colÚxitou_zbu   æ �ç›®é”®: ú,)ÚdefaultÚhelpz--pagesr1   )ÚtyperŽ   z--allÚ
store_true)Úactionu   [ERR] æœªçŸ¥æ �ç›® u
   , å�¯é€‰: z  r	   z (organ=r   z cat=r   z) pages=é2   )rq   zDone: z records)ÚargparseÚArgumentParserÚadd_argumentÚjoinrM   ÚkeysÚintÚ
parse_argsrr   r   Úlistr    rq   ÚasyncioÚrunrŠ   Úallr   r   ÚLOCK_UNr_   )r”   Úparserr&   Úlock_fdrr   Úcnts         r   Úmainr£   º   sr  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¨¸-È#Ï(É(ÔSZ×S_ÑS_ÓSaÓJbÑ:bÐÔcØ
×Ñ˜	¬°QÐÔ7Ø
×Ñ˜¨ÐÔ5Ø×ÑÓ€DØ‡x�x”wÑÜÐ# D§H¡H :¨Z¼¼W¿\¹\»^Ó8LÐ7MÐNÔOØä‹n€GØ€ØðÜ�d—h‘hÑˆÜ��3�v‘;�-˜x¨¨G© ~°U¸3¸u¹:¸,ÀhÈtÏzÉzÈlÐ[Ô\Ü�k‰kœ) D§H¡HÀdÇhÂh°D·J²JÐTVÔWÓXˆÜ��s�e˜8Ð$Ô%Øä�‰�GœUŸ]™]Ô+Ø�‰�øô 	�‰�GœUŸ]™]Ô+Ø�‰�ús   ÃBF# Æ#6GÚ__main__)i  )r1   )Ú__doc__ÚsysÚosrZ   rœ   Újsonr   r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rN   rO   r   rM   rU   r    rŠ   r£   Ú__name__Úexit© ó    r   ú<module>r³      s¸   ðñ÷  /× .× .Ó .Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à €Ø
€Ø#€	ð #¨9Ð>_Ñ`Ø"¨9Ð>VÑWØ"¨9Ð>eÑfñ€ð w€óó&AòHð2 ˆzÒØ€C‡H�H‰T‹VÕð r²   