Ë
    9JŠ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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dddœZdZ ej(                  «       Zej,                  j/                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u´   
Crawler for æ–°ç–†ç”Ÿäº§å»ºè®¾å…µå›¢ç¬¬ä¸‰å¸ˆå›¾æœ¨èˆ’å…‹å¸‚ - é€šçŸ¥å…¬å‘Š
CMS: è‡ªå®šä¹‰, ul.list_rgterjiåˆ—è¡¨ + div.contentmain#zoomæ­£æ–‡
Site: www.xjbtnss.gov.cn/xwzx/tzgg/
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttp://www.xjbtnss.gov.cnz
/xwzx/tzggz/index.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-Languageé   c                 ó^   — t         j                  | t        ¬«      }d|_        |j                  S )N)Útimeoutzutf-8)ÚsessionÚgetÚTIMEOUTÚencodingÚtext)ÚurlÚresps     ú'/root/gov_crawler/crawl_xjbtnss_tzgg.pyÚfetchr      s%   € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ�9‰9Ðó    c           	      óŽ  — t        | d«      }g }|j                  dd¬«      D �]  }|j                  dd¬«      D �]  }|j                  dd	¬
«      }|sŒ|j                  d	¬«      }|d   j	                  «       }|r|sŒD|j                  d«      }|r|j                  d	¬«      nd}	|j                  d«      rt        t        z   dz   |dd z   }nN|j                  d«      r
t        |z   }n3|j                  d«      s"t        t        z   dz   |j                  d«      z   }|j                  |j	                  «       ||	dd f«       �Œ �Œ" |S )u3   Parse list page â€” ul.list_rgterji > li > a + spanúhtml.parserÚulÚlist_rgterji©Úclass_ÚliF©Ú	recursiveÚaT©Úhref©Ústripr"   ÚspanÚ z./ú/é   NÚhttpé
   )
r   Úfind_allÚfindÚget_textr$   Ú
startswithÚBASE_URLÚ	LIST_PATHÚlstripÚappend)
ÚhtmlÚsoupÚitemsr   r   r    Útitler"   Ú	date_spanÚdates
             r   Ú
parse_listr9   #   s9  € ä˜˜}Ó-€DØ€EØ�m‰m˜D¨ˆmÓ8ó ;ˆØ—+‘+˜d¨e�+Ó4ó 	;ˆBØ—‘˜ $�Ó'ˆAÙØØ—J‘J T�JÓ*ˆEØ�V‘9—?‘?Ó$ˆDÙ¡ØØŸ™ ›ˆIÙ5>�9×%Ñ%¨DÐ%Ô1ÀBˆDà�‰˜tÔ$Ü¤)Ñ+¨cÑ1°D¸¸°HÑ<‘Ø—‘ Ô%Ü $‘‘Ø—_‘_ VÔ,Ü¤)Ñ+¨cÑ1°D·K±KÀÓ4EÑE�Ø�L‰L˜%Ÿ+™+›-¨¨t°C°R¨yÐ9Ö:ò#	;ð;ð& €Lr   c           	      óâ	  — t        | d«      }d}|j                  d«      }|r|j                  d¬«      }|s;|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 }t        «       }|
j                  g d¢d¬«      D �]â  }t        |«      |v rŒ|j                  t        |«      «       |j                  j                  «       }|dk(  �r¢g }|j                  D �]h  }t        |t         «      r%|j	                  «       }|sŒ'|j#                  |«       Œ9|j                  dk(  rp|j                  dd«      j	                  «       }|j                  d¬«      }|r'|r%t%        ||«      }|j#                  d|› d|› d�«       Œ£|sŒ¦|j#                  |«       Œ¸|j                  dk(  rl|j                  t        |«      «       |j                  dd«      }|sŒö|j                  dd«      }t%        ||«      }|j#                  |rd|› d�nd|› d�«       �Œ3t'        |d«      s�ŒA|j                  dd¬«      }|s�ŒX|j#                  |«       �Œk dj)                  |«      }|s�ŒÛ|j#                  |«       �Œî|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�Œi|j#                  d&j)                  |«      «       �Œ‹|dk(  s�Œ’|j                  dd«      }|s�Œ¨|j                  dd«      }t%        ||«      }|j#                  |rd|› d�nd|› d�«       �Œå 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|› d|› d.�}	|D ]  } |	d/| d0   › d1| d2   › d3�z  }	Œ |||	|fS c c}w )4uC   Parse detail page â€” div.TRS_Editor with <p> preserving <a> links.r   r&   Úh1Tr#   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})é   ÚdivÚ
TRS_Editorr   )ÚpÚtableÚimgr   rE   r    r"   z<p><a href="z">z</a></p>rG   ÚsrcÚaltu   ">æŸ¥çœ‹å›¾ç‰‡</a></p>r-   ú rF   ÚtrÚtdÚthz| z | z |ú
z

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

