Ë
    Ü€‚j-*  ã            
       óB  — 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m	Z	 dZ
dZde
› �Ze› d�Ze› d�Zd	Zd
ZdZdZdZd„ Zd„ Zd„ Zd„ Zdd„Zddedededefd„Zedk(  r< e«       \  ZZZ Z! ede› de!› de› de › �«        ejD                   eeee e!«      «       yy)uq  Crawler for æ¸…æ°´æ²³åŽ¿-éƒ¨é—¨æ–‡ä»¶ (qingshuihe.gov.cn zfxxgk zfwj)
   https://www.qingshuihe.gov.cn/zfxxgkzl/fdzdgknr/?gk=3 éƒ¨é—¨æ–‡ä»¶æ �ç›®
   ç‘žæ•°4ä»£ WAF: playwright æ¸²æŸ“ (page.content() æ‹¿æ¸²æŸ“å�Ž DOM)
   åˆ—è¡¨: zfwj/index.html ~ index_333.html (15æ�¡/é¡µ, 334é¡µ, 5000æ�¡)
   è¯¦æƒ…: div#Zoom æ­£æ–‡, <title> æ ‡é¢˜, æ–‡å�·, æ—¥æœŸ, é™„ä»¶ downloadPdf
é    N)Úasync_playwrightzwww.qingshuihe.gov.cnz139.9.247.160zhttp://z/zfxxgkzl/fdzdgknr/zfwjz/zfxxgkzl/fdzdgknr/?gk=3z/root/search.dbu   æ¸…æ°´æ²³åŽ¿-éƒ¨é—¨æ–‡ä»¶zcrawl_qingshuihe_bmwj.pyzuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36z
2023-08-18c                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú*/root/gov_crawler/crawl_qingshuihe_bmwj.pyÚlogr      s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                  ó  — d} d}d }d}t        t        j                  «      D �]Z  \  }}|dk(  r?|dz   t        t        j                  «      k  r t	        t        j                  |dz      «      } ŒK|dk(  rd}ŒS|dk(  r6|dz   t        t        j                  «      k  rt        j                  |dz      }ŒŽ|dk(  r?|dz   t        t        j                  «      k  r t	        t        j                  |dz      «      }ŒÒ|j                  d«      r|j                  d	d«      d   }Œù|j                  d
«      r t	        |j                  d	d«      d   «      } �Œ*|j                  d«      s�Œ=t	        |j                  d	d«      d   «      }�Œ] | |||fS )Né   Fz--pagesz--incrementalTz--outputz--startz	--output=ú=z--pages=z--start=)Ú	enumerateÚsysÚargvÚlenÚintÚ
startswithÚsplit)ÚpagesÚincrementalÚoutputÚstartÚiÚas         r
   Ú
