Ë
    Xÿƒj (  ã                   ó  — 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 dZdZdZdZ e
j$                  «        ed	¬
«      z
  j'                  d«      ZdZdZdZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)u¥  crawl_wenjiang_sthj.py - æˆ�éƒ½å¸‚æ¸©æ±ŸåŒº-ç”Ÿæ€�çŽ¯å¢ƒ
ç«™ç‚¹: https://www.wenjiang.gov.cn (ç‘žæ•°4ä»£: 412 + $_ts; è¯�ä¹¦è¿‡æœŸé¡» ignore_https_errors)
åˆ—è¡¨: /gkml/sthj/detail-list/column-index-1.shtml?page=N (é�™æ€� ul.list>li.myflex)
  onclick="window.open('/gkml/sthj/{id}.shtml')" æ��å�–è¯¦æƒ…é“¾æŽ¥
  å­—æ®µ: .cont æ ‡é¢˜ / .unit éƒ¨é—¨ / .date æ—¥æœŸ
åˆ†é¡µ: column-index-{N}.shtml (è·¯å¾„å¼�, å�Œ longquanyi)
é    N)ÚdatetimeÚ	timedelta)Úsync_playwrightu   æˆ�éƒ½å¸‚æ¸©æ±ŸåŒº-ç”Ÿæ€�çŽ¯å¢ƒzhttps://www.wenjiang.gov.cnzIhttps://www.wenjiang.gov.cn/gkml/sthj/detail-list/column-index-{pn}.shtmlé   iG  )Údaysz%Y-%m-%dzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36z/tmp/wenjiang_sthj.jsonlz/root/search.dbz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chromezcrawl_wenjiang_sthj.pyc                  óØ   — t         j                  dd  D ]O  } | j                  d«      rt        | j	                  d«      d   «      c S | j                  «       sŒDt        | «      c S  t        S )Né   z--pages=ú=)ÚsysÚargvÚ
startswithÚintÚsplitÚisdigitÚMAX_PAGES_DEFAULT)Úas    ú(/root/gov_crawler/crawl_wenjiang_sthj.pyÚparse_pages_argr      sX   € Ü�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMð	ô
 Ðó    c                 ó”   — t        j                  dd| xs d«      j                  «       j                  dd«      j                  dd«      S )Nu   ^[â€¢Â·Â·\s]+Ú u   â€‹u   ï»¿)ÚreÚsubÚstripÚreplace)Úts    r   Úclean_titler   $   s?   € Ü�6‰6Ð" B¨ª¨RÓ0×6Ñ6Ó8×@Ñ@ÀÈ2ÓN×VÑVÐW_ÐacÓdÐdr   c                 ój  — g }| j                  d«      }|D �]  }|j                  d«      xs d}t        j                  d|«      }|st        j                  d|«      }|sŒJ|j	                  d«      }|j                  d«      r
