Ë
    *—…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
Z
ddlZdZde› �ZdZdZdZeede› d�d	d
œZ e
j$                  «       Zde_        e
j*                  e_        dd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u¡  æ¸©å®¿åŽ¿äººæ°‘æ”¿åºœ é€šçŸ¥å…¬å‘Š çˆ¬è™« (wszf.gov.cn)
- åˆ—è¡¨: POST /xjcms/openapi/t/info/list.do (å�‚æ•° base64 ç¼–ç �, channelid=1250, 25æ�¡/é¡µ, å…±25é¡µ616æ�¡)
- è¯¦æƒ…: https://www.wszf.gov.cn/zwgk/tzgg/YYYYMMDD/i{iid}.html
- æ­£æ–‡: div#zoom, æ ‡é¢˜ h1.main_5121, æ—¥æœŸ li.main_51221, æ�¥æº� li.main_51222
- å›¾ç‰‡/é™„ä»¶ç›¸å¯¹è·¯å¾„è½¬ç»�å¯¹ URL
ç”¨æ³•: python3 crawl_wszf_tzgg.py [--pages N] [--out FILE]
é    Nzwww.wszf.gov.cnúhttps://Ú1250é   zuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36z/zwgk/tzgg/index.htmlz!application/x-www-form-urlencoded)ÚHostz
User-AgentÚRefererzContent-TypeFc                 ó  — t         j                  j                  | t        |¬«      }t         j                  j	                  ||t
        ¬«      5 }|j                  «       j                  dd«      cd d d «       S # 1 sw Y   y xY w)N)ÚheadersÚdata)ÚtimeoutÚcontextúutf-8Úreplace)ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚdecode)Úurlr
   r   ÚreqÚrs        ú$/root/gov_crawler/crawl_wszf_tzgg.pyÚfetchr      sa   € Ü
�.‰.×
 Ñ
  ¬g¸DÐ
 Ó
A€CÜ	�‰×	Ñ	 ¨W¼cÐ	Ó	Bð 3ÀaØ�v‰v‹x�‰˜w¨	Ó2÷3÷ 3ò 3ús   Á A7Á7B c           
      ó°  — t         t        | «      t        t        «      dœ}|j                  «       D ��ci c]@  \  }}|t	        j
                  t        |«      j                  «       «      j                  «       “ŒB }}}t        j                  j                  |«      j                  «       }t        t        › d�|¬«      }t        j                  |«      S c c}}w )N)Ú	channelidÚpagenoÚpagesizez/xjcms/openapi/t/info/list.do)r
   )Ú	CHANNELIDÚstrÚ	PAGE_SIZEÚitemsÚbase64Ú	b64encodeÚencoder   r   ÚparseÚ	urlencoder   ÚBASEÚjsonÚloads)r   ÚparamsÚkÚvÚencÚbodyÚraws          r   Úget_listr2   $   s›   € Ü$´°F³ÌÌYËÑX€FØEKÇ\Á\Ã^×
