Ë
    V_Š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mZmZ ddl	m
Z
 ddlmZ dZdZeez   dz   Zd	Zd
ZdZdZddddœZdZ ej,                  «       Zej0                  j3                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u¼   
Crawler for é�’æ²³åŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š
CMS: webBuilder (weblightfront)
Site: www.xjqh.gov.cn/xwzx/001006/
20 items/page. Pages: secondpage.html (p1) â†’ 2.html ~ 5.html (p2-p5)
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttp://www.xjqh.gov.cnz/xwzx/001006z/secondpage.htmlu"   é�’æ²³åŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šé   é   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.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)z
User-AgentÚAcceptzAccept-Languagec                 ó^   — t         j                  | t        ¬«      }d|_        |j                  S )N)Útimeoutzutf-8)ÚsessionÚgetÚTIMEOUTÚencodingÚtext)ÚurlÚresps     ú$/root/gov_crawler/crawl_xjqh_tzgg.pyÚfetchr       s%   € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ�9‰9Ðó    c                 ó^  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  dd¬«      D ]ñ  }|j                  dd¬	«      }|sŒ|j                  d
«      xs |j	                  d¬«      }|d   j                  «       }|r|sŒV|j                  dd¬«      }|r|j	                  d¬«      nd}	|j                  d«      r
t        |z   }n3|j                  d«      s"t        t        z   dz   |j                  d«      z   }|j                  |j                  «       ||	dd f«       Œó |S )z3Parse list page, return list of (title, url, date).úhtml.parserÚulzwb-data-item©Úclass_Úlizwb-data-listÚaT©ÚhrefÚtitle©Ústripr   Úspanzwb-data-dateÚ ú/Úhttpz./Né
   )r   ÚfindÚfind_allr   Úget_textr"   Ú
startswithÚBASE_URLÚ	LIST_PATHÚlstripÚappend)
ÚhtmlÚsoupÚitemsr   r   r   r    r   Ú	date_spanÚdates
             r   Ú
parse_listr5   &   s+  € ä˜˜}Ó-€DØ€Eð 
�‰�4 ˆÓ	/€BÙØˆà�k‰k˜$ ~ˆkÓ6ò 7ˆØ�G‰G�C˜dˆGÓ#ˆÙØð —‘�g“Ò8 !§*¡*°4 *Ó"8ˆØ�‰y�‰Ó ˆÙ™DØð —G‘G˜F¨>�GÓ:ˆ	Ù1:ˆy×!Ñ!¨Ð!Ô-Àˆð �?‰?˜3ÔÜ˜d‘?‰DØ—‘ Ô(ÜœiÑ'¨#Ñ-°·±¸DÓ0AÑAˆDà�‰�e—k‘k“m T¨4°°¨9Ð5Õ6ð+7ð, €Lr   c           	      óà  — t        | d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}|j                  dddi¬«      }|r=|j                  d«      r,t	        j
                  d	|d   «      }|r|j                  d
«      }d}|j                  dd¬«      }	|	�r¾g }
|	j                  D �]›  }t        |dd«      sŒ|j                  j                  «       }|dk(  �r#g }|j                  D ]ê  }t        |t        «      r%|j                  «       }|sŒ&|j                  |«       Œ8|j                  dk(  rp|j                  dd«      j                  «       }|j                  d¬«      }|r'|r%t!        ||«      }|j                  d|› d|› d�«       Œ¢|sŒ¥|j                  |«       Œ·t#        |d«      sŒÄ|j                  dd¬«      }|sŒÚ|j                  |«       Œì dj%                  |«      }|s�ŒB|
j                  |«       �ŒU|dk(  r˜g }|j'                  d«      D ]\  }|j'                  ddg«      D �cg c]  }|j                  dd¬«      ‘Œ }}|sŒ7|j                  ddj%                  |«      z   dz   «       Œ^ |s�ŒÐ|
j                  d j%                  |«      «       �Œò|d!k(  rg|j                  d"d«      }|s�Œ|j                  d#d«      }t!        ||«      }|r|
j                  d$|› d|› d�«       �ŒG|
j                  d%|› d�«       �Œ^|d&v s�Œd|j                  dd¬«      }|s�Œ{t)        |«      d'kD  s�Œ‹|
j                  |«       �Œž d(j%                  |
«      }|	xs |}g }|j'                  dd¬)«      D ]‘  }|d   j                  «       j                  «       }t	        j
                  d*|«      sŒ;t!        ||d   j                  «       «      }|j                  |j                  d¬«      xs |j+                  d+«      d,   |d-œ«       Œ“ t)        |j                  «       «      d.k  r$|r"d/|› d0|› d1�}|D ]  }|d2|d3   › d|d4   › d5�z  }Œ ||||fS c c}w )6zParse detail page content.r   r$   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})é   Údivzewb-article-infor   NÚpr   r   Tr!   ú[z](ú)r*   ú ÚtableÚtrÚtdÚthz| z | z |ú