t        |z   }n|j                  d«      st        dz   |z   }|j                  d	«      }|j                  d
«      }|r|j                  «       j                  «       nd}	|r|j                  «       j                  «       nd}
|	sŒü|j                  t        |	«      ||
dœ«       �Œ |S )u'   ä»Ž li.myflex æ��å�– (title, url, date)zul.list > li.myflex, li.myflexÚonclickr   zwindow\.open\('([^']+)'zwindow\.open\(\"([^\"]+)\"r	   ú/Úhttpz.contz.date)ÚtitleÚurlÚdate)Úquery_selector_allÚget_attributer   ÚsearchÚgroupr   ÚBASEÚquery_selectorÚ
inner_textr   Úappendr   )ÚpageÚitemsÚlisÚlir   ÚmÚhrefÚcontÚdate_elr"   r$   s              r   Úextract_itemsr5   (   s  € à€EØ
×
!Ñ
!Ð"BÓ
C€CØó SˆØ×"Ñ" 9Ó-Ò3°ˆÜ�I‰IÐ0°'Ó:ˆÙÜ—	‘	Ð7¸ÓAˆAÙØØ�w‰w�q‹zˆØ�?‰?˜3ÔÜ˜$‘;‰DØ—‘ Ô(Ü˜#‘: Ñ$ˆDØ× Ñ  Ó)ˆØ×#Ñ# GÓ,ˆÙ-1�—‘Ó!×'Ñ'Ô)°rˆÙ/6ˆw×!Ñ!Ó#×)Ñ)Ô+¸BˆÚØ�L‰L¤;¨uÓ#5¸dÈDÑQÖRð#Sð$ €Lr   c                 óP  — | j                   dk(  r&t        | «      }t        j                  dd„ |«      }|gS | j                   dv ro| j	                  d«      rg S | j                  dd¬«      }|rt        j                  d|«      rg S t        j                  d	dt        | «      «      j                  «       gS | j                   d
k(  rdg }| j                  g d¢d¬«      D ]  }|j                  t        |«      «       Œ |s*| j                  dd¬«      }|r|j                  d|› d�«       |S g S )uV   é€’å½’æ��å�– HTML å�— (ä¿�æŒ�é¡ºåº�): p/pre ä¿�ç•™å†…éƒ¨HTML, table ä¿�ç•™, div é€’å½’Útablezhref=["\'](/[^"\']+)["\']c                 ó8   — dt         ›| j                  d«      ›d�S )Nzhref="r	   ú")r)   r(   )Úmms    r   ú<lambda>zextract_block.<locals>.<lambda>E   s   � ÍtÐUW×U]ÑU]Ð^_ÕU`Ð>a€ r   )ÚpÚpreú T©r   ud   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|\[çº é”™\]|æµ�è§ˆæ¬¡æ•°|å­—å�·|åˆ†äº«åˆ°|æ‰«ä¸€æ‰«|ç›¸å…³é™„ä»¶)z\s+Údiv©r<   r=   r7   r@   F©Ú	recursivez<p>z</p>)ÚnameÚstrr   r   Úfind_parentÚget_textÚmatchr   Úfind_allÚextendÚextract_blockr,   )ÚelÚtblÚtxtÚblocksÚcs        r   rK   rK   A   s  € à	‡w�w�'ÒÜ�"‹gˆÜ�f‰fÐ1Ñ3aÐcfÓgˆØˆuˆØ	‡w�w�,ÑØ�>‰>˜'Ô"ØˆIØ�k‰k˜# TˆkÓ*ˆÙ”b—h‘hð   Gð  ILô  MØˆIÜ—‘�v˜s¤C¨£GÓ,×2Ñ2Ó4Ð5Ð5Ø	‡w�w�%ÒØˆØ—‘Ò9ÀU�ÓKò 	,ˆAØ�M‰Mœ-¨Ó*Õ+ð	,áØ—+‘+˜c¨�+Ó.ˆCÙØ—‘  C 5¨˜oÔ.ØˆØ€Ir   c                 óŽ  — | j                  «       }d}t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }|sFt        j                  d|t        j                  «      }|r|j                  d«      j                  «       }d}t        j                  d|«      }|r|j                  d«      }|s)t        j                  d|«      }|r|j                  d«      }d}	 dd	lm}  ||d
«      }|j                  dt        j                  dt        j                  «      ¬«      }|s5|j                  dt        j                  dt        j                  «      ¬«      }|s5|j                  dt        j                  dt        j                  «      ¬«      }|r¸|j                  t        j                  dt        j                  «      ¬«      D ]  }	|	j                  «        Œ g }
|j                  g d¢d¬«      D ]  }	|
j                  t        |	«      «       Œ g }|
D ]!  }|sŒ|r	|d   |k7  sŒ|j!                  |«       Œ# dj#                  |«      }g }|j                  dt        j                  dt        j                  «      ¬«      D ]¬  }|j%                  dd«      }t        j                  dd|j'                  d¬«      «      j)                  d«      xs |j+                  d«      d   }|j-                  d«      r
t.        |z   }n|j-                  d «      st.        dz   |z   }|j!                  ||d!œ«       Œ® |D ]  }d"|d#   › d$|d%   › d&�}||vsŒ|d'|z   z  }Œ  t1        |j                  «       «      d(k  rd"| j2                  › d$|› d&�}|||fS # t4        $ r Y Œw xY w))uA   è¯¦æƒ…é¡µ: title/date/content (é™„ä»¶åž‹: æ­£æ–‡=é™„ä»¶PDFé“¾æŽ¥)r   z<h1[^>]*>(.*?)</h1>z<[^>]+>r	   um   <title>(.*?)(?:\s*-\s*(?:é‡�ç‚¹é¡¹ç›®æ¸…å�•|ä¿¡æ�¯å…¬å¼€ç›®å½•|æˆ�éƒ½å¸‚é¾™æ³‰é©¿åŒºäººæ°‘æ”¿åºœ).*)?</title>z1<meta name="PubDate" content="(\d{4}-\d{2}-\d{2})u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   )ÚBeautifulSoupzhtml.parserr@   z^content$|article|detail|wzcon)Úclass_zcontent|article|detail|wzconzzoom|content|article|detail)Úidzshare|qrcode|print|wzarA   FrB   éÿÿÿÿz

