Ë
    �…yj‰'  ã                   óv  — 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mZ ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZmZ dZdZdZdZd	d
ddddedœZdZdZdddde› de› d�dœZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy) uû   
è¡¢å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - è¡Œæ”¿è®¸å�¯ çˆ¬è™«
www.qz.gov.cn/col/col1229709391/index.html
åˆ—è¡¨: JPAAS unitbuild API (pageId=1229709391, tagId=å½“å‰�æ �ç›®çš„ajaxåˆ†é¡µ, paramJson åˆ†é¡µ)
è¯¦æƒ…: requests ç›´æŠ“, #zoom æ­£æ–‡ä¿�ç•™ <p>/<table> HTML
é    N)Úurljoin)Úpush_to_searchdbÚnormalize_pub_datezhttps://www.qz.gov.cnÚ
1229709391u%   è¡¢å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-è¡Œæ”¿è®¸å�¯zLhttps://www.qz.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ3084Úi58lqHVn2cokOgipAEjQFÚcolumnu   å½“å‰�æ �ç›®çš„ajaxåˆ†é¡µÚnull)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdé   z
2023-08-10zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8ÚXMLHttpRequestú/col/colz/index.html)z
User-AgentÚAcceptzAccept-LanguagezX-Requested-WithÚRefererc                  óÎ   — t         j                  dd D ]O  } | j                  d«      rt        | j	                  d«      d   «      c S | j                  «       sŒDt        | «      c S  y)u   æ”¯æŒ� --pages=N å’Œçº¯æ•°å­—é   Nz--pages=ú=)ÚsysÚargvÚ
startswithÚintÚsplitÚisdigit)Úas    ú&/root/gov_crawler/crawl_quzhou_xzxk.pyÚparse_pages_argr#   $   sU   € ä�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMð	ð
 ó    c           	      óR  — t        t        «      }t        j                  | t        dœd¬«      |d<   t        d«      D ]¬  }	 t        j                  t        |t        d¬«      }|j                  dk7  r2t        d	| › d