parse_argsr      sE  € Ø€EØ€KØ€FØ€EÜœ#Ÿ(™(Ó#ó ,‰ˆˆ1Ø�	Š>˜a !™e¤c¬#¯(©(£mÒ3ÜœŸ™  Q¡™Ó(‰EØ�/Ò!Ø‰KØ�*Š_  Q¡¬¬S¯X©X«Ò!6Ü—X‘X˜a !™e‘_‰FØ�)Š^  A¡¬¬C¯H©H«Ò 5ÜœŸ™  Q¡™Ó(‰EØ�\‰\˜+Ô&Ø—W‘W˜S !“_ QÑ'‰FØ�\‰\˜*Ô%Ü˜Ÿ™  Q›¨Ñ*Ó+ŠEØ�\‰\˜*Ö%Ü˜Ÿ™  Q›¨Ñ*Ó+ŠEð,ð �+˜v uÐ,Ð,r   c                 óÄ   — g }t        «       }t        j                  d| «      D ]:  }|j                  d«      }||vsŒ|j	                  |«       |j                  |«       Œ< |S )uR   ä»Žåˆ—è¡¨é¡µæ��å�– (url, åº�å�·)ã€‚æ ‡é¢˜ä»Žè¯¦æƒ…é¡µå�–ï¼ˆåˆ—è¡¨é¡µ GBK ä¹±ç �ï¼‰zX<a[^>]*href="(http://www\.qingshuihe\.gov\.cn/zfxxgkzl/fdzdgknr/zfwj/[^"]+\.html)"[^>]*>r   )ÚsetÚreÚfinditerÚgroupÚaddÚappend)ÚhtmlÚitemsÚseenÚmÚurls        r
   Úextract_list_itemsr*   /   s\   € à€EÜ‹5€DÜ�[‰[ÐtÐvzÓ{ò ˆØ�g‰g�a‹jˆØ�dŠ?Ø�H‰H�SŒMØ�L‰L˜Õð	ð
 €Lr   c                 óþ  ‡— ddddg ddœ}t        j                  d| t         j                  «      }|r`t        j                  dd|j	                  d«      «      j                  «       }t        j                  dd|«      j                  «       }|r||d<   t        j                  d	| «      D �]  }|j	                  d«      |j	                  d
«      j                  «       c}Št        ˆfd„dD «       «      s<t        j                  d|t         j                  «      sd|v sd|j                  «       v sŒ…|j                  d«      r|n%|j                  d«      r	t        |z   nt        dz   |z   }|j                  dd«      }‰|f|d   D �cg c]  }|d   |d   f‘Œ c}vsŒð|d   j                  ‰|dœ«       �Œ	 dD ]¿  }t        j                  || t         j                  «      }|sŒ+|j	                  d«      }	t        t        j                  d|	«      «      |d<   t        j                  dd|	t         j                  ¬«      }	t        j                  dd|	t         j                  ¬«      }	|	j                  «       |d<    n t        j                  d| «      }|st        j                  d | «      }|r&|j	                  d«      j                  dd!«      }
|
|d"<   t        j                  d#| «      }|r|j	                  d«      |d$<   |S c c}w )%uB   æ��å�–è¯¦æƒ…: title, content, date, æ–‡å�·, attachments, has_tableÚ F)ÚtitleÚcontentÚdateÚdoc_noÚattachmentsÚ	has_tablez<title>(.*?)</title>u%   [\s_]*æ¸…æ°´æ²³åŽ¿äººæ°‘æ”¿åºœ[\s_]*$r   z_\s*$r-   z+<a[^>]*href="([^"]+)"[^>]*>([^<]{2,80})</a>é   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0ÚkÚtxts     €r
   ú	<genexpr>z!extract_detail.<locals>.<genexpr>G   s   øè ø€ Ò@˜Aˆq�CŒxÑ@ùs   ƒ)u   é™„ä»¶u   ä¸‹è½½u   æ–‡ä»¶z#\.(docx?|xlsx?|pdf|zip|rar|wps|et)$ÚdownloadPdfÚdownloadÚhttpú/z&amp;ú&r1   Únamer)   )r?   r)   )z#<div[^>]*id="Zoom"[^>]*>(.*?)</div>z1<div[^>]*class="trs_editor_view"[^>]*>(.*?)</div>z,<div[^>]*class="TRS_Editor"[^>]*>(.*?)</div>z<tabler2   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>r.   uA   å�‘å¸ƒ[æ—¥æ—¥æœŸæœŸ]*[ï¼š:]\s*([\d]{4}[-/][\d]{1,2}[-/][\d]{1,2})z([\d]{4}-[\d]{2}-[\d]{2})ú-r/   u,   ([\u4e00-\u9fa5]{2,10}ã€”[\d]{4}ã€•[\d]+å�·)r0   )r    ÚsearchÚDOTALLÚsubr"   Ústripr!   ÚanyÚIÚlowerr   ÚBASEÚreplacer$   Úbool)r%   Úresultr(   ÚtÚamÚhrefÚfullr   ÚpatternÚinnerÚdr8   s              @r
   Úextract_detailrT   :   sÉ  ø€ à b°"ÀÐSUÐdiÑj€Fä
�	‰	Ð)¨4´·±Ó;€AÙÜ�F‰FÐ;¸RÀÇÁÈÃÓL×RÑRÓTˆÜ�F‰F�8˜R Ó#×)Ñ)Ó+ˆÙØˆF�7‰Oä�k‰kÐHÈ$ÓOó IˆØ—H‘H˜Q“K §¡¨!£×!2Ñ!2Ó!4ˆ	ˆˆcÜÓ@Ð!?Ô@Ô@ÄBÇIÁIÐNtÐvzÔ|~÷  }Añ  }Aô  EBð  FSð  W[ñ  F[ð  _ið  mq÷  mwñ  mwó  myò  _yØŸ?™?¨6Ô2‘4ÈÏÉÐX[ÔH\¼ÀºÔbfÐilÑblÐosÑbsˆDØ—<‘< ¨Ó-ˆDØ�Tˆ{À&ÈÑBWÖ"X¸Q A f¡I¨q°©xÒ#8Ò"XÒXØ�}Ñ%×,Ñ,°cÀ$Ñ-GÖHðIðEò ˆô �I‰I�g˜t¤R§Y¡YÓ/ˆÚØ—G‘G˜A“JˆEÜ"&¤r§y¡y°¸EÓ'BÓ"CˆF�;Ñä—F‘FÐ7¸¸UÌ"Ï)É)ÔTˆEÜ—F‘FÐ5°r¸5ÌÏ	É	ÔRˆEØ %§¡£ˆF�9ÑÙðô 	�	‰	ÐVÐX\Ó]€AÙÜ�I‰IÐ2°DÓ9ˆÙØ�G‰G�A‹J×Ñ˜s CÓ(ˆØˆˆv‰ä
�	‰	ÐAÀ4ÓH€AÙØŸ7™7 1›:ˆˆxÑØ€Mùò5 #Ys   ÆK:c           
   ƒ   ó‚  K  — t        |«      D ]¾  }	 | j                  |dd¬«      ƒ d{  –—†  | j                  |«      ƒ d{  –—†  | j                  «       ƒ d{  –—† }t        |«      dkD  r|c S | j                  d«      ƒ d{  –—†  | j                  «       ƒ d{  –—† }t        |«      dkD  r|c S | j                  d«      ƒ d{  –—†  ŒÀ y7 Œ¦# t        $ rW}t        d|j	                  d«      d   dd › d	t        |«      dd
 › �«       | j                  d«      ƒ d{  –—†7   Y d}~�Œd}~ww xY w7 Œò7 ŒÜ7 Œ³7 Œ�7 Œt­w)uL   å¯¼èˆªå¹¶ç­‰å¾…æ¸²æŸ“ï¼ˆç‘žæ•°æŒ‘æˆ˜ç”± JS æ¸²æŸ“ï¼Œå¿…é¡» page.content()ï¼‰Údomcontentloadedi¸ˆ  ©Ú
wait_untilÚtimeoutNz
nav error r=   éÿÿÿÿé(   ú: é<   i¸  é N  r,   )	ÚrangeÚgotoÚ	Exceptionr   r   ÚstrÚwait_for_timeoutr.   r   )Úpager)   Úwait_msÚ	max_retryÚattemptÚer%   s          r
   Únavri   f   s3  è ø€ ä˜Ó#ò *ˆð	Ø—)‘)˜CÐ,>È�)ÓN×NÐNð
 ×#Ñ# GÓ,×,Ð,Ø—\‘\“^×#ˆÜˆt‹9�uÒØŠKØ×#Ñ# DÓ)×)Ð)Ø—\‘\“^×#ˆÜˆt‹9�uÒØŠKØ×#Ñ# DÓ)×)Ñ)ð*ð  ð OùÜò 	Ü�*˜SŸY™Y s›^¨BÑ/°°Ð4Ð5°R¼¸A»¸sÀ¸°}ÐEÔFØ×'Ñ'¨Ó-×-Ñ-Ýûð	úð 	-øØ#øð 	*øØ#øð 	*úsž   ‚D?’C©CªC®D?ÁD5ÁD?ÁD7Á*D?ÂD9ÂD?ÂD;Â*D?ÃD=Ã	D?ÃCÃ	D2ÃAD-Ä!D$Ä"D-Ä'D?Ä-D2Ä2D?Ä7D?Ä9D?Ä;D?Ä=D?r   r   r   r   c              ƒ   ór
  K  — d }|s+t        j                  t        d¬«      }|j                  «       }d }|rt	        |dd¬«      }d}d}d}	t        j
                  «       }
t        «       4 ƒd {  –—† }|j                  j                  ddd	t        › d
t        › �g¬«      ƒ d {  –—† }|j                  t        dddœd¬«      ƒ d {  –—† }|j                  «       ƒ d {  –—† }d}t        d«      D ]‡  }|j                  t         dd¬«      ƒ d {  –—†  |j#                  d«      ƒ d {  –—†  |j%                  «       ƒ d {  –—† }t'        |«      dkD  rt)        d|dz   › d�«        nt)        d|dz   › d�«       Œ‰ t'        |«      dk  rt)        d«       	 d d d «      ƒd {  –—†  y t        ||| z   «      D �]Ï  }|dk(  r
t*        › d�}nt*        › d|dz
  › d �}t-        ||«      ƒ d {  –—† }|st)        d!|› d"�«       |	dz  }	ŒMt/        |«      }|st)        d!|› d#�«        �ngt)        d!|› d$t'        |«      › d%�«       |D �]C  }|r)j1                  d&|f«       |j3                  «       r|dz  }Œ/t-        ||«      ƒ d {  –—† }|s&t)        d'|j5                  d(«      d)   › �«       |	dz  }	Œkt7        |«      }|d*   r|d+   s;|d*   rd,|› d-|d*   › d.�|d+<   n&t)        d/|j5                  d(«      d)   › �«       |	dz  }	Œ»|d+   }t8        |||d*   |d0   xs d1|d+   d d2 j;                  d3d«      j;                  d4d«      d5d6||d7   |d8   d9|d:   rdndt<        d;œ}|r?|j?                  tA        jB                  |d<¬=«      d>z   «       |jE                  «        |dz  }n®j1                  d?t8        |||d*   |d0   xs d1|d0   xs d1|d+   d d2 j;                  d3d«      j;                  d4d«      d5d6d||d7   dtA        jB                  |d8   d<¬=«      d9|d:   rdndt<        f«       |jF                  dkD  r|dz  }n|dz  }|jI                  «        |d@z  dk(  s�Œ|dkD  s�Œt)        dA|› dB|› dC|	› dDt        j
                  «       |
z
  dE›dF�	«       �ŒF �ŒÒ |jK                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  |r|jK                  «        |r|jK                  «        t)        dG|› dB|› dC|	› dHt        j
                  «       |
z
  dE›dI�	«       y 7 �Œ”7 �Œb7 �ŒB7 �Œ-7 �Œ 7 �Œê7 �ŒÕ7 �Œx7 �Œ57 �Œ¢7 Œ…7 Œw# 1 ƒd {  –—†7  sw Y   Œ‡xY w­w)JNé   )rY   Úwzutf-8)Úencodingr   Tz---disable-blink-features=AutomationControlledz--host-resolver-rules=MAP ú )ÚheadlessÚargsiV  i„  )ÚwidthÚheightzzh-CN)Ú
user_agentÚviewportÚlocaler,   é   rV   iÈ¯  rW   ip  r^   u   ç‘žæ•°é€šè¿‡ (attempt r   ú)u   ç‘žæ•°æŒ‘æˆ˜é‡�è¯• z/6...u   ä¸»é¡µé�¢æŒ‘æˆ˜å¤±è´¥ï¼Œé€€å‡ºz/index.htmlz/index_z.htmlu   é¡µu    æŒ‘æˆ˜å¤±è´¥ï¼Œè·³è¿‡u(    æ— æ�¡ç›®ï¼ˆå�¯èƒ½åˆ°å°¾é¡µï¼‰ï¼Œå�œæ­¢r\   u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?u     è¯¦æƒ…å¤±è´¥: r=   rZ   r-   r.   z<p><a href="z">z</a></p>u     æ— æ ‡é¢˜æ— æ­£æ–‡: r/   z
1900-01-01éÈ   ú<ú>Ú	publishedu   éƒ¨é—¨æ–‡ä»¶r0   r1   u	   å†…è’™å�¤r2   )Ú	site_nameÚ
source_urlÚpage_urlr-   Úpublish_dateÚsummaryÚstatusÚcategoryr.   Útagsr1   Ú
group_namer2   Úscript_nameF)Úensure_asciiú
an  
                        INSERT OR IGNORE INTO gov_raw
                        (site_name, source_url, page_url, title, publish_date, date_rank, summary, status,
                         category, visits, content, tags, industry, attachments, group_name, has_table, script_name)
                        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
                    é
   u     è¿›åº¦: æ–°å¢žu    è·³è¿‡u    å¤±è´¥z (z.0fzs)u   å®Œæˆ�: æ–°å¢žu    ç”¨æ—¶Ús)&Úsqlite3ÚconnectÚDBÚcursorÚopenÚtimer   ÚchromiumÚlaunchÚHOSTÚIPÚnew_contextÚUAÚnew_pager_   r`   ÚMAIN_URLrc   r.   r   r   Ú	LIST_BASEri   r*   ÚexecuteÚfetchoner   rT   r   rJ   ÚSCRIPT_NAMEÚwriteÚjsonÚdumpsr   ÚrowcountÚcommitÚclose)r   r   r   r   ÚconnÚcurÚout_fÚ	new_countÚ
