Ë
    H…j_*  ã                   óh  — 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œZdZd„ Zdd„Zdd„Zd„ Zedk(  r ej2                   e«       «       yy)u  
crawl_tongcheng_hpgs.py - æ¡�åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€ (www.tongcheng.gov.cn)
ç«™ç‚¹: CDN 521 çŠ¶æ€�ä½†å†…å®¹æ­£å¸¸; playwright è¿‡ç›¾
åˆ—è¡¨: GET /site/label/8888 (æ³¨æ„�: æ—  huangshanzwgk å‰�ç¼€, ä¸Ž ahshx ä¸�å�Œ)
  labelName=publicInfoList&siteId=2000004241&organId={organ}&pageSize=10&pageIndex=N
  &isDate=true&dateFormat=yyyy-MM-dd&length=50&type=4&action=list&isJson=true&catId={cat}
è¯¦æƒ…: /public/{organ}/{contentId}.html, meta ArticleTitle/PubDate, æ­£æ–‡ div.wzcon.j-fontContent

æ �ç›® (--col):
  hpgs : æ¡�åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€-çŽ¯è¯„å…¬ç¤º/æ„�è§�å¾�é›† organ=2000002271 cat=6725591 (total=75)
  luting_yjzj : æ¡�åŸŽå¸‚å�•äº­é•‡-æ„�è§�å¾�é›† organ=2000002421 cat=6736061 (total=14, å�«è§„åˆ’å…¬ç¤º/çŽ¯è¯„å…¬ç¤º/å¾�æ±‚æ„�è§�)

è¿›ç¨‹é”�: flock ç«™ç‚¹çº§ä¸²è¡ŒåŒ–
é    N)Úpush_to_searchdbzhttps://www.tongcheng.gov.cnÚ
2000004241z/tmp/tongcheng_hpgs.lockÚ
2000002271Ú6725591u(   æ¡�åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€-çŽ¯è¯„å…¬ç¤º)ÚorganÚcatÚnameÚ
2000002421Ú6736061u   æ¡�åŸŽå¸‚å�•äº­é•‡-æ„�è§�å¾�é›†)ÚhpgsÚluting_yjzjzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36c                 óz  — ddl m}  || d«      } |g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]„  }|j	                  d«      xs |j	                  d«      xs d}|rH|j                  d	«      r|nt        |z   }|j                  d
|¬«      }d|_        |j                  |«       Œu|j                  «        Œ† |j                  g d¢«      D ]  }|j                  «        Œ |j                  d
«      D ]h  }|j	                  dd«      }|r0|j                  d«      s|j                  d	«      r|nt        |z   |d<   t        |j                  «      D ]
  }	|	dvsŒ||	= Œ Œj |j                  d«      D ]f  }
t        |
j                  «      D ]  }	|
|	= Œ |
j                  d¬«      rŒ3|
j                  d«      rŒE|
j                  d«      rŒW|
j                  «        Œh |j                  g d¢«      D ]$  }t        |j                  «      D ]
  }	|	dvsŒ||	= Œ Œ& t        |j                  «      D ]_  }|j!                  «       }|sŒd|v s	d|v sd|v sŒ#|j"                  }|r|j$                  dv r|j                  «        ŒP|j'                  «        Œa |j                  d
