Ë
    ûh†jT+  ã                   óZ  — 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mZ ddlmZ ddlmZ ddlmZ  ej*                  «       Zde_        ej0                  e_        d	Zed
z   ZdZdZdZedddœZd\  Z Z!dZ"eddfd„Z#dd„Z$d„ Z%d„ Z&d„ Z'd„ Z(e)dk(  r e(«        yy)un  ä¹�æ¸…å¸‚äººæ°‘æ”¿åºœ (www.yueqing.gov.cn) é€šçŸ¥å…¬å‘Š â€” JCMS jpaas-publish
æ �ç›®: /col/col1229887933/index.html
åˆ—è¡¨: JS å¼‚æ­¥åŠ è½½ (jpaas-publish-server) â†’ playwright æ¸²æŸ“ + ç¿»é¡µ
è¯¦æƒ…: /col/col1229887933/art/2026/art_{hash}.html, æ­£æ–‡ div id=content (PDF é™„ä»¶å¸¸è§�)
ç”¨æ³•: python3 crawl_yueqing_tzgg.py [--pages 5] [--out /tmp/yueqing.jsonl]
é    N)ÚRequestÚurlopen)Ú	HTTPErrorÚURLError)Úurljoin©ÚBeautifulSoup)Úsync_playwrightFzhttps://www.yueqing.gov.cnz/col/col1229887933/index.htmlu   ä¹�æ¸…å¸‚-é€šçŸ¥å…¬å‘Šu   æµ™æ±ŸzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Language)g      ð?gš™™™™™ù?é
   é   é   c           
      ó\  — t        t        «      }||d<   t        |«      D ]D  }	 t        | |¬«      }t	        ||t
        ¬«      }|j                  «       j                  dd¬«      c S  y# t        $ rY}|j                  dv rY d }~ yt        d	|j                  › d
| dd  › �d¬«       t        j                  d|dz  z   «       Y d }~Œ¥d }~wt        t        t        f$ rO}t        dt!        |«      j"                  › d
| dd  › �d¬«       t        j                  d|dz  z   «       Y d }~�Œd }~ww xY w)NÚReferer)Úheaders)ÚtimeoutÚcontextúutf-8Úignore)Úerrors)i”  iš  Ú z  [HTTP z] iÄÿÿÿT©Úflushr   z  [ERR )ÚdictÚHEADERSÚranger   r   ÚSSL_CTXÚreadÚdecoder   ÚcodeÚprintÚtimeÚsleepr   ÚTimeoutErrorÚOSErrorÚtypeÚ__name__)	ÚurlÚrefererr   Úretriesr   ÚattemptÚreqÚrespÚes	            ú'/root/gov_crawler/crawl_yueqing_tzgg.pyÚfetchr0   "   s  € Ü”7‹m€GØ €GˆIÑÜ˜“>ò (ˆð	(Ü˜# wÔ/ˆCÜ˜3¨¼ÔAˆDØ—9‘9“;×%Ñ% g°hÐ%Ó?Ò?ð	(ð øô ò 	(Ø�v‰v˜Ñ#ÝÜ�H˜QŸV™V˜H B s¨3¨4 y kÐ2¸$Õ?Ü�J‰J�q˜7 Q™;‘×'Ñ'ûÜœ,¬Ð0ò 	(Ü�GœD ›G×,Ñ,Ð-¨R°°C°D°	¨{Ð;À4ÕHÜ�J‰J�q˜7 Q™;‘×'Ò'ûð	(ús*   ¤?A(Á(	D+Á1CÂ;CÃD+ÃAD&Ä&D+c                 ó‚  — |xs t         }t        | d«      } |g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]‡  }|j	                  d«      xs |j	                  d«      xs d}|rK|j                  d«      r|nt        ||«      }|j                  d|¬	«      }d
|_        |j                  |«       Œx|j                  «        Œ‰ |j                  d«      D ][  }dD ]  }	|	|j                  v sŒ||	= Œ t        |j                  «      D ](  }	|	j                  d«      s|	j                  d«      sŒ&||	= Œ* Œ] |j                  g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]]  }|j	                  dd«      }
|
r4|
j                  d«      s#|
j                  d«      r|
nt        ||
«      |d<   ŒK|
sŒN|j                  «        Œ_ |j                  d«      D ]I  }|j                  d¬«      rŒ|j                  d«      rŒ(|j                  d«      rŒ:|j                  «        ŒK t        |«      S )Núhtml.parser)ÚscriptÚstyleÚiframeÚobjectÚembedÚformÚinputÚbuttonÚimgÚsrczdata-srcr   ÚhttpÚa©Úhrefu   æŸ¥çœ‹å›¾ç‰‡T)r4   ÚclassÚalignÚvalignÚborderÚcellpaddingÚcellspacingÚwidthÚheightÚbgcolorÚfaceÚcolorÚsizeÚlangÚdirÚ	setedariaÚtabindexÚrolezaria-zdata-)ÚdivÚspanÚfontÚcenterÚbÚstrongÚemÚiÚuÚsÚlabelr@   Ú
javascriptÚp©ÚstripÚtable)ÚBASEr	   Ú	decomposeÚfind_allÚgetÚ
startswithr   Únew_tagÚstringÚreplace_withÚattrsÚlistÚunwrapÚget_textÚfindÚstr)ÚhtmlÚbase_urlÚbaseÚsoupÚtr;   r<   Úabs_srcr>   Úattrr@   r^   s               r/   Ú
clean_htmlrw   5   s  € ØÒ”t€DÜ˜˜}Ó-€DÙÒ]Ó^ò ˆØ	�‰�ðà�}‰}˜UÓ#ò ˆØ�g‰g�e‹nÒ9 §¡¨
Ó 3Ò9°rˆÙØ Ÿ^™^¨FÔ3‘c¼ÀÀsÓ9KˆGØ—‘˜S w�Ó/ˆAØ%ˆAŒHØ×Ñ˜QÕà�M‰M�Oðð �]‰]˜4Ó ò ˆð6ò 	ˆDð �q—w‘wŠØ�d‘Gð		ô
 ˜Ÿ™“Mò 	ˆDØ�‰˜wÔ'¨4¯?©?¸7Õ+CØ�d‘Gñ	ðð �]‰]ÒiÓjò ˆØ	�‰�
ðà�]‰]˜3Óò ˆØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô5Ø $§¡°Ô 7™¼WÀTÈ4Ó=PˆAˆfŠIÚØ�K‰K�Mðð �]‰]˜3Óò ˆØ�z‰z ˆzÕ%¨a¯f©f°W­oÀaÇfÁfÈSÅkØ�K‰K�Mðô ˆt‹9Ðó    c                 ó4  — g }| D ]P  \  }}d|vrŒt        j                  d|«      }|r|j                  d«      dz   nd}|sŒ<|j                  |||dœ«       ŒR t	        «       g }}|D ]/  }|d   |vsŒ|j                  |d   «       |j                  |«       Œ1 |S )Nz/col/col1229887933/art/z!/art/(\d{4})/art_[0-9a-f]+\.html$é   z-01-01r   )Útitler(   Údater(   )ÚreÚsearchÚgroupÚappendÚsetÚadd)	Ú	items_rawÚitemsrt   ÚhÚmr|   ÚseenÚoutÚits	            r/   Úparse_list_renderedrŠ   Z   s¬   € Ø€EØò ?‰ˆˆ1Ø$¨AÑ-ØÜ�I‰IÐ:¸AÓ>ˆÙ()ˆq�w‰w�q‹z˜HÒ$¨rˆÚØ�L‰L 1¨Q¸Ñ=Õ>ð?ô “�rˆ#€DØò ˆØˆe‰9˜DÒ Ø�H‰H�R˜‘YÔØ�J‰J�r�Nðð €Jrx   c                 óZ  — g }t        «       5 }|j                  j                  dddg¬«      }|j                  t        dddœd¬	«      }|j                  «       }	 |j                  | d
d¬«       t        j                  d«       |xs d}t        d|dz   «      D ]Ô  }	|	dkD  rh	 |j                  d«      xs |j                  d|	› d�«      }
|
r&|
j!                  «        t        j                  d«       nt        d|	dz
  › d�d¬«        nh	 |j#                  d«      }t%        |«      }|j'                  |«       t        d|	› dt)        |«      › dt)        |«      › �d¬«       t)        |«      dk(  sŒÔ n |j+                  «        d d d «       t-        «       g }}|D ]/  }|d   |vsŒ|j/                  |d   «       |j1                  |«       Œ1 |S # t        $ r=}t        dt        |«      j                  › dt        |«      d d › �d¬«       Y d }~�Œœd }~ww xY w# t        $ r Y  Œ¯w xY w# 1 sw Y   Œ¤xY w) NTz--no-sandboxz---disable-blink-features=AutomationControlled)ÚheadlessÚargsiV  i„  )rG   rH   zzh-CN)Ú
