Ë
    [Üƒ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edk(  r e«        yy)u˜  crawl_longquanyi_zdxm.py - æˆ�éƒ½å¸‚é¾™æ³‰é©¿åŒº-é‡�ç‚¹é¡¹ç›®æ¸…å�•
ç«™ç‚¹: https://www.longquanyi.gov.cn (ç‘žæ•°4ä»£: 412 + $_ts; è¯�ä¹¦è¿‡æœŸé¡» ignore_https_errors)
åˆ—è¡¨: /gkml/zdxmqd/detail-list/column-index-1.shtml?page=N (é�™æ€� ul.list>li.myflex)
  onclick="window.open('/gkml/zdxmqd/{id}.shtml')" æ��å�–è¯¦æƒ…é“¾æŽ¥
  å­—æ®µ: .cont æ ‡é¢˜ / .unit éƒ¨é—¨ / .date æ—¥æœŸ
åˆ†é¡µ: 40 é¡µ (123..383940)
é    N)ÚdatetimeÚ	timedelta)Úsync_playwrightu(   æˆ�éƒ½å¸‚é¾™æ³‰é©¿åŒº-é‡�ç‚¹é¡¹ç›®æ¸…å�•zhttps://www.longquanyi.gov.cnzMhttps://www.longquanyi.gov.cn/gkml/zdxmqd/detail-list/column-index-{pn}.shtmlé   i!  )Ú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/longquanyi_zdxm.jsonlz/root/search.dbz>/root/.cache/ms-playwright/chromium-1228/chrome-linux64/chromezcrawl_longquanyi_zdxm.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_longquanyi_zdxm.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                 óè  — | 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                  «      ¬«      }|�r°|j                  t        j                  dt        j                  «      ¬«      D ]  }	|	j                  «        Œ g }
|j                  g d¢d¬«      D �]  }	|	j                  dv r|	j                  d«      rŒ$|	j                  dk(  r|	j                  d«      rŒE|	j                  dk(  r5t!        |	«      }t        j                  dd„ |«      }|
j#                  |«       Œ‰|	j                  dk(  r=|	j                  g d¢d¬«      rŒ®|	j%                  dd¬«      }|r|
j#                  |«       ŒÕ|	j%                  dd¬«      }|sŒët        j&                  d|«      r�Œ|
j#                  |«       �Œ g }|
D ]!  }|sŒ|r	|d   |k7  sŒ|j#                  |«       Œ# dj)                  |«      }g }|j                  dt        j                  dt        j                  «      ¬ «      D ]—  }|j+                  d!d«      }|j%                  d¬«      j-                  d"«      xs |j/                  d#«      d   }|j1                  d#«      r
t2        |z   }n|j1                  d$«      st2        d#z   |z   }|j#                  ||d%œ«       Œ™ |D ]  }d&|d'   › d(|d)   › d*�}||vsŒ|d+|z   z  }Œ  t5        |j                  «       «      d,k  rd&| j6                  › d(|› d*�}|||fS # t8        $ 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.parserÚdivz!content|article|detail|wzcon|text)Úclass_zzoom|content|article|detail)Úidzshare|qrcode|print|wza)ÚpÚpreÚtabler8   T)Ú	recursive)r;   r<   r=   zhref=["\'](/[^"\']+)["\']c                 ó8   — dt         ›| j                  d«      ›d�S )Nzhref="r	   ú")r)   r(   )Úmms    r   ú<lambda>zparse_detail.<locals>.<lambda>f   s   � Õ[_Ðac×aiÑaiÐjkÕalÐJm€ r   )r;   r<   r=   F)r   ud   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|\[çº é”™\]|æµ�è§ˆæ¬¡æ•°|å­—å�·|åˆ†äº«åˆ°|æ‰«ä¸€æ‰«|ç›¸å…³é™„ä»¶)éÿÿÿÿz

r   z5uploadfiles/.*\.(docx?|pdf|xlsx?|rar|zip|wps|et|dps)$)r2   r2   u   â€¢ r    r!   )Únamer#   z<p><a href="r#   z" target="_blank">rD   z</a></p>ú
é   )Úcontentr   r'   ÚSr   r(   r   Úbs4r7   ÚfindÚcompileÚIÚfind_allÚ	decomposerD   Úfind_parentÚstrr,   Úget_textÚmatchÚjoinÚgetÚlstripr   r   r)   Úlenr#   ÚImportError)r-   Úhtmlr"   r1   Ú	date_textrG   r7   ÚsoupÚwzÚelÚpartsÚtblÚtxtÚdedupr;   Úattachmentsr   r2   rD   Úlinks                       r   Úparse_detailrc   A   s  € à�<‰<‹>€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ð4Ý%Ù˜T =Ó1ˆØ�Y‰Y�u¤R§Z¡ZÐ0TÔVX×VZÑVZÓ%[ˆYÓ\ˆÙØ—‘˜5¤R§Z¡ZÐ0NÔPR×PTÑPTÓ%U�ÓVˆBÚØ—k‘k¬¯©Ð4MÌrÏtÉtÓ)T�kÓUò �Ø—‘•ðàˆEØ—k‘kÒ">È$�kÓOó &�Ø—7‘7˜lÑ*¨r¯~©~¸gÔ/FØØ—7‘7˜gÒ%¨"¯.©.¸Ô*AØØ—7‘7˜gÒ%Ü˜b›'�CÜŸ&™&Ð!=Ñ?mÐorÓs�CØ—L‘L Ô%ØØ—7‘7˜eÒ#Ø—w‘wÒ4À�wÔFØ ØŸ+™+ b°˜+Ó5�CÙØŸ™ SÔ)ØØ—k‘k "¨D�kÓ1�ÚœrŸx™xð  )Pð  RUö   VØ—L‘L Ö%ð'&ð( ˆEØò $�Ú™e u¨R¡y°A£~Ø—L‘L •Oð$ð —k‘k %Ó(ˆGàˆØ—‘˜s¬¯©Ð4lÔnp×nrÑnrÓ)s�Ótò 	<ˆAØ—5‘5˜ Ó$ˆDØ—:‘: D�:Ó)×0Ñ0°Ó8ÒO¸D¿J¹JÀs»OÈBÑ<Oˆ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Ð$Ð$øô ò Ùðús2   ÄGQ% ËQ% Ë0Q% Ì
Q% ÌDQ% Ð'9Q% Ñ%	Q1Ñ0Q1c                  óx
  — 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¬«       t!        j"                  d«       t5        |«      \  }}}|xs |d    }|r