r   z:uploadfiles/.*\.(docx?|pdf|xlsx?|rar|zip|wps|et|dps)(\?|$))r2   r2   u	   ã€�.*?ã€‘Tr?   u   â€¢ r    r!   )rD   r#   z<p><a href="r#   z" target="_blank">rD   z</a></p>ú
é   )Úcontentr   r'   ÚSr   r(   r   Úbs4rR   ÚfindÚcompileÚIrI   Ú	decomposerJ   rK   r,   ÚjoinÚgetrG   Úlstripr   r   r)   Úlenr#   ÚImportError)r-   Úhtmlr"   r1   Ú	date_textrX   rR   ÚsoupÚwzrL   ÚpartsÚdedupr<   Úattachmentsr   r2   rD   Úlinks                     r   Úparse_detailrl   Z   sv  € à�<‰<‹>€DØ€EÜ
�	‰	Ð(¨$´·±Ó5€AÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆÙÜ�I‰Ið  Gð  IMô  OQ÷  OSñ  OSó  TˆÙØ—G‘G˜A“J×$Ñ$Ó&ˆEØ€IÜ
�	‰	ÐFÈÓM€AÙØ—G‘G˜A“Jˆ	ÙÜ�I‰IÐAÀ4ÓHˆÙØŸ™ ›
ˆIØ€Gð$Ý%Ù˜T =Ó1ˆØ�Y‰Y�u¤R§Z¡ZÐ0QÔSU×SWÑSWÓ%XˆYÓYˆÙØ—‘˜5¬¯©Ð4SÔUW×UYÑUYÓ)Z�Ó[ˆBÙØ—‘˜5¤R§Z¡ZÐ0NÔPR×PTÑPTÓ%U�ÓVˆBÙØ—k‘k¬¯©Ð4MÌrÏtÉtÓ)T�kÓUò �Ø—‘•ðàˆEØ—k‘kÒ">È%�kÓPò 0�Ø—‘œ]¨2Ó.Õ/ð0àˆEØò $�Ú™e u¨R¡y°A£~Ø—L‘L •Oð$ð —k‘k %Ó(ˆGàˆØ—‘˜s¬¯©Ð4qÔsu×swÑswÓ)x�Óyò 	<ˆAØ—5‘5˜ Ó$ˆDÜ—6‘6˜,¨¨A¯J©J¸T¨JÓ,BÓC×JÑJÈ6ÓRÒiÐVZ×V`ÑV`ÐadÓVeÐfhÑViˆDØ�‰˜sÔ#Ü˜d‘{‘Ø—_‘_ VÔ,Ü˜c‘z DÑ(�Ø×Ñ¨°TÑ:Õ;ð	<ð ò 	'ˆAØ! ! E¡( Ð+=¸aÀ¹i¸[ÈÐQˆDØ˜7Ò"Ø˜4 $™;Ñ&‘ð	'ô ˆw�}‰}‹Ó "Ò$Ø$ T§X¡X JÐ.@ÀÀÀxÐPˆGð �)˜WÐ$Ð$øô ò Ùðús&   ÄD<N8 É
N8 ÉD"N8 Í:9N8 Î8	OÏOc                  óÀ
  — t        «       } dt        j                  v }dt        j                  v }t        d| › dt        › �d¬«       t        «       5 }|j                  j                  t        dg d¢¬«      }|j                  t        d	d
