Ë
    B•ƒjC,  ã                   ó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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	Zd
ZdZddlmZ ddlmZ d„ Zd„ Zd„ Zdd„Zd„ Ze dk(  r e«        yy)u&  
crawl_lj_hpgs.py - åº�æ±ŸåŽ¿äººæ°‘æ”¿åºœ-å»ºè®¾é¡¹ç›®çŽ¯è¯„æ–‡ä»¶ï¼ˆæŠ¥å‘Šä¹¦ã€�æŠ¥å‘Šè¡¨ï¼‰å®¡æ‰¹ (lj.gov.cn)
ç«™ç‚¹: å�ˆè‚¥æ”¿åŠ¡å…¬å¼€ç«™ç¾¤ (hefeizwgk) + WAF __jsl_clearance 521 æŒ‘æˆ˜ -> å¿…é¡» playwright è¿‡ç›¾
åˆ—è¡¨: GET /mayor/site/label/8888?labelName=publicInfoList&siteId=6784341&organId=19081
      &catId=7038868&pageSize=20&pageIndex={N}&isDate=true&dateFormat=yyyy-MM-dd
      &length=50&type=4&action=list  (è¿”å›ž HTML ç‰‡æ®µ, pageCount=26 é¡µ x20 = ~520 æ�¡)
åˆ—è¡¨æ�¡ç›®: div.xxgk_navli > ul > li.mc > a (æ ‡é¢˜+href) + li.rq (æ—¥æœŸ) + li.yh (ç´¢å¼•å�·)
è¯¦æƒ…: /public/19081/{id}.html
  æ ‡é¢˜: meta ArticleTitle | æ—¥æœŸ: meta PubDate (å�–å‰�10) | æ�¥æº�: meta ContentSource
  æ­£æ–‡: div#zoom.j-fontContent
å†…å®¹: çŽ¯è¯„å�—ç�†/æ‹Ÿå®¡æ‰¹/æ‰¹å¤�å…¬ç¤º (åº�æ±ŸåŽ¿ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€)
é    N)Úpush_to_searchdbu.   åº�æ±ŸåŽ¿äººæ°‘æ”¿åºœ-å»ºè®¾é¡¹ç›®çŽ¯è¯„å®¡æ‰¹zhttps://www.lj.gov.cnÚ6784341Ú19081Ú7038868é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z
2023-08-17)Úasync_playwright)ÚStealthc                 óR   — t         › dt        › dt        › dt        › dt        › d| › d�S )Nz7/mayor/site/label/8888?labelName=publicInfoList&siteId=z	&organId=z&catId=z
&pageSize=z&pageIndex=z?&isDate=true&dateFormat=yyyy-MM-dd&length=50&type=4&action=list)ÚBASEÚSITE_IDÚORGAN_IDÚCAT_IDÚ	PAGE_SIZE)Úpage_idxs    ú"/root/gov_crawler/crawl_lj_hpgs.pyÚlist_apir   !   s8   € ÜˆfÐKÌGÈ9Øœ�z ¬¨°
¼9¸+À[ÐQYÐPZØMðOð Pó    c           	      ó¶  — g }t        j                  d| t         j                  «      D �]-  }t        j                  d|t         j                  «      }t        j                  d|«      }t        j                  d|«      }|sŒX|j	                  d«      }t        j
                  dd|j	                  d«      «      j                  «       }t        j
                  d	d
|«      j                  «       }|r|j                  d«      sŒÖ|j                  |||r|j	                  d«      j                  «       nd
|r|j	                  d«      j                  «       nd
dœ«       �Œ0 |S )u    è§£æž� API è¿”å›žçš„ HTML ç‰‡æ®µz"<div class="xxgk_navli">(.*?)</ul>z<<li class="mc">\s*<a[^>]*href="([^"]+)"[^>]*>\s*(.*?)\s*</a>z<li class="rq">([^<]+)</li>z<li class="yh">([^<]+)</li>é   z\s+ú é   u   ^[â€¢Â·]\s*Ú Úhttp)ÚtitleÚurlÚdateÚindex_no)	ÚreÚfindallÚSÚsearchÚgroupÚsubÚstripÚ
startswithÚappend)ÚhtmlÚitemsÚblockÚm_titleÚm_dateÚm_idxÚhrefr   s           r   Ú
parse_listr.   '   s  € à€Eä—‘ÐAÀ4ÌÏÉÓNó ˆÜ—)‘)Ð[Ð]bÔdf×dhÑdhÓiˆÜ—‘Ð9¸5ÓAˆÜ—	‘	Ð8¸%Ó@ˆÙØØ�}‰}˜QÓˆÜ—‘�v˜s G§M¡M°!Ó$4Ó5×;Ñ;Ó=ˆÜ—‘�~ r¨5Ó1×7Ñ7Ó9ˆÙ˜DŸO™O¨FÔ3ØØ�‰ØØÙ/5�F—L‘L “O×)Ñ)Ô+¸2Ù27˜Ÿ™ A›×,Ñ,Ô.¸Rñ	
ö 	ðð" €Lr   c                 óÜ  — d}t        j                  d| «      }|st        j                  d| «      }|r|j                  d«      j                  «       }d}t        j                  d| «      }|st        j                  d| «      }|r"|j                  d«      j                  «       dd }d}t        j                  d	| «      }|st        j                  d
| «      }|r|j                  d«      j                  «       }d}t        j                  d| «      }|rw| |j	                  «       d }d}d}	t        j
                  d|«      D ]G  }