«      D ]7  }d|j                  «       v sd|j                  «       v sŒ(|j                  «        Œ9 t        |j                  «      D ]9  }|j!                  «       }|sŒt)        |«      dk  sŒ%|dv sŒ*|j'                  «        Œ; t+        |«      S )u]   ç™½å��å�•æ¸…æ´—: åŽ» inline style, unwrap span/font è£…é¥°, ä¿�ç•™ p/table/a, é“¾æŽ¥ç»�å¯¹åŒ–r   )ÚBeautifulSoupzhtml.parser)ÚscriptÚstyleÚiframeÚobjectÚimgÚsrczdata-srcÚ ÚhttpÚa)Úhrefu   æŸ¥çœ‹å›¾ç‰‡)	ÚspanÚfontÚbÚstrongÚemÚiÚuÚsÚdivr   Ú
javascriptÚpT)ÚstripÚtable)r&   ÚtrÚtdÚth)ÚborderÚcellpaddingÚcellspacingu   å¦‚æžœå†…å®¹ä¸�èƒ½æ­£å¸¸æ˜¾ç¤ºu   ä¸‹è½½æœ¬PDFæ–‡æ¡£u   pdfæµ�è§ˆå™¨æ�’ä»¶)r$   r"   u   é“¾æŽ¥å�¦å­˜ä¸ºu   é¼ æ ‡å�³é”®ç‚¹å‡»é   )	u   ]ã€‚u   ã€‚]u   ã€‘ã€‚õ   ã€‘u   ã€‚u   ï¼‰ú)ú]r.   )Úbs4r   Ú	decomposeÚfind_allÚgetÚ
startswithÚBASEÚnew_tagÚstringÚreplace_withÚunwrapÚlistÚattrsÚget_textÚfindÚstringsr%   Úparentr	   ÚextractÚlenÚstr)Úhtmlr   ÚsoupÚtr   r   Úabs_srcr   r   Úattrr$   ÚnodeÚtxtr@   s                 ú)/root/gov_crawler/crawl_tongcheng_hpgs.pyÚ
clean_htmlrL       së  € å!Ù˜˜}Ó-€DÙÒ9Ó:ò ˆØ	�‰�ðà�}‰}˜UÓ#ò ˆØ�g‰g�e‹nÒ9 §¡¨
Ó 3Ò9°rˆÙØ Ÿ^™^¨FÔ3‘c¼À¹ˆGØ—‘˜S w�Ó/ˆAØ%ˆAŒHØ×Ñ˜QÕà�M‰M�Oðð �]‰]ÒVÓWò ˆØ	�‰�
ðà�]‰]˜3Óò ˆØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô5Ø $§¡°Ô 7™¼TÀD¹[ˆAˆf‰IÜ˜Ÿ™“Mò 	ˆDØ˜9Ò$Ø�d‘Gñ	ð	ð �]‰]˜3Óò ˆÜ˜Ÿ™“Mò 	ˆDØ�$‘ð	à�z‰z ˆzÕ%¨a¯f©f°W­oÀaÇfÁfÈUÅmØ�K‰K�Mð	ð
 �]‰]Ò6Ó7ò ˆÜ˜Ÿ™“Mò 	ˆDØÐCÒCØ�d‘Gñ	ðô
 �T—\‘\Ó"ò ˆØ�j‰j‹lˆÚÐ4¸Ñ;Ð?SÐWZÑ?ZÐ^rÐvyÒ^yØ—[‘[ˆFÙ˜&Ÿ+™+¨Ñ5Ø× Ñ Õ"à—‘•ðð �]‰]˜3Óò ˆØ §