|t        k  rŒ€|j7                  |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,¬-«      «       Œ$ 	 |jA                  «        d d d «       y |r†tC        tD        d.d/¬0«      5 }|D ]+  }|jG                  t=        j>                  |d,¬-«      d1z   «       Œ- 	 d d d «       t        d2t'        |«      › d3tD        › �d¬«       	 |jA                  «        d d d «       y tI        jJ                  tL        «      }|jO                  d4«       |jQ                  «       }d5}|D ]¢  }|jO                  d6|d   f«       |jS                  «       rŒ*|jO                  d7|d!   tT        d8|d   |d    |d9   d:d:tW        jX                  d;|d    «      rt[        |d    j]                  d<d:«      «      nd5t^        f
«       |j`                  sŒž|dz  }Œ¤ |jc                  «        |jA                  «        t        d=|› �d¬«       |jA                  «        	 d d d «       y c c}w # t8        $ r9}t        d#|dz   › d$t'        |«      › d)t;        |«      d d* › �d¬«       Y d }~�Œ$d }~ww xY w# 1 sw Y   �Œ»xY w# |jA                  «        w xY w# 1 sw Y   y xY w)>Nz--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È¯  r$   r"   )r#   r"   r$   rG   z  [r    z] rC   é(   z | u
   ] å¤±è´¥: é<   u	   [å®Œæˆ�] F)Úensure_asciir   zutf-8)ÚencodingrE   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   å››å·�rG   r   z\d{4}-\d{2}-\d{2}ú-u   [å…¥åº“] æ–°å¢ž )2r   r   r   ÚprintÚCUTOFFr   ÚchromiumÚlaunchÚCHROMIUMÚnew_contextÚUAÚnew_pageÚrangeÚLIST_TPLÚformatÚgotoÚtimeÚsleepr5   rV   ÚextendÚrandomÚuniformÚsetÚaddÚ	enumeraterc   r,   Ú	ExceptionrP   ÚjsonÚdumpsÚcloseÚopenÚOUTÚwriteÚsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchoneÚ	SITE_NAMEr   rR   r   r   ÚSCRIPT_NAMEÚrowcountÚcommit)Ú	max_pagesÚdryrunÚ
jsonl_moder;   ÚbrowserÚctxr-   r.   rn   r#   Ú
page_itemsÚseenÚxÚresultsÚidxÚitr"   rY   rG   ÚeÚrÚfÚconnÚcÚ	new_counts                            r   Úmainr²   �   s  € ÜÓ!€IØœ3Ÿ8™8Ð#€FØœcŸh™hÐ&€JÜ	Ð2°9°+¸XÄfÀXÐ
NÐVZÕ[ä	Ó	ð L˜aØ—*‘*×#Ñ#Ü$¨tÚnð $ó pˆð ×!Ñ!¬RÀDÐTWÑ:XÐnrÐ!ÓsˆØ�|‰|‹~ˆðF	Øˆ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Ü—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ô& �Iœc '›l˜^¨4Ð0¸Õ=ÙØ ò =�AÜœ$Ÿ*™* Q°UÔ;Õ<ð=àð4 �M‰MŒO÷YLð Lñf Üœ#˜s¨WÔ5ð J¸Ø$ò J˜ØŸ™¤§
¡
¨1¸5Ô AÀDÑ HÕIñJ÷Jô ˜¤ W£ ¨h´s°eÐ<ÀDÕIØð( �M‰MŒO÷YLð Lôr —?‘?¤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÷YLð Lùò0 Wøô& !ò YÜ˜C  A¡˜w a¬¨E«
 |°:¼cÀ!»fÀSÀb¸k¸]ÐKÐSW×XÓXûðYú÷Jñ Jûð0 �M‰M�Oú÷YLð Lús´   ÁAT0Â!DTÆ-SÆ:SÇSÇ>TÈAS	É!TÉ"AS	Ê0ATË6T0ÌTÌ#1TÍ(TÍ>T0ÎCTÑ37TÒ*T0ÓTÓ		TÓ.TÔ TÔTÔTÔT	ÔTÔT-Ô-T0Ô0T9Ú__main__) Ú__doc__r   Úosr   r‘   rˆ   r‹   r—   rX   Úhtml_libr   r   Úplaywright.sync_apir   r�   r)   r…   r   ÚnowÚstrftimer}   r‚   r•   r™   r€   rž   r   r   r5   rc   r²   Ú__name__© r   r   ú<module>r¼      s¡   ðñ÷ B× A× A× Aß (Ý /à6€	Ø&€ØZ€ØÐ Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€àv€Ø"€Ø
€ØK€Ø(€òòeòò2I%òXRðj ˆzÒÙ…Fð r   