|
j                  d«      j                  d«      r |dz  }|dk(  sŒ.|d|
j                  «        } n|dz  }ŒI |syt        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }d„ } ||d«      } ||d«      } ||d«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|«      }dD ]  }|j                  |«      }	|	dkD  sŒ|d|	 }Œ  d„ }t        j                  d||«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|«      }|j                  «       }||||dœS )u'   è¯¦æƒ…é¡µè§£æž�: meta + div#zoom æ­£æ–‡r   z'name="ArticleTitle"\s+content="([^"]+)"z!ArticleTitle"\s+content="([^"]+)"r   z"name="PubDate"\s+content="([^"]+)"zPubDate"\s+content="([^"]+)"Né
   z(name="ContentSource"\s+content="([^"]+)"z"ContentSource"\s+content="([^"]+)"z<div[^>]*id="zoom"[^>]*>r   ú<div\b[^>]*>|</div>ú</div>z<script.*?</script>)Úflagsz<style.*?</style>c                 ó˜  — | }	 t        j                  ||«      }|s	 |S ||j                  «       d  }d}|j                  «       }t        j                  d|«      D ]U  }|j	                  d«      j                  d«      r.|dz  }|dk(  sŒ.|j                  «       |j                  «       z   } n|dz  }ŒW |d |j                  «        ||d  z   }ŒÈ)Nr   r1   r   r2   )r   r!   ÚendÚfinditerr"   r%   Ústart)r'   ÚpatÚoutÚmÚsegÚdepthr5   Úmms           r   Ústrip_blockz!parse_detail.<locals>.strip_blockn   sÐ   € ØˆØÜ—	‘	˜#˜sÓ#ˆAÙØð ˆ