dœd¬«      }|j                  «       }	 g }t        d| dz   «      D ]Ð  }t        j                  |¬«      }	t        d|› d�d¬«       |j                  |	dd¬«       t!        j"                  |dk(  rdnd«       t%        |«      }
|
st        d|› d�d¬«        nYt        d|› dt'        |
«      › d�d¬«       |j)                  |
«       t!        j"                  t+        j,                  dd«      «       ŒÒ t        dt'        |«      › d�d¬«       t/        «       }|D �cg c]!  }|d   |v rŒ|j1                  |d   «      rŒ |‘Œ# }}g }t3        |«      D ]á  \  }}t!        j"                  t+        j,                  dd«      «       	 |j                  |d   dd¬«       	 |j5                  d d!¬"«       t!        j"                  d«       t9        |«      \  }}}|xs |d#   }|r
|t        k  rŒ”|j;                  |d   |xs |d$   ||d%œ«       t        d&|dz   › d't'        |«      › d(|d)   d$   d d* › d+|› �d¬«       Œã t        d.t'        |«      › d�d¬«       |rA|D ]"  }t        t?        j@                  |d/¬0«      «       Œ$ 	 |jC                  «        d d d «       y |r†tE        tF        d1d2¬3«      5 }|D ]+  }|jI                  t?        j@                  |d/¬0«      d4z   «       Œ- 	 d d d «       t        d5t'        |«      › d6tF        › �d¬«       	 |jC                  «        d d d «       y tK        jL                  tN        «      }|jQ                  d7«       |jS                  «       }d8}|D ]¢  }|jQ                  d9|d   f«       |jU                  «       rŒ*|jQ                  d:|d$   tV        d;|d   |d#   |d<   d=d=tY        jZ                  d>|d#   «      rt]        |d#   j_                  d?d=«      «      nd8t`        f
«       |jb                  sŒž|dz  }Œ¤ |je                  «        |jC                  «        t        d@|› �d¬«       |jC                  «        	 d d d «       y c c}w # t6        $ r Y �Œ¬w xY w# t6        $ r9}t        d&|dz   › d't'        |«      › d,t=        |«      d d- › �d¬«       Y d }~�ŒHd }~ww xY w# 1 sw Y   �ŒËxY w# |jC                  «        w xY w# 1 sw Y   y xY w)ANz--dryrunz--jsonlu&   [longquanyi] é‡�ç‚¹é¡¹ç›®æ¸…å�• pages=z cutoff=T)Úflush)z--no-sandboxz--disable-setuid-sandboxz---disable-blink-features=AutomationControlled)Úexecutable_pathÚheadlessÚargsiV  i   )ÚwidthÚheight)Ú
user_agentÚviewportÚignore_https_errorsr	   )Úpnu     [åˆ—è¡¨] ç¬¬u   é¡µi`ê  Údomcontentloaded)ÚtimeoutÚ
wait_untilé   é   u       ç¬¬u   é¡µ 0 æ�¡, å�œæ­¢u   é¡µ u    æ�¡é   u   [åˆ—è¡¨] å…± r#   é   é   iÈ¯  z/div.content, div.article, div.detail, div.wzconi˜:  )ry   r$   r"   )r#   r"   r$   rX   z  [r    z] rU   é(   z | u
   ] å¤±è´¥: é<   u	   [å®Œæˆ�] F)Úensure_asciir   zutf-8)ÚencodingrV   z[jsonl] u    æ�¡ -> zPRAGMA busy_timeout=300000r   z'SELECT id FROM gov_raw WHERE page_url=?z¨INSERT OR IGNORE INTO gov_raw (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank, script_name) VALUES (?,?,?,?,?,?,?,?,?,?)u   å››å·�rX   r   z\d{4}-\d{2}-\d{2}ú-u   [å…¥åº“] æ–°å¢ž )3r   r   r   ÚprintÚCUTOFFr   ÚchromiumÚlaunchÚCHROMIUMÚnew_contextÚUAÚnew_pageÚrangeÚLIST_TPLÚformatÚgotoÚtimeÚsleepr5   rb   rJ   ÚrandomÚuniformÚsetÚaddÚ	enumerateÚwait_for_selectorÚ	Exceptionrl   r,   rE   ÚjsonÚdumpsÚcloseÚopenÚOUTÚwriteÚsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchoneÚ	SITE_NAMEr   rH   r   r   ÚSCRIPT_NAMEÚrowcountÚcommit)Ú	max_pagesÚdryrunÚ
jsonl_moder<   ÚbrowserÚctxr-   r.   rw   r#   Ú
page_itemsÚseenÚxÚresultsÚidxÚitr"   re   rX   ÚeÚrÚfÚconnrP   Ú	new_counts                            r   Úmainrº   –   sL  € ÜÓ!€IØœ3Ÿ8™8Ð#€FØœcŸh™hÐ&€JÜ	Ð2°9°+¸XÄfÀXÐ
NÐVZÕ[ä	Ó	ð Q˜aØ—*‘*×#Ñ#Ü$¨tÚnð $ó pˆð ×!Ñ!¬RÀDÐTWÑ:XÐnrÐ!ÓsˆØ�|‰|‹~ˆðK	ØˆEÜ˜A˜y¨1™}Ó-ò 1�Ü—o‘o¨�oÓ,�Ü˜ r d¨#Ð.°dÕ;Ø—	‘	˜# uÐ9K�	ÔLÜ—
‘
  a¢™1¨QÔ/Ü*¨4Ó0�
Ù!Ü˜G B 4Ð'8Ð9ÀÕFÙÜ˜ ˜t 4¬¨J«Ð'8¸Ð=ÀTÕJØ—‘˜ZÔ(Ü—
‘
œ6Ÿ>™>¨!¨QÓ/Õ0ð1ô �M¤# e£* ¨TÐ2¸$Õ?ä“5ˆDØ %ÖV˜1¨a°©h¸$Ò.>À$Ç(Á(È1ÈUÉ8ÕBT’QÐVˆEÐVàˆGÜ$ UÓ+ò Y‘��RÜ—
‘
œ6Ÿ>™>¨!¨QÓ/Ô0ðYØ—I‘I˜b ™i°ÐCU�IÔVðØ×.Ñ.Ð/`ÐjoÐ.Ôpô —J‘J˜q”MÜ0<¸TÓ0BÑ-�E˜9 gØ )Ò 7¨R°©Z�IÙ  Y´Ò%7Ø Ø—N‘NØ! %™yØ!&Ò!5¨"¨W©+Ø )Ø#*ñ	$ô ô ˜C  A¡˜w a¬¨E«
 |°2°g¸b±kÀ'Ñ6JÈ3ÈBÐ6OÐ5PÐPSÐT]ÐS^Ð_ÐgkÖlð)Yô0 �Iœc '›l˜^¨4Ð0¸Õ=ÙØ ò =�AÜœ$Ÿ*™* Q°UÔ;Õ<ð=àð4 �M‰MŒO÷cQð Qñp Üœ#˜s¨WÔ5ð J¸Ø$ò J˜ØŸ™¤§
