Ë
    ¸¬ujx  ã                   óþ   — 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mZmZ ddlm	Z	m
Z
 ddlmZ ddlZdZdZ edd	d
«      Zej"                  j%                  dd«      ZdZdZddiZdZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uO   æ´ªæ¹–å¸‚-ç”Ÿæ€�çŽ¯å¢ƒ-é€šçŸ¥å…¬å‘Š çˆ¬è™« (Playwrightç¿»é¡µ + requestsè¯¦æƒ…)
é    N)ÚdatetimeÚdate)ÚThreadPoolExecutorÚas_completed)Úsync_playwrightzhttp://zwgk.honghu.gov.cnzAhttp://zwgk.honghu.gov.cn/list.shtml?column_id=38559&page_index=1iç  é   é   ÚDB_PATHz/root/search.dbu#   æ´ªæ¹–å¸‚-ç”Ÿæ€�çŽ¯å¢ƒ-é€šçŸ¥å…¬å‘Šé   z
User-AgentzMozilla/5.0é   c            
      ó2  — g } t        «       5 }|j                  j                  dddg¬«      }|j                  «       }|j	                  t
        dd¬«       t        j                  d«       t        d	t        d	z   «      D ]ò  }|j                  d
«      }|D ]_  }|j                  d«      }|rd|v r| j                  |«       Œ,|sŒ/|j                  d«      rŒAt        |z   }d|v sŒO| j                  |«       Œa t        d|› dt!        | «      › d�d¬«       |t        k  sŒŸ|j#                  d|d	z   › d�«      }	|	s|j#                  d«      }	|	r&|	j%                  «        t        j                  d«       Œò n |j'                  «        ddd«       | S # 1 sw Y   | S xY w)u%   ä½¿ç”¨Playwrightç¿»é¡µæ”¶é›†æ‰€æœ‰URLTz--no-sandboxz--disable-gpu)ÚheadlessÚargsÚdomcontentloadedi0u  )Ú
wait_untilÚtimeouté   é   z#documentsUL li aÚhrefzhonghu.gov.cnÚhttpu     ç¬¬u   é¡µ: u
    æ�¡æ€»URL©Úflushza[curpage="z"]za[curpage="2"]é   N)r   ÚchromiumÚlaunchÚnew_pageÚgotoÚCOL_URLÚtimeÚsleepÚrangeÚTOTAL_PAGESÚquery_selector_allÚget_attributeÚappendÚ
startswithÚBASEÚprintÚlenÚquery_selectorÚclickÚclose)
Úall_urlsÚpÚbrowserÚpageÚpgÚitemsÚar   Úfull_urlÚnext_btns
             ú!/root/gov_crawler/crawl_honghu.pyÚcollect_all_urls_via_playwrightr7      s~  € à€HÜ	Ó	ð ˜aØ—*‘*×#Ñ#¨T¸ÈÐ8YÐ#ÓZˆØ×ÑÓ!ˆØ�	‰	”'Ð&8À%ˆ	ÔHÜ�
‰
�1Œä˜œ;¨™?Ó+ò 	ˆBà×+Ñ+Ð,?Ó@ˆEØò 2�Ø—‘ vÓ.�Ù˜O¨tÑ3Ø—O‘O DÕ)Ú $§/¡/°&Õ"9Ü# d™{�HØ&¨(Ò2Ø Ÿ™¨Õ1ð2ô �E˜"˜˜U¤3 x£= /°Ð<ÀDÕIà”KÓØ×.Ñ.°¸RÀ¹T¸FÀ"Ð/EÓF�ÙØ#×2Ñ2Ð3CÓD�HÙØ—N‘NÔ$Ü—J‘J˜q•Máð-	ð0 	�‰Œ÷=ð> €O÷?ð> €Oús%   �B4FÃFÃFÃ"9FÄA&FÆFc                 óx  — dt        j                  |«      z   dz   }t        j                  || «      }|sy|j                  «       }d}|}|t	        | «      dz
  k  rL|dkD  rG| ||dz    dk(  r| |dz      d	v r|dz  }n| ||d
z    dk(  r|dz  }|dz  }|t	        | «      dz
  k  r|dkD  rŒG| ||d
z
   j                  «       S )u0   æ·±åº¦è®¡æ•°æ³•æ��å�–æŒ‡å®šclassçš„divå†…éƒ¨HTMLz<div[^>]*class="[^"]*z[^"]*"[^>]*>Ú r   r   r   r   z<div)ú ú>ú