ð �a—e‘e“g�h�-ˆCØˆEØ—%‘%“'ˆCÜ—k‘kÐ"8¸#Ó>ò �Ø—8‘8˜A“;×)Ñ)¨(Ô3Ø˜Q‘J�EØ “zØŸe™e›g¨¯©«Ñ0˜Ùà˜Q‘J‘Eðð �j�q—w‘w“y�/ C¨¨ IÑ-ˆCð r   z&<div[^>]*class="[^"]*wzewm[^"]*"[^>]*>z<div[^>]*id="relInfo"[^>]*>z*<div[^>]*class="[^"]*fxd_close[^"]*"[^>]*>u   <!--.*?äºŒç»´ç �.*?-->z%<div[^>]*class="clear"[^>]*>\s*</div>z
<p>\s*</p>)u   ä¸­å¤®æ”¿åºœç½‘ç«™u   çœ�çº§æ”¿åºœç½‘ç«™u   å¸‚çº§æ”¿åºœç½‘ç«™u   å…³äºŽæˆ‘ä»¬u   ä¸»åŠžå�•ä½�ï¼šu   ç½‘ç«™æ ‡è¯†ç �u   æœ¬ç½‘ç«™æ”¯æŒ�IPv6u   æ”¿åŠ¡æ–°åª’ä½“çŸ©é˜µc                 ó’   — | j                  d«      }|j                  d«      rd|z   }n|j                  d«      r	t        |z   }d|› d�S )Nr   z//zhttps:ú/z	<a href="ú")r"   r%   r   )Úmatchr-   s     r   Úabs_urlzparse_detail.<locals>.abs_urlŽ   sH   € Ø�{‰{˜1‹~ˆØ�?‰?˜4Ô Ø˜d‘?‰DØ�_‰_˜SÔ!Ü˜$‘;ˆDØ˜4˜& Ð"Ð"r   z<a[^>]*href="([^"]+)"zG<div[^>]*class="[^"]*(share|weixin|ewm|print|scan)[^"]*"[^>]*>.*?</div>)r   Úpub_dateÚsourceÚbody)r   r!   r"   r$   r5   r6   r%   r7   r#   r    Úfind)r'   r   r:   rD   rE   rF   Úm_openr;   r<   Úir=   r>   ÚkwrC   s                 r   Úparse_detailrK   ?   s«  € à€EÜ
�	‰	Ð<¸dÓC€AÙÜ�I‰IÐ:¸DÓAˆÙØ—‘˜“
× Ñ Ó"ˆà€HÜ
�	‰	Ð7¸Ó>€AÙÜ�I‰IÐ5°tÓ<ˆÙØ—7‘7˜1“:×#Ñ#Ó% c rÐ*ˆà€FÜ
�	‰	Ð=¸tÓD€AÙÜ�I‰IÐ;¸TÓBˆÙØ—‘˜“×!Ñ!Ó#ˆð €DÜ�Y‰YÐ2°DÓ9€FÙØ�6—:‘:“<�=Ð!ˆØˆØˆÜ—+‘+Ð4°cÓ:ò 	ˆBØ�x‰x˜‹{×%Ñ% hÔ/Ø˜‘
�Ø˜A“:Ø˜{ §¡£
Ð+�DÙà˜‘
‘ð	ñ Øô �6‰6Ð(¨"¨d¼"¿$¹$Ô?€DÜ�6‰6Ð&¨¨D¼¿¹Ô=€Dòñ( �tÐFÓG€DÙ�tÐ;Ó<€DÙ�tÐJÓK€DÜ�6‰6Ð+¨R°¼R¿T¹TÔB€DÜ�6‰6Ð:¸BÀÌBÏDÉDÔQ€DÜ�6‰6�-  TÓ*€Dð wò ˆØ�I‰I�b‹MˆØˆq‹5Ø˜˜�8‰Dðò
#ô �6‰6Ð*¨G°TÓ:€Dä�6‰6Ð\Ð^`ÐbfÔnp×nrÑnrÔs€Dä�6‰6�-  TÓ*€DØ�:‰:‹<€Dà¨¸FÈDÑQÐQr   c              ƒ   óŠ
  K  — t        «       4 ƒd {  –—† }|j                  j                  dddg¬«      ƒ d {  –—† }|j                  t        ddddœ¬«      ƒ d {  –—† }t        «       }|j                  |«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }d	}t        d
«      D ]†  }	 |j                  t        › dt        › d�dd¬«      ƒ d {  –—† }|j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† }	t        d|dz   › d|r|j                  nd› d|	› �«       d} n |s*|j#                  «       ƒ d {  –—†  	 d d d «      ƒd {  –—†  yg }d	}| }t        d| dz   «      D �]  }t%        |«      }	 |j'                  d|«      ƒ d {  –—† }t)        |«      }t        d|› dt+        |«      › d�«       |s|dkD  r n»ŒZt-        j.                  d|«      }|r$t1        |t3        |j5                  d«      «      «      }|D ](  }|d    r|d    t6        k  rd} n|j9                  |«       Œ* |rt        d!|› d"t6        › d#�«        n7|j                  t;        j<                  d$d%«      «      ƒ d {  –—†  ||k\  s�Œ n t        d&t+        |«      › d'|› �«       |s*|j#                  «       ƒ d {  –—†  	 d d d «      ƒd {  –—†  yg }t?        |d«      D �]  \  }}|d(   }	 |j'                  d|«      ƒ d {  –—† }tC        |«      }|r?|d0   r:|d,   xs |d,   }	|d0   }|d1   xs |d    }|j9                  t@        |	||||d/œ«       nMt        d)|› d*t+        |«      › d2|d,   d d3 › d4�«       |j9                  t@        |d,   |d    d-|d,   › d.�||d/œ«       |d5z  dk(  r$t        d)|› d*t+        |«      › d6|d,   d d7 › d4�«       |j                  t;        j<                  d8d9«      «      ƒ d {  –—†  �Œ |j#                  «       ƒ d {  –—†  tE        |d:¬;«      }|cd d d «      ƒd {  –—†  S 7 �Œ7 �Œù7 �ŒÙ7 �Œ¹7 �Œ¤7 �Œl7 �ŒV7 �ŒA# t         $ r9}
t        d|dz   › d|
› �«       |j                  d«      ƒ d {  –—†7   Y d }
~
�ŒÛd }
~
ww xY w7 �ŒE7 �Œ77 �Œú# t         $ r}
t        d|› d|
› �«       Y d }
~
�ŒBd }
~
ww xY w7 �ŒE7 �Œ
7 �Œü7 �ŒÉ# t         $ rQ}
t        d)|› d*t+        |«      › d+|
› �«       |j9                  t@        |d,   |d    d-|d,   › d.�||d/œ«       Y d }
~
�ŒCd }
~
ww xY w7 �Œ77 �Œ7 �Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)<NTz---disable-blink-features=AutomationControlledz--no-sandbox)ÚheadlessÚargsiV  i„  )ÚwidthÚheight)Ú
user_agentÚignore_https_errorsÚviewportFé   z"/public/column/19081?type=4&catId=z&action=listÚdomcontentloadedi`ê  )Ú
wait_untilÚtimeouti@  z[LOAD] attempt=r   z status=zN/Az title=z[LOAD-ERR] attempt=z: iˆ  r   z—async (url) => {
                    const r = await fetch(url, {credentials: 'include'});
                    return await r.text();
                }z  [API-ERR] page=u     ç¬¬u   é¡µ: u    æ�¡zpageCount:(\d+)r   u     [CUTOFF] ç¬¬u   é¡µå‡ºçŽ° < u    æ—¥æœŸ, å�œæ­¢ç¿»é¡µiÐ  i   u     [LIST] å…±æ”¶é›† u    æ�¡, total_pages=r   z  [r@   z] [ERR] r   z<p>z</p>)Ú	site_namer   rD   ÚcontentÚ