ÚimgÚsrcÚaltz![z![]()r>   r#   Úfontr   z

r   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|txt)$r%   éÿÿÿÿ)r    r   r	   z<p><a href="z">u   </a></p>

é™„ä»¶åˆ—è¡¨ï¼š
z  - [r    r   z)
)r   r(   r   r"   ÚreÚsearchÚgroupÚchildrenÚgetattrr8   ÚlowerÚcontentsÚ
isinstanceÚstrr/   r*   r   ÚhasattrÚjoinr)   ÚlenÚsplit)r0   r   r1   r    Ú
meta_titleÚpub_dateÚ	meta_dateÚmÚcontent_htmlÚinfo_divÚpartsÚchildÚtagÚp_partsÚelemÚtxtÚahrefÚatxtÚ	full_hrefÚ
table_rowsrD   rE   ÚcellsrI   rJ   Úfull_srcÚscopeÚattachmentsr   Úfull_urlÚatts                                  r   Úparse_detailrp   I   sS  € ä˜˜}Ó-€Dð €EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆð €HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØ—w‘w˜q“zˆHð €LØ�y‰y˜Ð'9ˆyÓ:€HÚàˆØ×&Ñ&ó 1	&ˆEÜ˜5 &¨$Ô/ØØ—*‘*×"Ñ"Ó$ˆCØ�c‹zà�Ø!ŸN™Nò 0�DÜ! $¬Ô,Ø"Ÿj™j›l˜ÚØ#ŸN™N¨3Õ/ØŸ™ cÒ)Ø $§¡¨°Ó 4× :Ñ :Ó <˜Ø#Ÿ}™}°4˜}Ó8˜Ù ¡TÜ(/°°UÓ(;˜IØ#ŸN™N¨Q¨t¨f°B°y°kÀÐ+CÕDÚ!Ø#ŸN™N¨4Õ0Ü   zÕ2Ø"Ÿm™m¨C°t˜mÓ<˜ÚØ#ŸN™N¨3Õ/ð!0ð" —h‘h˜wÓ'�ÛØ—L‘L Ö%Ø˜’à�
ØŸ.™.¨Ó.ò K�BØDFÇKÁKÐQUÐW[ÐP\ÓD]Ö^¸b˜RŸ[™[¨°D˜[Õ9Ð^�EÐ^ÚØ"×)Ñ)¨$°·±¸EÓ1BÑ*BÀTÑ*IÕJðKó Ø—L‘L §¡¨:Ó!6Ö7Ø˜’Ø—i‘i  rÓ*�ÛØŸ)™) E¨2Ó.�CÜ& s¨CÓ0�HÙØŸ™ r¨#¨¨b°°
¸!Ð%<Ö=àŸ™ t¨H¨:°QÐ%7Ö8ØÐ/Ó/à—n‘n S°�nÓ5�Ûœ3˜s›8 aœ<Ø—L‘L Ö%ðc1	&ðf —{‘{ 5Ó)ˆð Ò˜€EØ€KØ�^‰^˜C dˆ^Ó+ò ˆØ�&‘	—‘Ó!×'Ñ'Ó)ˆÜ�9‰9Ð>ÀÕFÜ˜s A f¡I§O¡OÓ$5Ó6ˆHØ×ÑØŸ™¨$˜Ó/ÒJ°8·>±>À#Ó3FÀrÑ3JØñ õ ð	ô ˆ<×ÑÓÓ  2Ò%©+Ø% c U¨"¨U¨GÐ3PÐQˆØò 	DˆCØ˜e C¨¡L >°°C¸±J°<¸sÐCÑC‰Lð	Dð �(˜L¨+Ð5Ð5ùòQ _s   ÉQ+c                 ó  — t        j                  «       t        t        ¬«      z
  }g }| D ]6  \  }}}	 t        j                  |d«      }||k\  r|j                  |||f«       Œ8 |S # t        t        f$ r |j                  |||f«       Y Œ`w xY w)z>For incremental mode: only keep items within INCREMENTAL_DAYS.)Údaysz%Y-%m-%d)r   Únowr   ÚINCREMENTAL_DAYSÚstrptimer/   Ú
ValueErrorÚ
IndexError)r2   ÚcutoffÚfilteredr    r   Údate_strÚ	item_dates          r   Úincremental_filterr|   «   s–   € ä�\‰\‹^œiÔ-=Ô>Ñ>€FØ€HØ %ò 4Ñˆˆs�Hð	4Ü ×)Ñ)¨(°JÓ?ˆIØ˜FÒ"Ø—‘ ¨¨XÐ 6Ô7øð	4ð €Oøô œJÐ'ò 	4Ø�O‰O˜U C¨Ð2Ö3ð	4ús   ²/A%Á%#BÂ
Bc                  óh  — t        d„ dD «       «      } t        g}t        dt        dz   «      D ]%  }|j	                  t
        t        z   d|› d�z   «       Œ' g }t        |«      D ][  \  }}	 t        |«      }t        |«      }t        d|dz   › dt        |«      › d	�t        j                  ¬