ú	úr   z</div>)ÚreÚescapeÚsearchÚendr)   Ústrip)ÚhtmlÚ
class_nameÚpatternÚmÚstartÚdepthÚis          r6   Úextract_content_by_depthrK   :   sß   € ð '¬¯©°:Ó)>Ñ>ÀÑP€GÜ
�	‰	�'˜4Ó €AÙØØ�E‰E‹G€EØ€EØ€AØ
Œc�$‹i˜!‰mÒ
 ¨¢	Ø��!�A‘#ˆ;˜&Ò  T¨!¨A©#¡YÐ2NÑ%NØ�Q‰J‰EØ�!�A�a‘Cˆ[˜HÒ$Ø�Q‰JˆEØ	ˆQ‰ˆð Œc�$‹i˜!‰mÒ
 ¨£	ð ��a˜‘cˆ?× Ñ Ó"Ð"ó    c           	      ó¸  — t        d«      D �]•  }	 t        j                  | dt        ¬«      }d|_        |j
                  dk7  s|j                  st        j                  d«       ŒY|j                  }d}t        j                  d|«      }|r|j                  d	«      j                  «       }|s7t        j                  d
|«      }|r|j                  d	«      j                  «       }dD ]1  }|j                  |«      sŒ|d t        |«        j                  «       }Œ3 t        |d«      }|r>t        j                   dd|«      }t        j                   dd|«      }|j                  «       }|st        |d«      }|st        |d«      }|sFt        j                  d|t        j"                  «      }|r|j                  d	«      j                  «       }d}t        j                  d|«      }|r|j                  d	«      }|s)t        j                  d|«      }|r|j                  d	«      }|s)t        j                  d|«      }|r|j                  d	«      }|sPt        j                  d| «      }|r8d|j                  d	«      › d|j                  d«      › d|j                  d«      › �}| |||fc S  | d d d fS # t$        $ r%}	|dk  rt        j                  d«       Y d }	~	�ŒÈd }	~	ww xY w)Né   é   )r   Úheaderszutf-8éÈ   r   r9   z#<h1 class="zw-box-title">(.*?)</h1>r   z<title>(.*?)</title>)u   -æ´ªæ¹–å¸‚äººæ°‘æ”¿åºœu   _æ´ªæ¹–å¸‚äººæ°‘æ”¿åºœu   --æ”¿åºœä¿¡æ�¯å…¬å¼€zzw-center-txtz
<!--.*?-->z<div[^>]*>\s*</div>\s*z
bt-contentÚcontentz1<div class="TRS_Editor"[^>]*>(.*?)</div>\s*</div>z(zw-box-infos[^>]*>.*?(\d{4}-\d{2}-\d{2})u)   å�‘å¸ƒæ—¶é—´[ï¼š:]?\s*(\d{4}-\d{2}-\d{2})z(\d{4}-\d{2}-\d{2})z/t(\d{2})(\d{2})(\d{2})\d*/Ú20ú-)r!   ÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextr   r    r?   rA   ÚgrouprC   Úendswithr)   rK   ÚsubÚDOTALLÚ	Exception)
ÚurlÚattÚrrD   ÚtitlerG   ÚsuffixrR   Úpub_dateÚes
             r6   Úprocess_detailrg   M   s„  € Ü�Q‹xó >ˆð=	Ü—‘˜S¨"´gÔ>ˆAØ ˆAŒJØ�}‰} Ò#¨1¯6ª6Ü—
‘
˜1”ØØ—6‘6ˆDð ˆEÜ—	‘	Ð@À$ÓGˆAÙØŸ™ ›
×(Ñ(Ó*�ÙÜ—I‘IÐ5°tÓ<�ÙØŸG™G A›J×,Ñ,Ó.�Eàfò 9�Ø—>‘> &Õ)Ø! -¤C¨£K <Ð0×6Ñ6Ó8‘Eð9ô
 /¨t°_ÓEˆGáÜŸ&™& °°GÓ<�ÜŸ&™&Ð!:¸BÀÓH�Ø!Ÿ-™-›/�ÙÜ2°4¸ÓF�ÙÜ2°4¸ÓC�ÙÜ—I‘IÐRÐTXÔZ\×ZcÑZcÓd�ÙØŸg™g a›j×.Ñ.Ó0�Gð ˆHÜ—	‘	ÐEÀtÓLˆAÙØŸ7™7 1›:�Ùä—I‘IÐJÈDÓQ�ÙØ Ÿw™w q›z�HÙÜ—I‘IÐ4°dÓ;�ÙØ Ÿw™w q›z�HÙä—I‘IÐ<¸cÓB�ÙØ!# A§G¡G¨A£J <¨q°·±¸³°¸A¸a¿g¹gÀa»j¸\ÐJ�Hà˜ ¨Ð2Ò2ðw>ð~ ��t˜TÐ"Ð"øô ò 	Ø�QŠwÜ—
‘
˜1”ÿùð	ús&   ‘AJ+Á%BJ+Ã:F'J+Ê+	KÊ4KËKc                  ó  — t         j                  j                  dd«      } t        dt        › d| › d�d¬«       t        dd¬«       t        «       }t        d	t        |«      › d
�d¬«       |st        dd¬«       y t        j                  t        «      }|j                  «       }d}d}t        t        ¬«      5 }|D �ci c]  }|j                  t        |«      |“Œ }}t        |«      D ]Ñ  }	|	j!                  «       \  }}
}}|dz  }|dz  dk(  rt        d|› dt        |«      › d�d¬«       |
€ŒE|s|
}t        d|
d d › �d¬«       |sd}	 t#        j$                  |d d «      }|t&        k  rŒƒ	 	 |j)                  dt        |
|||d d |df«       |j*                  dkD  r|dz  }|dz  dk(  sŒÂ|j/                  «        ŒÓ 	 d d d «       |j/                  «        |j)                  dt        f«       |j1                  «       \  }}}|j3                  «        t        dd¬«       t        d|› d
�d¬«       t        d|› d|› d|› d �d¬«       y c c}w #  Y ŒãxY w# t,        $ r}t        d|› �d¬«       Y d }~ŒÏd }~ww xY w# 1 sw Y   Œ¼xY w)!NÚMODEÚfullz=== z (mode=z) ===Tr   u   Playwrightæ”¶é›†URL...u
     æ€»URL: u   æ�¡u     æ— æ•°æ�®r   )Úmax_workersr   é   u	     è¯¦æƒ… ú/z...u     [WARN] æ— æ­£æ–‡: é(   z
2026-01-01é
   z‚INSERT OR IGNORE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, date_rank) VALUES (?, ?, ?, ?, ?, ?, ?)z  [DB_ERROR] é2   zTSELECT COUNT(*), MIN(publish_date), MAX(publish_date) FROM gov_raw WHERE site_name=?u   