source_urlr   rF   rD   z] [SKIP-EMPTY] é2   z...r0   u
   ] æœ€æ–°: é<   iÜ  i¸  Úlj_hpgs)Úbatch_label)#r   ÚchromiumÚlaunchÚnew_contextÚUAr	   Úapply_stealth_asyncÚnew_pageÚrangeÚgotor   r   Úwait_for_timeoutr   ÚprintÚstatusÚ	ExceptionÚcloser   Úevaluater.   Úlenr   r!   ÚmaxÚintr"   ÚCUTOFFr&   ÚrandomÚrandintÚ	enumerateÚ	SITE_NAMErK   r   )ÚpagesÚpÚbrowserÚctxÚstealthÚpageÚokÚattemptÚrespr   ÚeÚ	items_allÚ
cutoff_hitÚtotal_pagesÚpgÚapir'   r(   Úm_pcÚitÚrecordsrI   r   ÚdrY   rD   Únew_cs                              r   Ú	run_asyncr‰   Ÿ   sè  è ø€ ÜÓ!÷ rð r QØŸ
™
×)Ñ)°4Ø;Øð?
Ð)ó ÷ ˆð ×'Ñ'ÜØ $Ø#¨sÑ3ð (ó 
÷ 
ˆô
 “)ˆØ×)Ñ)¨#Ó.×.Ð.Ø—\‘\“^×#ˆð ˆÜ˜Q“xò 
	2ˆGð	2Ø!ŸY™Y¬$¨Ð/QÔRXÐQYÐYeÐ'fð  tFð  PU˜Yó  V÷  V�Ø×+Ñ+¨DÓ1×1Ð1Ø"Ÿj™j›l×*�Ü˜¨°©	 {°(É$¸4¿;º;ÐTYÐ:ZÐZaÐbgÐahÐiÔjØ�Ùð
	2ñ Ø—-‘-“/×!Ð!Ø÷;r÷ rð rð> ˆ	Øˆ