«       |j                  |«       Œ] t        dt        |«      › �t        j                  ¬
«       | r:t!        |«      }t        dt"        › dt        |«      › d	�t        j                  ¬
«       t%        «       }	g }
|D ]/  }|d   |	vsŒ|	j'                  |d   «       |
j	                  |«       Œ1 t        dt        |
«      › �t        j                  ¬
«       g }|
D ]…  \  }}}	 t        |«      }t)        ||«      \  }}}}|xs |}|xs |}|j	                  |||||rt+        j,                  |d¬«      ndt.        dœ«       t        d|d d › �t        j                  ¬
«       Œ‡ |D ]"  }t        t+        j,                  |d¬«      «       Œ$ y # t        $ r2}t        d|dz   › d|› d|› �t        j                  ¬
«       Y d }~�Œd }~ww xY w# t        $ r,}t        d|› d|› �t        j                  ¬
«       Y d }~�Œd }~ww xY w)Nc              3   ó@   K  — | ]  }|t         j                  v –— Œ y ­w)N)ÚsysÚargv)Ú.0Úargs     r   ú	<genexpr>zmain.<locals>.<genexpr>º   s   è ø€ Ò\¨S˜¤§¡œÑ\ùs   ‚)z--incrementalÚincrementalÚincé   r=   r%   z.htmlzPage z: z items)Úfilez error (z): zTotal items from list: zAfter incremental filter (zd): zUnique items: F)Úensure_asciir$   )r    Úpage_urlÚpublish_dater;   rm   Ú	site_namez  OK: é2   z  ERR )ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr/   r,   r-   Ú	enumerater   r5   ÚprintrX   r   ÚstderrÚextendÚ	Exceptionr|   rt   ÚsetÚaddrp   ÚjsonÚdumpsÚ	SITE_NAME)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr   r0   r2   ÚeÚseenÚunique_itemsÚitemÚresultsr    Ú	list_dateÚ	det_titleÚdet_dater;   rm   Úfinal_titleÚ
final_dateÚrs                         r   Úmainr«   ¹   s¯  € ÜÑ\Ð4[Ô\Ó\€Nô �
€IÜ�1”i !‘mÓ$ò >ˆØ×Ñœ¤IÑ-°!°A°3°e°Ñ<Õ=ð>ð €IÜ˜iÓ(ò G‰ˆˆSð	GÜ˜“:ˆDÜ˜tÓ$ˆEÜ�E˜#˜a™%˜ ¤3 u£: ,¨fÐ5¼C¿J¹JÕGØ×Ñ˜UÕ#ðGô 
Ð#¤C¨	£NÐ#3Ð
4¼3¿:¹:ÕFáÜ& yÓ1ˆ	ÜÐ*Ô+;Ð*<¸DÄÀYÃÐ@PÐPVÐWÔ^a×^hÑ^hÕiô ‹5€DØ€LØò &ˆØ�‰7˜$ÒØ�H‰H�T˜!‘WÔØ×Ñ Õ%ð&ô
 
ˆNœ3˜|Ó,Ð-Ð
.´S·Z±ZÕ@à€GØ!-ò 8Ñˆˆs�Ið	8Ü˜“:ˆDÜ8DÀTÈ3Ó8OÑ5ˆI�x ¨+Ø#Ò, uˆKØ!Ò. YˆJØ�N‰NØ$ØØ *Ø"ÙNYœtŸz™z¨+ÀEÕJÐ_aÜ&ñô ô �F˜; s¨Ð+Ð,Ð-´C·J±JÖ?ð8ð& ò 1ˆÜŒd�j‰j˜¨Ô/Õ0ñ1øôO ò 	GÜ�E˜#˜a™%˜ ¨¨¨S°°Ð4¼3¿:¹:×FÓFûð	GûôF ò 	8Ü�F˜3˜%˜r ! Ð%¬C¯J©J×7Ó7ûð	8ús2   Á)AH>ÆA>I<È>	I9É'I4É4I9É<	J1Ê!J,Ê,J1Ú__main__) Ú__doc__ÚrequestsrM   r˜   r   ÚosÚtempfiler   r   Úbs4r   Úurllib.parser   r,   r-   rŽ   rš   rt   r�   ÚPER_PAGEÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r5   rp   r|   r«   Ú__name__© r   r   ú<module>rº      sº   ðñ÷ -× ,× ,ß (Ý Ý  à#€Ø€	Ø�iÑÐ"4Ñ4€Ø0€	ØÐ Ø€	Ø€ð DØOØ0ñ€ð
 €à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò òF_6òDò71ðt ˆzÒÙ…Fð r   