user_agentÚviewportÚlocalei0u  Údomcontentloaded)r   Ú
wait_untilz  goto: ú é<   r   é   éd   rz   za.layui-laypage-nextza:has-text('z')é   u!     æ— ä¸‹ä¸€é¡µæŒ‰é’®, å�œæ­¢ (é¡µú)aK  () => {
                const out = [];
                document.querySelectorAll('a').forEach(a => {
                    const t = (a.innerText || '').trim().replace(/\s+/g, ' ');
                    if (t && t.length > 5 && a.href) out.push([t.slice(0,120), a.href]);
                });
                return out;
            }u     é¡µz: u    æ�¡, ç´¯è®¡ r   r(   )r
   ÚchromiumÚlaunchÚnew_contextÚUAÚnew_pageÚgotoÚ	Exceptionr!   r&   r'   ro   r"   r#   r   Úquery_selectorÚclickÚevaluaterŠ   ÚextendÚlenÚcloser�   r‚   r€   )Úpage_urlÚ	max_pagesÚ	all_itemsr^   ÚbrowserÚctxÚpager.   Úpages_totalÚpgÚnxtrƒ   r„   r‡   rˆ   r‰   s                   r/   Úrender_listr¯   k   s:  € Ø€IÜ	Ó	ð $˜aØ—*‘*×#Ñ#¨T¸ÐIxÐ8yÐ#ÓzˆØ×!Ñ!¬RÀDÐTWÑ:XÐahÐ!ÓiˆØ�|‰|‹~ˆð	KØ�I‰I�h¨Ð:LˆIÔMô 	�
‰
�1ŒØÒ& 3ˆÜ˜˜;¨™?Ó+ò 	ˆBØ�AŠvð	Ø×-Ñ-Ð0DÓFÒtÈ$×J]ÑJ]Ð`lÐmoÐlpÐprÐ^sÓJt�CÙØŸ	™	œÜŸ
™
 1�äÐ AÀ"ÀQÁ$ÀÀqÐIÐQUÕVÙð &ð Ÿ™ð 'ó ˆIô (¨	Ó2ˆEØ×Ñ˜UÔ#Ü�E˜"˜˜R¤ E£
˜|¨=¼¸Y»Ð8HÐIÐQUÕVÜ�5‹z˜Q‹Ùð3	ð4 	�‰Œ÷I$ôJ “�rˆ#€DØò ˆØˆe‰9˜DÒ Ø�H‰H�R˜‘YÔØ�J‰J�r�Nðð €JøôI ò 	KÜ�HœT !›W×-Ñ-Ð.¨a´°A³°s¸°¨}Ð=ÀT×JÓJûð	Kûô !ò Úðú÷+$ð $úsb   �AH!ÁGÁ-2H!Â A$HÄA&H!Å+H!Ç	HÇ2H	ÈH!È	HÈH!È	HÈH!ÈHÈH!È!H*c                 óÄ  ‡— ddl m}  || d«      Šˆfd„} |d«      xs d} |d«      xs d} |d«      xs d}‰j                  d	d
¬«      xsg ‰j                  d	d
¬«      xsR ‰j                  d	d¬«      xs= ‰j                  d	d¬«      xs( ‰j                  d	d¬«      xs ‰j                  dd
¬«      }d}g }	|�ry|j                  d	d¬«      D ]  }
|
j	                  «        Œ |j                  dd¬«      D ]¸  }|�t        |d«      rt        |dd «      €Œ|j                  d«      xs dj                  «       }t        j                  d|«      s	d|v sd|v sŒa|j                  d¬«      xs d}|j                  d«      r|nt        ||«      }|	j                  ||f«       |j	                  «        Œº t        t!        |«      |«      }t        j"                  dd|t        j$                  ¬«      }t        j"                  dd|«      }|	r.dj'                  d „ |	D «       «      }|d!z   |z   j)                  «       }|s‰j                  d"«      }g }|D ]?  }|j                  d¬«      }t+        |«      d#kD  sŒ$|j                  t+        |«      |f«       ŒA |r&t-        |d$„ ¬%«      d&   }t        t!        |«      |«      }||r|d d' nd|||	D ��cg c]
  \  }}||d(œ‘Œ c}}d)œS c c}}w )*Nr   r   r2   c                 óÆ   •— ‰j                  dd| i¬«      xs# ‰j                  dd| j                  «       i¬«      }|r#|j                  d«      xs dj                  «       S dS )NÚmetaÚname)rj   Úcontentr   )rn   Úlowerre   r`   )r³   r†   rs   s     €r/   r²   zparse_detail_html.<locals>.meta�   s_   ø€ Ø�I‰I�f V¨T NˆIÓ3Òf°t·y±yÀÐPVÐX\×XbÑXbÓXdÐOe°yÓ7fˆÙ34�—‘�iÓ Ò& B×-Ñ-Ó/Ð<¸"Ð<rx   ÚArticleTitler   ÚPubDateÚContentSourcerR   r´   )Úid)Úclass_ÚzoomÚ