skip_countÚ
fail_countÚt0ÚpÚbrowserÚctxrd   Ú	main_htmlrg   ÚpgÚlist_urlr%   Úurlsr)   ÚdhtmlÚdetÚcontent_htmlÚrecs                             r
   Úcrawlr´   z   s±  è ø€ Ø€DÙÜ�‰œr¨2Ô.ˆØ�k‰k‹mˆØ€EÙÜ�V˜S¨7Ô3ˆØ€IØ€JØ€JÜ	�‰‹€BäÓ!÷ `ð ` QØŸ
™
×)Ñ)ØØAØ.¬t¨f°A´b°TÐ:ð<ð *ó 
÷ 
ˆð
 ×'Ñ'´2È$ÐZ]Ñ@^ÐgnÐ'Óo×oˆØ—\‘\“^×#ˆð ˆ	Ü˜Q“xò 	8ˆGØ—)‘)œHÐ1CÈU�)ÓS×SÐSØ×'Ñ'¨Ó-×-Ð-Ø"Ÿl™l›n×,ˆIÜ�9‹~ Ò%ÜÐ,¨W°Q©Y¨K°qÐ9Ô:ÙÜÐ% g¨a¡i [°Ð6Õ7ð	8ô ˆy‹>˜UÒ"ÜÐ0Ô1Ø÷+`÷ `ð `ô0 ˜˜u u™}Ó-ó F	vˆBØ�QŠwÜ'˜[¨Ð4‘ä'˜[¨°°1±¨v°UÐ;�Ü˜T 8Ó,×,ˆDÙÜ�c˜"˜Ð3Ð4Ô5Ø˜a‘�
ØÜ% dÓ+ˆDÙÜ�c˜"˜ÐEÐFÔGÚÜ�#�b�T˜œC ›I˜; dÐ+Ô,Øó 7v�áØ—K‘KÐ IÈCÈ6ÔRØ—|‘|”~Ø" a™˜
Ø ä! $¨›n×,�ÙÜÐ*¨3¯9©9°S«>¸"Ñ+=Ð*>Ð?Ô@Ø !‘O�JØÜ$ UÓ+�Ø˜7’|¨3¨yª>à˜7’|Ø+7¸°u¸B¸sÀ7¹|¸nÈHÐ)U˜˜IšäÐ4°S·Y±Y¸s³^ÀBÑ5GÐ4HÐIÔJØ" a™˜
Ø Ø" 9™~�ä!*¸(ÐPSØ  ™\¸3¸v¹;Ò;VÈ,Ø" 9™~¨d¨sÐ3×;Ñ;¸CÀÓD×LÑLÈSÐRTÓUØ)°~ÐR^Ø ™M¸#¸mÑ:LØ"-ÀÀ[ÒAQ¹AÐWXÜ#.ñ�ñ Ø—K‘K¤§
¡
¨3¸UÔ CÀdÑ JÔKØ—K‘K”MØ ‘N‘Ià—K‘Kð !ô " 8¨S°#°g±,ÀÀFÁÒ@[È|Ø˜F™Ò3 |°S¸±^ÀDÀSÐ5I×5QÑ5QÐRUÐWYÓ5Z×5bÑ5bÐcfÐhjÓ5kØ# ^°Q¸Ø˜H™ r¬4¯:©:°c¸-Ñ6HÐW\Ô+]Ø#¨#¨kÒ*:¡QÀÄ;ðôð —|‘| aÒ'Ø! Q™™	à" a™˜
Ø—K‘K”MØ˜r‘> QÔ&¨9°q¬=ÜÐ*¨9¨+°W¸Z¸LÈÐPZÈ|Ð[]Ô^b×^gÑ^gÓ^iÐjlÑ^lÐmpÐ]qÐqsÐtÖuòo7vðF	vðP �m‰m‹o×Ð÷A`÷ `ñD Ø�
‰
ŒÙØ�‰ŒÜˆ.˜˜ 7¨:¨,°g¸j¸\ÈÔQU×QZÑQZÓQ\Ð]_ÑQ_Ð`cÐPdÐdeÐfÕgðM`ùð
ùð
 pùØ#ùð
 TùØ-ùØ,ùð`ùð: -ùð$ -ùðb 	øðA`ø÷ `÷ `ñ `üs  ‚A*T7Á,T Á-T7Á01T"Â!TÂ""T"ÃTÃT"ÃT	Ã/T"ÄTÄT"Ä%TÄ&T"Ä=TÄ>AT"ÆT7ÆTÆT7Æ#A T"Ç#TÇ$BT"É9T
É:GT"Ñ
T"ÑAT"ÒTÒT"ÒT7Ò(T Ò)AT7ÔT"ÔT"Ô	T"ÔT"ÔT"ÔT"ÔT7ÔT"ÔT"ÔT"Ô T7Ô"T4Ô(T+Ô)T4Ô0T7Ú__main__zpages=z start=z incremental=z output=)i   é   )Nr   )#Ú__doc__Úasyncior    r   rŠ   r�   Úosr�   Úplaywright.async_apir   r’   r“   rI   r˜   r—   rŒ   r   r›   r•   ÚCUTOFFr   r   r*   rT   ri   r   rK   rb   r´   Ú__name__r   r   r   r   Úrunr5   r   r
   ú<module>r¾      s  ðñ÷ 1× 0× 0Ó 0Ý 1à€Ø€Ø	��Ð€ØˆfÐ+Ð,€	ØˆVÐ+Ð,€Ø€Ø'€	Ø(€Ø|€Ø	€ò.ò-ò,	ò*óXñ(sh�sð sh¨ð sh°sð shÈ#ó shðj ˆzÒÙ(2«Ñ%€Eˆ;˜ Ùˆ&���w˜u˜g ]°;°-¸xÈÀxÐPÔQØ€G‡K�K‘�e˜[¨&°%Ó8Õ9ð r   