T¹T¸QÀˆ1Œf×Ñœs 1›vŸ}™}›Ó/×6Ñ6Ó8Ñ8Ð
T€CÑ
TÜ�<‰<×!Ñ! #Ó&×-Ñ-Ó/€DÜ
”4�&Ð5Ð6¸TÔ
B€CÜ�:‰:�c‹?Ðùó Us   ´ACc                 óÂ  — t        | «      }t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       nd}t        j                  d|«      }|r|j                  d«      j                  «       nd}t        j                  d|«      }|r|j                  d«      j                  «       nd}||||fS )u"   è¿”å›ž (html, title, date, source)z9<h1[^>]*class="[^"]*main_5121[^"]*"[^>]*>\s*(.*?)\s*</h1>ú<[^>]+>Ú é   Nu!   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*([0-9\-: ]+)u!   æ�¥æº�[ï¼š:]\s*([^<\s][^<]{0,30}))r   ÚreÚsearchÚSÚsubÚgroupÚstrip)r   ÚhtmlÚmÚtitleÚdateÚsources         r   Úfetch_detailrB   ,   s²   € ä�‹:€DÜ
�	‰	ÐNÐPTÔVX×VZÑVZÓ[€AÙ:;ŒB�F‰F�:˜r 1§7¡7¨1£:Ó.×4Ñ4Ô6À€EÜ
�	‰	Ð6¸Ó=€AÙ!"ˆ1�7‰7�1‹:×ÑÔ¨€DÜ
�	‰	Ð6¸Ó=€AÙ#$ˆQ�W‰W�Q‹Z×ÑÔ¨$€FØ�˜˜fÐ$Ð$ó    c                 óš  — ddl m}  || d«      }|j                  dd¬«      }|sy d }|j                  dd¬«      D ]  }|} n |€|}|j                  d	d
g«      D ]  }|j	                  «        Œ |j                  dd¬«      D ]'  }|d   j                  d«      sŒ|j	                  «        Œ) t        |j                  d«      «      D ]\  }|j                  d«      rŒ|j                  d«      rŒ'|j                  dd¬«      rŒ;|j                  d«      rŒM|j                  «        Œ^ dj                  d„ |j                  D «       «      }	t        j                  dd|	t        j                  ¬«      }	t        j                  dd|	t        j                  ¬«      }	t        j                  dd|	t        j                  ¬«      }	t        j                  ddt        › d�|	«      }	t        j                  ddt        › d�|	«      }	t        j                  dd|	«      }	t        j                  dd|	«      }	dD ]  }
t        j                  d |
› d!�d|	«      }	Œ t        j                  d"d#|	«      }	t        j                  d$d|	«      }	t        j                  d%d|	«      }	t        j                  d&d|	«      }	t        j                  d'd(|	«      }	|	j                  «       S ))Nr   )ÚBeautifulSoupzhtml.parserÚdivÚzoom)ÚidF)Ú	recursiveÚscriptÚstyleÚaT)ÚhrefrM   zjavascript:rH   ÚclassÚtabler5   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r!   )Ú.0Úcs     r   ú	<genexpr>zclean_body.<locals>.<genexpr>N   s   è ø€ Ò5˜Q”#�a—&Ñ5ùs   ‚z
<!--.*?-->)Úflagsz<script.*?</script>z<style.*?</style>z(src|href)="(/DFS/)z\1="https://z\2z(src|href)="(/xjcms/)z\sstyle="[^"]*"z\s(width|height)="[^"]*")
r?   ÚaltÚalignÚborderÚcellspacingÚcellpaddingrN   rH   ÚnameÚtargetz\sz="[^"]*"z	<br\s*/?>z<br/>z<span[^>]*>|</span>z<strong[^>]*>|</strong>z<font[^>]*>|</font>z\s+ú )Úbs4rE   ÚfindÚfind_allÚ	decomposeÚ
startswithÚlistÚgetÚunwrapÚjoinÚchildrenr7   r:   r9   ÚHOSTr<   )r=   rE   ÚsouprG   Ú	containerÚchildÚsrL   rF   ÚsegÚattrs              r   Ú
clean_bodyrn   8   sw  € Ý!Ù˜˜}Ó-€DØ�9‰9�U˜vˆ9Ó&€DÙØà€IØ—‘˜u°�Ó6ò ˆØˆ	Ùðð ÐØˆ	Ø×Ñ ¨7Ð 3Ó4ò ˆØ	�‰�ðà×Ñ ¨$ÐÓ/ò ˆØˆV‰9×Ñ Õ.Ø�K‰K�Mðô �I×&Ñ& uÓ-Ó.ò ˆØ�w‰w�t�} S§W¡W¨WÕ%5¸c¿h¹hÀuÐX]¸hÕ>^Ðgj×goÑgoÐpwÕgxØ�J‰J�Lðð �'‰'Ñ5 )×"4Ñ"4Ô5Ó
5€CÜ
�&‰&�  C¬r¯t©tÔ
4€CÜ
�&‰&Ð'¨¨S¼¿¹Ô
=€CÜ
�&‰&Ð% r¨3´b·d±dÔ
;€Cä
�&‰&Ð'¨L¼¸¸bÐ)AÀ3Ó
G€CÜ
�&‰&Ð)¨l¼4¸&ÀÐ+CÀSÓ
I€Cä
�&‰&Ð# R¨Ó
-€CÜ
�&‰&Ð,¨b°#Ó
6€CØrò 4ˆÜ�f‰f˜˜4˜& Ð)¨2¨sÓ3‰ð4ä
�&‰&�˜w¨Ó
,€CÜ
�&‰&Ð'¨¨SÓ
1€CÜ
�&‰&Ð+¨R°Ó
5€CÜ
�&‰&Ð'¨¨SÓ
1€CÜ
�&‰&�˜˜cÓ
"€CØ�9‰9‹;ÐrC   c                  óð  — t        j                  «       } | j                  dt        d¬«       | j                  dd¬«       | j	                  «       }t        |j                  dd¬	«      }t        «       }	 t        |j                  d¬	«      D ]+  }t        j                  |«      }|j                  |d
   «       Œ- 	 d}t        d|j                  dz   «      D �]z  }	 t        |«      }|j'                  dg «      }