TRS_EditorÚtdÚpathr>   Tr?   re   rj   r@   zB\.(pdf|doc|docx|xls|xlsx|zip|rar|caj|wps|et|jpg|jpeg|png|gif|mp4)$Údownloadzdocument/downloadr_   u   é™„ä»¶r=   u   <p>\s*æ‚¨çš„ä½�ç½®ï¼š.*?</p>)Úflagsu#   å¦‚æžœå†…å®¹ä¸�èƒ½æ­£å¸¸æ˜¾ç¤º[^<]*c              3   ó4   K  — | ]  \  }}d |› d|› d�–— Œ y­w)z<p><a href="z">z</a></p>N© )Ú.0rt   Úfus      r/   ú	<genexpr>z$parse_detail_html.<locals>.<genexpr>¹   s#   è ø€ ÒTÁÀÀB˜l¨2¨$¨b°°°8Ô<ÑTùs   ‚ú
r^   é   c                 ó   — | d   S )Nr   rÂ   )Úxs    r/   ú<lambda>z#parse_detail_html.<locals>.<lambda>Ã   s
   € ¨A¨a©D€ rx   )Úkeyrz   r   )ÚfileNameÚfileUrl)r{   Úpublish_dater´   ÚsourceÚattachments)Úbs4r	   rn   rd   rc   ÚhasattrÚgetattrre   rµ   r}   r~   rm   rf   r   r€   rw   ro   ÚsubÚSÚjoinr`   r¤   Úmax)rp   r(   r	   r²   r{   ÚpubrÏ   r»   ÚbodyÚ	att_linksr¾   r>   r…   rt   rÄ   Úatt_pÚpsÚcandsr^   ÚtxtÚbestrs   s                        @r/   Úparse_detail_htmlrà   š   sí  ø€ Ý!Ù˜˜}Ó-€Dô=ñ �Ó Ò& B€EÙ
ˆy‹/Ò
˜R€CÙ�/Ó"Ò( b€FØ�I‰I�e 	ˆIÓ*ò S¨d¯i©i¸Ài¨iÓ.Pò SØ�I‰I�e ˆIÓ'òSØ+/¯9©9°UÀ6¨9Ó+JòSà�I‰I�e LˆIÓ1òSà59·Y±Y¸tÈ	°YÓ5Rð 	ð €DØ€IÚØ—M‘M %°�MÓ7ò 	ˆDØ�N‰NÕð	ð —‘˜s¨�Ó.ò 	ˆAØˆy¤¨¨5Ô 1´W¸QÀÈÓ5NÐ5VØØ—‘�v“Ò$ "×+Ñ+Ó-ˆAÜ�y‰yÐ^Ð`aÔbÐfpÐtuÑfuð  zMð  QRò  zRØ—J‘J T�JÓ*Ò6¨h�ØŸ,™, vÔ.‘Q´G¸CÀ³O�Ø× Ñ  ! R Ô)Ø—‘•ð	ô œ#˜d›) SÓ)ˆÜ�v‰vÐ5°r¸4ÄrÇtÁtÔLˆÜ�v‰vÐ<¸bÀ$ÓGˆÙØ—G‘GÑTÈ)ÔTÓTˆEØ˜4‘K %Ñ'×.Ñ.Ó0ˆDÙØ�]‰]˜3ÓˆØˆØò 	,ˆAØ—*‘* 4�*Ó(ˆCÜ�3‹x˜"‹}Ø—‘œc #›h¨˜]Õ+ð	,ñ Ü�u¡.Ô1°!Ñ4ˆDÜœc $›i¨Ó-ˆDàÙ$'˜˜C˜R™¨RØØØDM×N¹5¸1¸b Q°2Ó6ÓNñð ùó
 Os   ËKc                  ó(  — t        j                  «       } | j                  dt        dd¬«       | j                  dd¬«       | j                  dt        d	¬