|j                  › d�«       t        j                  d«       Œf|j                  «       }t        |t         «      r"|j                  di «      j                  dd«      nd}|c S  y# t        $ r1}t        d	| › d|› d�«       t        j                  d«       Y d}~Œåd}~ww xY w)u)   é€šè¿‡ unitbuild API èŽ·å�–åˆ—è¡¨é¡µ HTML)ÚpageNoÚpageSizeF©Úensure_asciiÚ	paramJsoné   é   )ÚparamsÚheadersÚtimeoutéÈ   z  [WARN] API page z HTTP z, retryé   ÚdataÚhtmlÚ z error: N)ÚdictÚ
API_PARAMSÚjsonÚdumpsÚ	PAGE_SIZEÚrangeÚrequestsÚgetÚAPI_URLÚHEADERSÚstatus_codeÚprintÚtimeÚsleepÚ
isinstanceÚ	Exception)Úpage_numr-   ÚattemptÚrÚdr3   Úes          r"   Úfetch_list_pagerJ   -   sþ   € ä”*Ó€FÜŸ*™*°ÄiÑ%PÐ_dÔe€Fˆ;ÑÜ˜“8ò ˆð	Ü—‘œW¨V¼WÈbÔQˆAØ�}‰} Ò#ÜÐ*¨8¨*°F¸1¿=¹=¸/ÈÐQÔRÜ—
‘
˜1”ØØ—‘“ˆAÜ8BÀ1ÄdÔ8K�1—5‘5˜ Ó$×(Ñ(¨°Ô4ÐQSˆDØŠKðð øô ò 	ÜÐ& x j°¸¸¸7ÐCÔDÜ�J‰J�q�M‰Mûð	ús    Á A!C,Â"AC,Ã,	D&Ã5'D!Ä!D&c                 ó(  — g }t        j                  d| t         j                  «      D ]ç  }|j                  d«      }t        j                  d|«      }|st        j                  d|«      }|sŒE|j                  d«      |j                  d«      j                  «       }}t        j                  d|«      }|r|j                  d«      nd}|dv s|sŒ§|j                  d	«      st        t        d
t        › d�z   |«      }|j                  |||dœ«       Œé |S )u(   ä»Žåˆ—è¡¨ HTML æ��å�– (title, url, date)z%<li[^>]*class="[^"]*"[^>]*>(.*?)</li>r   z)<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"z)<a[^>]*href="([^"]+)"[^>]*>([^<]{5,})</a>r1   z(\d{4}-\d{2}-\d{2})r4   )u   é¦–é¡µu   ä¸Šé¡µu   é¡µç �u   ä¸‹é¡µu   å°¾é¡µu   åˆ·æ–°Úhttpr   ú/)ÚtitleÚurlÚdate)ÚreÚfinditerÚDOTALLÚgroupÚsearchÚstripr   r   ÚBASE_URLÚCOL_IDÚappend)	r3   ÚitemsÚmÚblockÚamrO   rN   ÚdmrP   s	            r"   Úparse_list_itemsr_   @   sõ   € à€Eä�[‰[ÐAÀ4ÌÏÉÓSò AˆØ—‘˜“
ˆÜ�Y‰YÐCÀUÓKˆÙÜ—‘ÐGÈÓOˆBÙØØ—X‘X˜a“[ "§(¡(¨1£+×"3Ñ"3Ó"5ˆUˆÜ�Y‰YÐ-¨uÓ5ˆÙ ˆr�x‰x˜Œ{ bˆàÐPÑPÑX]ØØ�~‰~˜fÔ%Üœ( x´¨x°qÐ%9Ñ9¸3Ó?ˆCØ�‰˜u¨S¸$Ñ?Õ@ðAð  €Lr$   c                 óÖ   — ddl }|j                  | «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )u(   æ¸…æ´—æ ‡é¢˜: å‰¥å®žä½“/é›¶å®½/è£…é¥°ç¬¦r   Nz&middot;|&nbsp;r4   z[\u200b\ufeff]u   ^[â€¢Â·]\s*)r3   ÚunescaperQ   ÚsubrV   )rN   Úhtml_mods     r"   Úclean_titlerd   V   sY   € ãØ×Ñ˜eÓ$€EÜ�F‰FÐ% r¨5Ó1€EÜ�F‰FÐ$ b¨%Ó0€EÜ�F‰F�> 2 uÓ-€EØ�;‰;‹=Ðr$   c           	      ó(  — t        d«      D ]q  }	 t        j                  | t        d¬«      }d|_        |j
                  dk7  r/t        d|j
                  › d�«       t        j                  d«       Œe|j                  } n yd}t        j                  d|t        j                  «      }|r/t        t        j                  dd|j!                  d«      «      «      }|sAt        j                  d|t        j"                  «      }|rt        |j!                  d«      «      }|sAt        j                  d|t        j$                  «      }|rt        |j!                  d«      «      }d}t        j                  d|t        j"                  «      }|r|j!                  d«      }|s5dD ]0  }t        j                  d|z  |«      }|sŒ|j!                  d«      } n d}	g }