¡
£Ñ,Ð0DÈÏ
É
ËÒ0TØ�K‰K�Mðô �T—\‘\Ó"ò ˆØ�j‰j‹lˆÚ”3�s“8˜q“= SÐ,lÒ%lØ�L‰L�Nðô ˆt‹9Ðó    c                 ó,  — 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      rK   Úacquire_lockr^   U   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 �]]  }|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:œ«       Œ’ t+        |«      |k\  s�Œ^ n t%        d;|› d<t+        |«      › d=�«       g }tI        |«      D �]Ó  \  }}t%        d>|dz   › d?t+        |«      › d@|d7   d dA › dB�«       	 |j                  |dC   ddD¬«      ƒ d {  –—† }|j                  dE«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }|d7   }t!        j"                  dH|«      }|r>|j)                  d«      jG                  «       r|j)                  d«      jG                  «       }|dI   }t!        j"                  dJ|«      }|r7t!        j"                  dK|j)                  d«      «      } | r| j)                  «       }d5}!	 |j=                  dL«      ƒ d {  –—† }!|!jG                  «       s7t!        j"                  dM|«      }|r|j)                  d«      jG                  «       }!|!jG                  «       st%        dN«       �Œ®tK        |!«      }!|jC                  ||dC   |||!d5dOœ«       �ŒÖ |j-                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  t%        dPt+        «      › dQ�«       |rtM        |dR| › �«       t+        |«      S 7 �Œa7 �Œ<7 �Œ7 �Œþ7 �Œé7 �ŒÏ7 �Œ¹7 �Œ¤7 �Œ7 �Œú# 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 �Œá7 �Œe7 �ŒO7 �Œ:# t.        $ r%}t%        dFt1        |«      d dG › �«       Y d }~�Œàd }~ww xY w7 �Œ£# t.        $ r Y �Œ­w xY w7 �Œ7 �Œ# 1 ƒd {  –—†7  sw Y   �ŒxY w­w)SNr   r   r	   z</site/label/8888?_=0.{rand}&labelName=publicInfoList&siteId=z	&organId=z™&pageSize=10&pageIndex={page}&isDate=true&dateFormat=yyyy-MM-dd&length=50&type=4&action=list&result=&isJson=true&keyWords=&isSetValue=true&catIds=&catId=z/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   Ú
tongcheng_Ú_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=r/   Úlinkr   r   ÚtitleÚpublishDaterP   )Úurlr{   Údatez  [LIST] total=u   , åŽ»é‡�å�Ž u    æ�¡z  [ú/z] é(   z...r}   i0u  i¸  z    [DETAIL ERR] éd   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"r~   z*<meta\s+name="PubDate"\s+content="([^"]*)"z\d{4}-\d{2}-\d{2}zbdocument.querySelector('.j-fontContent') ? document.querySelector('.j-fontContent').innerHTML : ''zAclass="wzcon\s+j-fontContent[^"]*"[^>]*>([\s\S]*?)</div>\s*</div>u       [SKIP] æ­£æ–‡ç©º)r{   r}   Úpub_dateÚ	site_nameÚcontentÚsummaryu     å…± u
    æ�¡æœ‰æ•ˆÚahshx_)'ÚCOL_MAPr6   ÚSITE_IDÚplaywright.async_apir`   Úplaywright_stealthra   ÚchromiumÚlaunchÚnew_contextÚUAÚapply_stealth_asyncÚnew_pageÚgotoÚwait_for_timeoutr„   ÚreÚsearchrX   ÚstatusÚgrouprB   ÚcloseÚ	ExceptionrC   ÚsetÚrangeÚformatÚabsÚhashÚevaluater4   ÚaddÚappendr5   r%   Ú	enumeraterL   r   )"Úcol_keyÚpagesÚcolÚorgan_idÚcat_idrƒ   ÚAPI_TPLÚLIST_URLr`   ra   r$   ÚbrowserÚctxÚstealthrv   ÚresprD   ÚmÚeÚ	items_allÚseenrx   ÚpgÚapi_urlry   ÚitemsÚitrz   ÚrecordsÚidxr{   r‚   Údmr„   s"                                     rK   Ú	run_asyncr¸   h   s®  è ø€ Ü
�'Ñ
€CØ�7‰|€HØ�‰Z€FØ�F‘€Iä�ð 3Ü3:°)¸9ÀXÀJðbØbhÐaiðk€Gô �� x j°¸v¸hÐFXÐY€Hå5Ý*ÙÓ!÷ kð k 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×%Ð%Ø÷-k÷ kð kð: ˆ	Ü‹uˆØˆÜ˜˜5 1™9Ó%ó 	ˆBØ—n‘n¬#¬c´$¸ÀGÀ9ÈAÈbÈTÐ7RÓ2SÓ.TÓ*UÐVYÐVZÐ*[Ðbd�nÓeˆ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ñ&õ ð	ô �9‹~ Ô&Ùð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ó  !T÷  T�ð —=‘=”?Ü—I‘IÐbÐdhÓi�ÙØŸg™g a›j×.Ñ.Ó0�GØ—=‘=”?ÜÐ,Ô-Ùä  Ó)ˆGØ�N‰NØØ˜%‘yØ$Ø&Ø"Øñö ðG*	ðV �m‰m‹o×Ð÷Wk÷ kôZ 
ˆF”3�w“<�. 
Ð
+Ô,ÙÜ˜ F¨7¨)Ð"4Ô5Üˆw‹<Ððakùð
ùð
nùð 	/ùØ#ùð [ùØ.ùØ'ùð
 &ùð+kúô. ò 	Ü�M¤# a£&¨¨# , Ð0Ô1Ø—-‘-“/×!Ñ!Û÷5k÷ kñ kûð.	úðùðB `ùØ1ùØ+úÜò ÜÐ)¬#¨a«&°°#¨,¨Ð8Ô9Ýûðúð" TúÜò Úðúð& 	ùðWkù÷ k÷ kò küsÿ  ‚AZÁV7ÁZÁ$ZÁ>V:Á?#ZÂ"V=Â#ZÃW ÃZÃWÃZÃ WÃ7WÃ8WÄW	ÄWÄ(WÄ)BWÇWÇWÇZÇWÇZÇA0ZÉX/ÉA>ZËZËBZÍAZÎ3X;ÏX2ÏX;Ï&X5Ï'X;Ï>X8Ï?X;ÐB1ZÒ5Y/Ó	Y,Ó
Y/ÓB ZÕ.Y?Õ/ZÕ3ZÕ>ZÕ?9ZÖ:ZÖ=Z× Z×Z×W×	W×W×W×Z×	X,×-X'ØXØX'ØZØZØ X#Ø!ZØ'X,Ø,ZØ2X;Ø5X;Ø8X;Ø;	Y)ÙY$ÙZÙ$Y)Ù)ZÙ,Y/Ù/	Y<Ù8ZÙ;Y<Ù<ZÚZÚZÚZÚZÚ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--pagesro   )Útyper¼   z--allÚ
store_true)Úactionu   [ERR] æœªçŸ¥æ �ç›® u
   , å�¯é€‰: z  r	   z (organ=r   z cat=r   z) pages=é2   )r£   zDone: z records)ÚargparseÚArgumentParserÚadd_argumentÚjoinr‡   ÚkeysÚintÚ
parse_argsr¤   rX   r;   r^   r£   ÚasyncioÚrunr¸   ÚallrS   rT   ÚLOCK_UNr—   )rÂ   Úparserrd   Úlock_fdr¤   Úcnts         rK   Ú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  )ro   )Ú__doc__ÚsysÚosr“   rÉ   ÚjsonrS   rY   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r6   rˆ   rR   r‡   rŽ   rL   r^   r¸   rÐ   Ú__name__Úexit© rM   rK   ú<module>rß      s³   ðñ÷ /× .× .Ó .Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à%€Ø
€Ø&€	ð #¨9Ð>hÑiØ)°)ÐEfÑgñ€ð
 w€ò2ójó&~òBð2 ˆzÒØ€C‡H�H‰T‹VÕð rM   