«       | j	                  «       }ddddddœ}t        |j                  dd¬«      }t        «       }t        j                  j                  |j                  «      rDt        |j                  d¬«      D ]*  }	 |j                  t        j                  |«      d   «       Œ, t        t         |j"                  «      }t%        |«      |d<   t'        dt%        |«      › dt%        |«      › d�d¬«       |D �cg c]  }|d   |vsŒ|‘Œ }}t'        dt%        |«      › �d¬«       t)        |d«      D �]»  \  }	}t+        |d   «      }
|
sR|dxx   dz  cc<   t'        d|	› dt%        |«      › d|d   › �d¬«       |d   |j,                  k\  rt'        dd¬«        �nWŒit/        |
|d   «      }|d   s|d   |d<   |d   s|d    |d<   |d!   }t%        |«      d"k  r|d#xx   dz  cc<   |d   |d   ||d   |d   t0        t2        t5        j6                  d$d%|«      j9                  «       d d& d|d'   |d'   |d(   d)d*d+d,œ}|j;                  t        j<                  |d-¬.«      d/z   «       |j?                  «        |d0xx   dz  cc<   |	d1z  dk(  s|	t%        |«      k(  r(t'        d|	› dt%        |«      › d2|d0   › d3|d   › �d¬«       tA        jB                  tE        jF                  tH        tJ        «      «       �Œ¾ |jM                  «        t'        d4t        j<                  |d-¬.«      › �d¬«       y # t        $ r Y �Œ¸w xY wc c}w )5Nz--pagesr   u   0=å…¨é‡�)r&   ÚdefaultÚhelpz--outz/tmp/yueqing.jsonl)râ   z--max-detail-failé   )r&   râ   )r„   Ú	detail_okÚdetail_failÚemptyÚskippedr>   r   )Úencodingr¦   r„   u   åˆ—è¡¨å®Œæˆ�: u    æ�¡ (å·²æŠ“è¿‡ r˜   Tr   r(   u   å¾…æŠ“è¯¦æƒ…: rz   ræ   u   è¯¦æƒ… ú/u   : æŠ“å�–å¤±è´¥ u   å¤±è´¥è¿‡å¤š, ä¸­æ­¢r{   rÎ   r|   r´   r   rç   z<[^>]+>r“   éÈ   rÏ   rÐ   u   é€šçŸ¥å…¬å‘ŠÚotherzcrawl_yueqing_tzgg.py)r{   rÎ   r´   r¦   Ú
source_urlÚ	site_nameÚ
group_nameÚsummaryÚ	date_rankÚauthorÚcontent_sourcerÐ   ÚcategoryÚindustryÚscript_nameF)Úensure_asciirÆ   rå   é   z: ok=z fail=u   å®Œæˆ�: )'ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚopenrˆ   r�   Úosr¾   Úexistsr‚   ÚjsonÚloadsrŸ   r¯   ÚLIST_URLÚpagesr¤   r!   Ú	enumerater0   Úmax_detail_failrà   Ú	SITE_NAMEÚGROUPr}   rÔ   r`   ÚwriteÚdumpsr   r"   r#   ÚrandomÚuniformÚ	SLEEP_MINÚ	SLEEP_MAXr¥   )Úapr�   ÚstatsÚout_fpÚ	done_urlsÚliner¨   r‰   Ú	new_itemsÚidxrp   Údr´   Úrecs                 r/   Úmainr  Î   ss  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°¸€OÔDØ‡O�O�GÐ%9€OÔ:Ø‡O�OÐ'¬c¸2€OÔ>Ø�=‰=‹?€Dà a¸ÀAÐRSÑT€EÜ�$—(‘(˜C¨'Ô2€FÜ“€IÜ	‡w�w‡~�~�d—h‘hÔÜ˜Ÿ™¨GÔ4ò 	ˆDðØ—‘œdŸj™j¨Ó.¨zÑ:Õ;ð	ô œH d§j¡jÓ1€IÜ˜“^€Eˆ'�NÜ	ˆNœ3˜y›>Ð*Ð*:¼3¸y»>Ð:JÈ!Ð
LÐTXÕYà'ÖF˜¨2¨e©9¸IÒ+E’ÐF€IÐFÜ	ˆNœ3˜y›>Ð*Ð
+°4Õ8Ü˜Y¨Ó*ó '9‰ˆˆRÜ�R˜‘YÓˆÙØ�-Ó  AÑ%Ó Ü�G˜C˜5 ¤# i£.Ð!1°ÀÀEÁÀÐLÐTXÕYØ�]Ñ# t×';Ñ';Ò;ÜÐ,°DÕ9ÚØÜ˜d B u¡IÓ.ˆØ�ŠzØ˜G™ˆAˆg‰JØ�Ò Ø " 6¡
ˆAˆnÑØ�I‘,ˆÜˆw‹<˜"ÒØ�'‹N˜aÑ‹Nà�w‘ZØ˜nÑ-ØØ˜5™	Ø˜U™)Ü"ÜÜ—v‘v˜j¨#¨wÓ7×=Ñ=Ó?ÀÀÐEØØ˜‘kØ ™kØ˜]Ñ+Ø&ØØ2ñ
ˆð" 	�‰”T—Z‘Z °%Ô8¸4Ñ?Ô@Ø�‰ŒØˆkÓ˜aÑÓØ�‰8�qŠ=˜C¤3 y£>Ò1Ü�G˜C˜5 ¤# i£.Ð!1°°u¸[Ñ7IÐ6JÈ&ÐQVÐWdÑQeÐPfÐgÐosÕtÜ�
‰
”6—>‘>¤)¬YÓ7Ö8ðO'9ðP ‡L�L„NÜ	ˆH”T—Z‘Z °EÔ:Ð;Ð
<ÀDÖIøôe ò Úðüò Gs   Ã'M?ÅNÅNÍ?	NÎNÚ__main__)N)*Ú__doc__rù   r  rÿ   r}   Úsysr"   r  ÚsslÚurllib.requestr   r   Úurllib.errorr   r   Úurllib.parser   rÑ   r	   Úplaywright.sync_apir
   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moderb   r  r  r  rœ   r   r  r  ÚMAX_FAILr0   rw   rŠ   r¯   rà   r  r'   rÂ   rx   r/   ú<module>r&     sÌ   ðñ÷ 6× 5× 5× 5ß +ß ,Ý  Ý Ý /à
$ˆ#×
$Ñ
$Ó
&€Ø€Ô Ø—m‘m€Ô à#€ØÐ1Ñ1€Ø$€	Ø€Øv€àØOØ'ñ€ð
  Ñ €	ˆ9Ø€ð  ¨°Qó ó&"òJò",ò^1òh@JðF ˆzÒÙ…Fð rx   