=== å®Œæˆ� ===u
     æ–°å¢ž: u
     ç´¯è®¡: u   æ�¡ (z ~ ú))ÚosÚenvironrV   r(   Ú	SITE_NAMEr7   r)   Úsqlite3Úconnectr
   Úcursorr   ÚMAX_WORKERSÚsubmitrg   r   Úresultr   ÚfromisoformatÚCUTOFF_DATEÚexecuteÚrowcountr_   ÚcommitÚfetchoner,   )ÚmodeÚurlsÚconnrw   Ú	total_newÚdoneÚexecutorr`   Úfut_mapÚfutrc   rR   re   Údrf   ÚcntÚmin_dÚmax_ds                     r6   Úmainr�   �   s‰  € Ü�:‰:�>‰>˜& &Ó)€DÜ	ˆD”�˜7 4 &¨Ð
.°dÕ;ä	Ð
"¨$Õ/Ü*Ó,€DÜ	ˆJ”s˜4“y�k Ð
%¨TÕ2ÙÜˆm 4Õ(Øä�?‰?œ7Ó#€DØ�[‰[‹]€FØ€IØ€Dä	¬Ô	4ð ¸ØHLÖMÀ�8—?‘?¤>°3Ó7¸Ñ<ÐMˆÐMÜ Ó(ò 	ˆCØ,/¯J©J«LÑ)ˆC�˜ Ø�A‰IˆDØ�b‰y˜AŠ~Ü˜	 $  q¬¨T«¨°3Ð7¸tÕDØˆ}ØÙØ�ÜÐ,¨U°3°B¨Z¨LÐ9ÀÕFÙØ'�ðÜ×&Ñ& x°° }Ó5�Ø”{’?Øð #ð7Ø—‘ð   hÜ  s¨G°X¸c¸r°]ÀGÈQÐOôQà—?‘? QÒ&Ø ‘N�Ið �b‰y˜A‹~Ø—‘•ñ5	÷ð: 	‡K�K„Mà
‡N�NÐiÔluÐkwÔxØŸ™Ó)Ñ€Cˆ�Ø‡J�J„LÜ	Ð TÕ*Ü	ˆJ�y�k Ð
%¨TÕ2Ü	ˆJ�s�e˜5   s¨5¨'°Ð
3¸4Ö@ùòG Nøð"Ùûô ò 7Ü˜ a SÐ)°×6Ò6ûð7ú÷3ð úsg   Â7I7Â<IÃA-I7Å!I
Å)I7Å,4IÆ I7Æ)I7ÉI7É
IÉI7É	I4ÉI/É*I7É/I4É4I7É7J Ú__main__)Ú__doc__Újsonr?   r   rr   ru   r   r   Úconcurrent.futuresr   r   Úplaywright.sync_apir   rU   r'   r   r|   rs   rV   r
   rt   rx   rW   r"   r7   rK   rg   r�   Ú__name__© rL   r6   ú<module>r•      s’   ðñç "× "Ó "ß #ß ?Ý /Û à"€Ø
M€Ù�4˜˜BÓ€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø1€	Ø€Ø˜Ð
'€à€ò"òJ#ò&@#òF4Aðn ˆzÒÙ…Fð rL   