Øˆä˜˜5 1™9Ó%ó !	ˆBÜ˜2“,ˆCðØ!Ÿ]™]ð ,ð ó÷ �ô ˜tÓ$ˆEÜ�E˜"˜˜U¤3 u£: ,¨dÐ3Ô4Ùà˜’6ÙØä—9‘9Ð/°Ó6ˆDÙÜ! +¬s°4·:±:¸a³=Ó/AÓB�Øò %�à�f’: " V¡*¬vÒ"5Ø!%�JÙØ× Ñ  Õ$ð%ñ Ü˜ r d¨,´v°hÐ>SÐTÔUÙØ×'Ñ'¬¯©°t¸TÓ(BÓC×CÐCà�[Ô ÙðC!	ôF 	Ð#¤C¨	£NÐ#3Ð3EÀkÀ]ÐSÔTÙØ—-‘-“/×!Ð!Ø÷Sr÷ rð rðX ˆÜ˜y¨!Ó,ó 	D‰EˆAˆrØ�U‘)ˆCðØ!Ÿ]™]ð ,ð ó÷ �ô ˜TÓ"ˆAÙ�Q�v’YØ˜'™
Ò1 b¨¡k�Ø˜F™)�Ø˜Z™=Ò6¨B¨v©J�Ø—‘Ü!*°UÈØ&°cÀ#ñ õ ô
 ˜˜A˜3˜a¤ I£Ð/¨¸rÀ'¹{È3ÈBÐ?OÐ>PÐPSÐTÔUØ—‘Ü!*°R¸±[ÈbÐQWÉjØ!$ R¨¡[ M°Ð6ÀcÐRUñ ô ð �2‰v˜Š{Ü˜˜A˜3˜a¤ I£Ð/¨z¸"¸W¹+ÀcÀrÐ:JÐ9KÈ3ÐOÔPØ×'Ñ'¬¯©°t¸TÓ(BÓC×CÒCð?	DðB �m‰m‹o×Ðô ! °iÔ@ˆØ÷er÷ rò rùðùð
ùð 	/ùØ#ùð VùØ1ùØ*úô ò 2ÜÐ+¨G°A©I¨;°b¸¸Ð<Ô=Ø×+Ñ+¨DÓ1×1×1ûð2úð "ùð9rùðLúô ò ÜÐ)¨"¨¨R°¨sÐ3Ô4Ýûðúð. Dùð "ùðQrùð`úô ò Ü˜˜A˜3˜a¤ I£Ð/¨x¸°sÐ;Ô<Ø—‘Ü!*°R¸±[ÈbÐQWÉjØ!$ R¨¡[ M°Ð6ÀcÐRUñ ô õ ûðúð0 Dùàùð]rù÷ r÷ rñ rüsû  ‚U‘P.’U•#T.¸P1¹"T.ÁP4Á"T.Á>P7Á?T.ÂP:ÂT.Â,%QÃP=ÃQÃ*Q Ã+QÄQÄ+QÄ.T.ÅRÅT.ÅUÅRÅUÅ$T.ÆRÆRÆRÆCT.É7R<É8	T.Ê2T.Ê5R?Ê6T.Ê;UËSËUËT.Ë'SË<SË=SÌC-T.Ï.T%Ï/T.Ð	T(Ð
T.ÐUÐ(T+Ð)UÐ1T.Ð4T.Ð7T.Ð:T.Ð=QÑ QÑQÑ	RÑ(RÑ7Q:
Ñ8RÑ=T.ÒRÒT.ÒUÒRÒ	R9ÒR4Ò.T.Ò4R9Ò9T.Ò?T.ÓUÓSÓ	T"ÓATÔT.ÔT"Ô"T.Ô(T.Ô+UÔ.U Ô4T7Ô5U Ô<Uc                  óŽ  — d} t        t        j                  «      D ]y  \  }}|j                  d«      rt	        |j                  d«      d   «      } Œ5|dk(  sŒ;|dz   t        t        j                  «      k  sŒ[t	        t        j                  |dz      «      } Œ{ t        j                  t        | ¬«      «      }t        d|› d�«       y )	Né   z--pages=ú=r   z--pages)ru   zDone: z records)rs   ÚsysÚargvr%   ro   Úsplitrm   ÚasyncioÚrunr‰   rh   )ru   rI   ÚaÚns       r   Úmainr”     s›   € Ø€EÜœ#Ÿ(™(Ó#ò )‰ˆˆ1Ø�<‰<˜
Ô#Ü˜Ÿ™ › Q™Ó(‰EØ�)‹^  A¡¬¬C¯H©H«Ó 5ÜœŸ™  Q¡™Ó(‰Eð	)ô
 	�‰”I EÔ*Ó+€AÜ	ˆF�1�#�XÐ
Õr   Ú__main__)r‹   )!Ú__doc__r�   Úosr   r�   Újsonrq   ÚtimeÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rt   r   r   r   r   r   rb   rp   Úplaywright.async_apir   Úplaywright_stealthr	   r   r.   rK   r‰   r”   Ú__name__© r   r   ú<module>r¤      s¨   ðñ÷ 0× /× /Ó /Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à<€	Ø€Ø
€Ø€Ø	€Ø€	Øv€à	€å 1Ý &òPòò0]Ró@sòl ð ˆzÒÙ…Fð r   