|
st!        d|› d�d¬«        �nFt!        d|› dt)        |
«      › d�d¬«       |
D �]  }|j'                  d«      }t+        j,                  dd|j'                  d«      xs d«      j/                  «       }|j'                  d«      xs |j'                  d«      xs d}|r,t#        j0                  dt#        j2                  |dz  «      «      nd}|j'                  d
«      xs: dt4        › dt#        j0                  d t#        j2                  |dz  «      «      › d!|› d"�}|j7                  d#«      rd$|z   }||v r�Œ	 t9        |«      \  }}}}t;        |«      }|rt)        |«      d%k  r)t!        d&|› d'|d d( › �d¬«       |j                  |«       �Œct=        |«      |xs |j/                  «       |xs |d d) ||xs d*d+|g t#        j0                  d,«      d-œ	}|j?                  t        j@                  |d.¬/«      d0z   «       |jC                  «        |j                  |«       |dz  }t#        j$                  d3«       �Œ t#        j$                  d4«       �Œ} |jE                  «        t!        d5|› d6|j                  › �d¬«       y # t        $ r Y �ŒÓw xY w# t        $ r3}	t!        d|› d|	› �d¬«       t#        j$                  d«       Y d }	~	�Œód }	~	ww xY w# t        $ r}	t!        d1|› d2|	› �d¬«       Y d }	~	ŒÎd }	~	ww xY w)7Nz--pagesr   )ÚtypeÚdefaultz--outz/tmp/wszf_tzgg.jsonl)rq   rL   r   )Úencodingr   r   r6   z[list] pz ERR T)Úflushé   Úinfolistu   : ç©º, ç»“æ�Ÿz: u    æ�¡Úiidr4   r5   r?   ÚreleasetimeÚreleaseTimez%Y-%m-%diè  r   z/zwgk/tzgg/z%Y%m%dz/iz.htmlz//zhttps:é2   u     [SKIP ç©ºæ­£æ–‡] z | é   é
   u   æ¸©å®¿åŽ¿äººæ°‘æ”¿åºœÚwszfz%Y-%m-%d %H:%M:%S)	rH   r?   r@   r   rA   Úsiter0   ÚattachmentsÚ
crawl_timeF)Úensure_asciiú
z  [ERR] r\   g      à?gš™™™™™é?u   [*] å®Œæˆ�, å…± u    æ�¡æ–°å†™å…¥ )#ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚopenÚoutÚsetr*   r+   ÚaddÚFileNotFoundErrorÚrangeÚpagesr2   Ú	ExceptionÚprintÚtimeÚsleeprc   Úlenr7   r:   r<   ÚstrftimeÚ	localtimerg   ra   rB   rn   r!   ÚwriteÚdumpsrs   Úclose)ÚapÚargsrˆ   ÚseenÚlineÚdÚtotal_okÚpr
   Úer#   Úitrv   Ú
title_listÚtsr@   r   r=   r?   ÚddaterA   r0   Úrecs                          r   Úmainr¥   b   s¢  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ4Ø‡O�O�GÐ%;€OÔ<Ø�=‰=‹?€Dä
ˆt�x‰x˜ wÔ
/€CÜ‹5€DðÜ˜Ÿ™¨GÔ4ò 	ˆDÜ—
‘
˜4Ó ˆAØ�H‰H�Q�u‘XÕñ	ð €HÜ�1�d—j‘j 1‘nÓ%ó /ˆð	Ü˜A“;ˆDð
 —‘˜ RÓ(ˆÙÜ�H˜Q˜C˜}Ð-°TÕ:ÚÜ�˜˜˜2œc %›j˜\¨Ð.°dÕ;Øó "	ˆBØ—&‘&˜“-ˆCÜŸ™ 
¨B°·±°w³Ò0EÀ2ÓF×LÑLÓNˆJØ—‘˜Ó&ÒD¨"¯&©&°Ó*?ÒDÀ1ˆBÙKM”4—=‘= ¬T¯^©^¸BÀ¹IÓ-FÔGÐSUˆDØ—&‘&˜“-Ò} X¬d¨V°;¼t¿}¹}ÈXÔW[×WeÑWeÐfhÐimÑfmÓWnÓ?oÐ>pÐprÐsvÐrwÐw|Ð#}ˆCØ�~‰~˜dÔ#Ø ‘n�Ø�d‰{Ùð8Ü-9¸#Ó->Ñ*��e˜U FÜ! $Ó'�Ùœs 4›y¨2š~ÜÐ/°¨u°C¸
À3ÀB¸Ð7HÐIÐQUÕVØ—H‘H˜S”MÙä˜c›(Ø#Ò1 z×8Ñ8Ó:Ø"š] d¨C¨RÐ0ØØ$Ò?Ð(?Ø"Ø Ø#%Ü"&§-¡-Ð0CÓ"Dñ
�ð —	‘	œ$Ÿ*™* S°uÔ=ÀÑDÔEØ—	‘	”Ø—‘˜”Ø˜A‘�ô �J‰J�sŽOðE"	ôF 	�
‰
�3Žð_/ð` ‡I�I„KÜ	Ð˜X˜J n°T·X±X°JÐ
?ÀtÖLøôk ò Úðûô ò 	Ü�H˜Q˜C˜u Q CÐ(°Õ5Ü�J‰J�qŒMÝûð	ûôR ò 8Ü˜   Q q cÐ*°$×7Ò7ûð8úsK   Á3AN  ÃNÈ:AOÊBOÎ 	NÎNÎ	OÎ(OÏOÏ	O5ÏO0Ï0O5Ú__main__)Né   )Ú__doc__r‚   r$   r*   r7   Úsysr�   Úurllib.requestr   Úurllib.parseÚsslÚhashlibrg   r)   r    r"   ÚUAr   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder   r2   rB   rn   r¥   Ú__name__© rC   r   ú<module>rµ      s¯   ðñ÷ Y× X× X× X× Xà€Ø	�$�Ð€Ø€	Ø€	à|€àØØ˜$˜Ð4Ð5Ø7ñ	€ð !€c× Ñ Ó"€Ø€Ô Ø—-‘-€„ó3òò	%ò'òTAMðH ˆzÒÙ…Fð rC   