¡
¨1¸5Ô AÀDÑ HÕIñJ÷Jô ˜¤ W£ ¨h´s°eÐ<ÀDÕIØð( �M‰MŒO÷cQð Qô| —?‘?¤7Ó+ˆDØ�L‰LÐ5Ô6Ø—‘“ˆAØˆIØò 
#�Ø—	‘	ÐCÀaÈÁhÀ[ÔQØ—:‘:”<ØØ—	‘	ð Ø�w‘Z¤¨H°a¸±hÀÀ&Á	È1ÈYÉ<ÐY[Ð]_Ü8:¿¹ÐAUÐWXÐY_ÑW`Ô8a”S˜˜6™×*Ñ*¨3°Ó3Ô4ÐghÜ ð"ô#ð
 —:“:Ø ‘N‘Ið
#ð �K‰KŒMØ�J‰JŒLÜÐ$ Y KÐ0¸Õ=à�M‰M�O÷cQð Qùò0 Wøô %ò Úðûô !ò YÜ˜C  A¡˜w a¬¨E«
 |°:¼cÀ!»fÀSÀb¸k¸]ÐKÐSW×XÓXûðYú÷Jñ Jûð0 �M‰M�Oú÷cQð Qús×   ÁAUÂ!DT?Æ-SÆ:SÇSÇ>T?ÈS-È*SÈ=8S-É5T?É6AS-ËAT?Ì
UÌ#T?Ì71T2Í)(T?ÎUÎ+CT?Ò7T?Ò>UÓT?Ó	S*Ó&S-Ó)S*Ó*S-Ó-	T/Ó6.T*Ô$T?Ô*T/Ô/T?Ô2T<	Ô7T?Ô?UÕUÕUÚ__main__)!Ú__doc__r   Úosr   rš   r‘   r“   r    rd   Úhtml_libr   r   Úplaywright.sync_apir   r¦   r)   rŽ   r   ÚnowÚstrftimer†   r‹   rž   r¢   r‰   r§   r   r   r5   rK   rl   rº   Ú__name__© r   r   ú<module>rÄ      s¥   ðñ÷ B× A× A× Aß (Ý /à-€	Ø$€ØV€ØÐ Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€àv€Ø €Ø
€ØK€Ø&€òòeòò2ò29%òxWðt ˆzÒÙ…Fð r   