d
}ddlm}  ||d«      }|j+                  d¬«      }|€|j+                  d¬«      }|�r|j-                  dd¬«      D ]”  }|d   j/                  «       }t        j                  d|j1                  «       «      sd |j1                  «       v sŒMt3        | |«      }|j5                  d¬!«      xs |j7                  d"«      d#   }|
j9                  ||d$œ«       Œ– g }|j-                  g d%¢«      D �]  }|j:                  d&k(  rw|j=                  d'«      s"|j+                  d'«      s|j+                  d&«      rŒG|j5                  d(d¬!«      }t        j                  d)d(|«      }|sŒt|j9                  d*|› d+�«       ŒŠ|j:                  d'k(  r|j9                  t?        |«      «       Œ´|j:                  d,k(  sŒÄ|j                  d-d«      }|sŒÙt3        | |«      }|j                  d.d«      }|j9                  d/|› d0|› d1�«       �Œ |
D ]   }|j9                  d2|d3   › d4|d5   › d6�«       Œ" d7jA                  |«      }	|	�s;|j+                  d8¬«      }|�rg }|j-                  g d%¢«      D ]Þ  }|j:                  d&k(  r_|j=                  d'«      sN|j+                  d'«      s=|j+                  d&«      s,|j5                  d(d¬!«      }|sŒ[|j9                  d*|› d+�«       Œq|j:                  d'k(  r|j9                  t?        |«      «       Œ›|j:                  d,k(  sŒ«|j                  d-«      sŒ½|j9                  d/t3        | |d-   «      › d1�«       Œà d7jA                  |«      }	|	s|j5                  d(d¬!«      }|rd*|› d+�nd}	|||	|
fS # t        $ r/}t        d	|› d�«       t        j                  d«       Y d
}~�Œ€d
}~ww xY w)9u:   æ��å�–æ ‡é¢˜/æ—¥æœŸ/æ­£æ–‡(ä¿�ç•™ <p>/<table> HTML)/é™„ä»¶r+   r,   )r.   r/   zutf-8r0   z  [WARN] detail HTTP z retryr1   z  [WARN] detail error: N)NNNNr4   z<h2[^>]*>(.*?)</h2>z<[^>]+>r   zE<meta[^>]*name=["\']ArticleTitle["\'][^>]*content=["\']([^"\']*)["\']z<title>(.*?)</title>zE<meta[^>]*name=["\']PubDate["\'][^>]*content=["\'](\d{4}-\d{2}-\d{2}))u   å�‘å¸ƒæ—¥æœŸu   æˆ�æ–‡æ—¥æœŸu   å�‘å¸ƒæ—¶é—´u   %s[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   )ÚBeautifulSoupzhtml.parserÚzoom)Úid)Úclass_r!   T)Úhrefrj   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|wps)$Údownload)rV   rM   éÿÿÿÿ)ÚnamerO   )ÚpÚtableÚimgrn   ro   ú z\s+z<p>z</p>rp   ÚsrcÚaltz<p><img src="z" alt="z"></p>z<p><a href="rO   z">rm   z</a></p>ú
Úsx_Textcontent)!r:   r;   r<   r>   Úencodingr?   r@   rA   rB   ÚtextrD   rQ   rU   rS   rd   rb   rT   ÚIÚSÚbs4rf   ÚfindÚfind_allrV   Úlowerr   Úget_textr   rY   rm   Úfind_parentÚstrÚjoin)Úpage_urlrF   rG   r3   rI   rN   r[   rP   ÚkwÚcontentÚattachmentsÚ	zoom_htmlrf   Úsouprg   r!   rj   Úfullrm   Ú
body_partsÚelÚtxtrr   rs   ÚattÚotherÚpss                              r"   Úextract_detailr�   _   s  € ä˜“8ò &ˆð	Ü—‘˜X¬wÀÔCˆAØ ˆAŒJØ�}‰} Ò#ÜÐ-¨a¯m©m¨_¸FÐCÔDÜ—
‘
˜1”ØØ—6‘6ˆDÙð&ð &ð €EÜ
�	‰	Ð(¨$´·	±	Ó:€AÙÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆÙÜ�I‰IÐ^Ð`dÔfh×fjÑfjÓkˆÙÜ §¡¨£
Ó+ˆEÙÜ�I‰IÐ-¨t´R·T±TÓ:ˆÙÜ §¡¨£
Ó+ˆEð €DÜ
�	‰	ÐZÐ\`Ôbd×bfÑbfÓg€AÙØ�w‰w�q‹zˆÙØBò 	ˆBÜ—	‘	Ð;¸bÑ@À$ÓGˆAÚØ—w‘w˜q“z�Ùð		ð €GØ€KØ€Iå!Ù˜˜}Ó-€DØ�9‰9˜ˆ9Ó€DØ€|Ø�y‰y ˆyÓ'ˆÚà—‘˜s¨�Ó.ò 	@ˆAØ�V‘9—?‘?Ó$ˆDÜ�y‰yÐBÀDÇJÁJÃLÔQÐU_Ðcg×cmÑcmÓcoÒUoÜ˜x¨Ó.�Ø—z‘z¨�zÓ-ÒD°·±¸C³ÀÑ1D�Ø×"Ñ"¨D¸Ñ#>Õ?ð	@ð ˆ
Ø—-‘-Ò 5Ó6ó 	PˆBØ�w‰w˜#Š~Ø—>‘> 'Ô*¨b¯g©g°gÔ.>À"Ç'Á'È#Ä,ØØ—k‘k #¨T�kÓ2�Ü—f‘f˜V S¨#Ó.�ÚØ×%Ñ%¨¨C¨5° oÕ6Ø—‘˜GÒ#Ø×!Ñ!¤# b£'Õ*Ø—‘˜EÓ!Ø—f‘f˜U BÓ'�ÚÜ" 8¨SÓ1�DØŸ&™& ¨Ó+�CØ×%Ñ%¨°d°V¸7À3À%ÀvÐ&NÖOð	Pð" ò 	RˆCØ×Ñ ¨S°©Z¨L¸¸3¸v¹;¸-ÀxÐPÕQð	Rà—)‘)˜JÓ'ˆò Ø—	‘	Ð!1�	Ó2ˆÚØˆBØ—n‘nÒ%:Ó;ò T�Ø—7‘7˜c’>¨"¯.©.¸Ô*AÈ"Ï'É'ÐRYÔJZÐce×cjÑcjÐknÔcoØŸ+™+ c°˜+Ó6�CÚØŸ	™	 C¨ u¨D /Õ2Ø—W‘W Ò'Ø—I‘Iœc "›gÕ&Ø—W‘W Ó%¨"¯&©&°­-Ø—I‘I ¬g°hÀÀ5Á	Ó.JÐ-KÈ6ÐRÕSðTð —i‘i “mˆGÙØ—-‘- ¨4�-Ó0ˆCÙ),˜˜C˜5 ‘o°"ˆGà�$˜ Ð,Ð,øôy ò 	ÜÐ+¨A¨3¨fÐ5Ô6Ü�J‰J�q�MŠMûð	ús   �A UÁ1UÕ	VÕ"$VÖVc                  ó€  — t        «       } | €d} t        d| › dt        › d�«       g }t        «       }t	        d| dz   «      D �]  }t        |«      }|rt        |«      dk  rt        d|› d�«        nÛt        |«      }|D �cg c]  }|d	   |vsŒ|‘Œ }}|D ]  }|j                  |d	   «       Œ |j                  |«       t        d|› d
t        |«      › dt        |«      › dt        |«      › �«       |rA|D �cg c]  }|d   sŒ	|d   ‘Œ }}|r't        |«      t        k  rt        dt        › d�«        nt        j                  d«       �Œ
 t        dt        |«      › d�«       g }	t        |«      D ]¹  \  }
}t        |d	   «      \  }}}}|s|d   }|s|d   }|st        d|d d › �«       |	j!                  t        ||||d	   |d	   d|rt#        j$                  |d¬«      nddœ«       |
dz   dz  dk(  r#t        d|
dz   › dt        |«      › d|d d › �«       t        j                  d «       Œ» t'        |	t        ¬!«       t        d"d#› �«       t        d$t        › �«       t        d%t        |	«      › �«       t        d&t        d'„ |	D «       d(¬)«      › d*t)        d+„ |	D «       d(¬)«      › �«       t        d#› «       y c c}w c c}w ),Né<   z[AutoPg] max_pages=z (SITE=ú)r   é2   z  Page u   : ç©ºé¡µ, å�œæ­¢rO   z: u   æ�¡(æ–°u   ) ç´¯è®¡rP   u     å·²è¾¾ CUTOFF u   , å�œæ­¢ç¿»é¡µg      à?u   
å…± u!    æ�¡åˆ—è¡¨é¡¹, å¼€å§‹æŠ“è¯¦æƒ…...rN   u     [WARN] ç©ºæ­£æ–‡: u   è¡Œæ”¿è®¸å�¯Fr(   r4   )Ú	site_namerN   Úpub_dater„   Ú
source_urlrO   Úcategoryr…   r   r   z  [rM   u
   ] æœ€æ–°: é(   g333333Ó?)Úbatch_labelrt   z2==================================================u   ç«™ç‚¹: u   é‡‡é›†æ�¡æ•°: u   æ—¥æœŸèŒƒå›´: c              3   ó2   K  — | ]  }|d    sŒ	|d    –— Œ y­w©r•   N© ©Ú.0rG   s     r"   ú	<genexpr>zmain.<locals>.<genexpr>  s   è ø€ ÒP°!À!ÀJÃ-  *¥ÑPùó   ‚
�
ú-)Údefaultz ~ c              3   ó2   K  — | ]  }|d    sŒ	|d    –— Œ y­wr›   rœ   r�   s     r"   rŸ   zmain.<locals>.<genexpr>  s5   è ø€ ò  hYÐz{ð  KLð  MWó  KXÐhiÐjtÕhuñ  hYùr    )r#   r@   Ú	SITE_NAMEÚsetr:   rJ   Úlenr_   ÚaddÚextendÚminÚCUTOFFrA   rB   Ú	enumerater�   rY   r7   r8   r   Úmax)Ú	max_pagesrZ   Ú	seen_urlsÚpgr3   Ú
page_itemsÚxÚ	new_itemsÚdatesÚresultsÚiÚitemrN   rP   r„   r…   s                   r"   Úmainr·   É   sû  € ÜÓ!€IØÐØˆ	ä	Ð 	˜{¨'´)°¸AÐ
>Ô?Ø€EÜ“€IÜ�A�y 1‘}Ó%ó ˆÜ˜rÓ"ˆÙ”s˜4“y 2’~Ü�G˜B˜4Ð/Ð0Ô1ÙÜ% dÓ+ˆ
Ø *ÖH˜1¨a°©h¸iÒ.G’QÐHˆ	ÐHØò 	$ˆAØ�M‰M˜!˜E™(Õ#ð	$à�‰�YÔÜ�˜�t˜2œc *›oÐ.¨g´c¸)³nÐ5EÀXÌcÐRWËjÈ\ÐZÔ[áØ(1Ö? 1°Q°v³Y�Q�v“YÐ?ˆEÐ?Ùœ˜U›¤fÒ,ÜÐ(¬¨°Ð?Ô@ÙÜ�
‰
�3Žð#ô& 
ˆF”3�u“:�,Ð?Ð
@ÔAØ€GÜ˜UÓ#ò ‰ˆˆ4Ü,:¸4À¹;Ó,GÑ)ˆˆt�W˜kÙØ˜‘MˆEÙØ˜‘<ˆDÙÜÐ(¨¨s°¨¨Ð5Ô6à�‰Ü"ØØØØ˜u™+Ø˜‘;Ø&ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ô 		ð �‰E�R‰<˜1ÒÜ�C˜˜!™�u˜Aœc %›j˜\¨°E¸#¸2°J°<Ð@ÔAÜ�
‰
�3�ð+ô. �W¬)Õ4Ü	ˆBˆvˆhˆ-ÔÜ	ˆH”Y�KÐ
 Ô!Ü	ˆNœ3˜w›<˜.Ð
)Ô*Ü	ˆNœ3ÑP°wÔPÐZ]Ô^Ð_Ð_bÔcfñ  hYð  @Gô  hYð  cfô  dgð  chð  iô  jÜ	ˆVˆHÕùòW Iùò @s   Á?J6ÂJ6Ã6
J;ÄJ;Ú__main__) Ú__doc__Úosr   rQ   rA   r7   r;   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r   rW   rX   r¤   r=   r6   r9   rª   r>   r#   rJ   r_   rd   r�   r·   Ú__name__rœ   r$   r"   ú<module>rÃ      sÞ   ðñ÷ × Ó Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ß <à"€Ø	€Ø3€	Ø
X€à¨Ø'°XØ(°fØñ	€
ð €	Ø	€ð DØOØ0Ø(Ø�˜8 F 8¨;Ð7ñ€òòò&ò,òh-òT9ðv ˆzÒÙ…Fð r$   