é™„ä»¶åˆ—è¡¨ï¼š
z  - [r6   z](r   z)
)r   r,   r-   r   r$   ÚreÚsearchÚgroupÚsetr+   ÚidÚaddr=   ÚlowerÚcontentsÚ
isinstanceÚstrr2   r   ÚhasattrÚjoinÚsplitÚlen)!r3   r   r4   r6   r;   Ú
meta_titleÚpub_dateÚ	meta_dateÚmÚcontent_htmlÚcontent_divÚpartsÚ	processedÚchildÚtagÚp_partsÚelemÚtxtÚahrefÚatxtÚ	full_hrefrH   rI   Úfull_srcÚ
table_rowsrK   rL   ÚcellsÚscopeÚattachmentsr    Úfull_urlÚatts!                                    r   Úparse_detailru   =   sá  € ä˜˜}Ó-€Dð €EØ	�‰�4‹€BÙ	Ø—‘ $�Ó'ˆÙØ—Y‘Y˜v¨f°nÐ-E�YÓFˆ
Ù˜*Ÿ.™.¨Ô3Ø˜yÑ)×/Ñ/Ó1ˆEð €HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØ—w‘w˜q“zˆHð €LØ—)‘)˜E¨,�)Ó7€KÚØˆÜ“Eˆ	Ø ×)Ñ)Ò*?È4Ð)ÓPó /	NˆEÜ�%‹y˜IÑ%ØØ�M‰Mœ"˜U›)Ô$Ø—*‘*×"Ñ"Ó$ˆCØ�c‹zØ�Ø!ŸN™Nó 0�DÜ! $¬Ô,Ø"Ÿj™j›l˜ÚØ#ŸN™N¨3Õ/ØŸ™ cÒ)Ø $§¡¨°Ó 4× :Ñ :Ó <˜Ø#Ÿ}™}°4˜}Ó8˜Ù ¡TÜ(/°°UÓ(;˜IØ#ŸN™N¨\¸)¸ÀBÀtÀfÈHÐ+UÕVÚ!Ø#ŸN™N¨4Õ0ØŸ™ eÒ+Ø!Ÿ™¤b¨£hÔ/Ø"Ÿh™h u¨bÓ1˜ÚØ"&§(¡(¨5°"Ó"5˜CÜ'.¨s°CÓ'8˜HØ#ŸN™NÑ^a¨\¸(¸ÐCYÑ+ZÐiuÐv~Ðuð  @Vð  hWö  XÜ   zÖ2Ø"Ÿm™m¨C°t˜mÓ<˜ÛØ#ŸN™N¨3Ö/ð/0ð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Ø—L‘LÑTW <°¨zÐ9OÑ!PÐ_kÐltÐkuð  vLð  ^Mö  Nð_/	Nð` —{‘{ 5Ó)ˆð Ò˜4€EØ€KØ�^‰^˜C dˆ^Ó+ò nˆØ�&‘	—‘Ó!×'Ñ'Ó)ˆÜ�9‰9Ð>ÀÕFÜ˜s A f¡I§O¡OÓ$5Ó6ˆHØ×Ñ¨¯©¸$¨Ó)?Ò)ZÀ8Ç>Á>ÐRUÓCVÐWYÑCZÐckÑlÕmð	nô ˆ<×ÑÓÓ  2Ò%©+Ø% c U¨"¨U¨GÐ3PÐQˆØò 	DˆCØ˜e C¨¡L >°°C¸±J°<¸sÐCÑC‰Lð	Dð �(˜L¨+Ð5Ð5ùò7 _s   ÌS,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)N)Údaysz%Y-%m-%d)r   Únowr   ÚINCREMENTAL_DAYSÚstrptimer2   Ú
ValueErrorÚ
IndexError)r5   ÚcutoffÚfilteredr6   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                  óR  — t        d„ dD «       «      } t        g}t        dt        «      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                  ¬	«       | r2t!        |«      }t        dt        |«      › �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ÚincrB   z/index_z.htmlzPage z: z items)Úfilez error (z): zTotal: zIncremental: zUnique: F)Úensure_asciir&   )r6   Úpage_urlÚpublish_dater@   rr   Ú	site_namez  OK: é2   z  ERR )ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr2   r/   r0   Ú	enumerater   r9   Úprintr]   r„   ÚstderrÚextendÚ	Exceptionr�   rS   rU   ru   ÚjsonÚdumpsÚ	SITE_NAME)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr   r3   r5   ÚeÚseenÚunique_itemsÚitemÚresultsr6   Ú	list_dateÚ	det_titleÚdet_dater@   rr   Úfinal_titleÚ
final_dateÚrs                         r   Úmainr­   ©   sš  € ÜÑ\Ð4[Ô\Ó\€NÜ�
€IÜ�1”iÓ ò DˆØ×Ñœ¤IÑ-°'¸!¸¸EÐ0BÑBÕCðDð €IÜ˜iÓ(ò G‰ˆˆSð	GÜ˜“:ˆDÜ˜tÓ$ˆEÜ�E˜#˜a™%˜ ¤3 u£: ,¨fÐ5¼C¿J¹JÕGØ×Ñ˜UÕ#ðGô 
ˆG”C˜	“NÐ#Ð
$¬3¯:©:Õ6ÙÜ& yÓ1ˆ	Ü�œc )›nÐ-Ð.´S·Z±ZÕ@ä‹5€DØ€LØò &ˆØ�‰7˜$ÒØ�H‰H�T˜!‘WÔØ×Ñ Õ%ð&ô
 
ˆH”S˜Ó&Ð'Ð
(¬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øôI ò 	GÜ�E˜#˜a™%˜ ¨¨¨S°°Ð4¼3¿:¹:×FÓFûð	GûôB ò 	8Ü�F˜3˜%˜r ! Ð%¬C¯J©J×7Ó7ûð	8ús2   Á&AH3ÆA>I1È3	I.È<'I)É)I.É1	J&É:!J!Ê!J&Ú__main__)Ú__doc__ÚrequestsrP   rš   r„   Úosr   r   Úbs4r   Úurllib.parser   r/   r0   r’   rœ   ry   r”   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r9   ru   r�   r­   Ú__name__© r   r   ú<module>rº      s³   ðñ÷
 #× "Ó "ß (Ý Ý  à&€Ø€	Ø�iÑ -Ñ/€Ø3€	ØÐ Ø€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òòò4\6ò~
ò21ðj ˆzÒÙ…Fð r   