Ë
    ²}†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m	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ dZedz   Zd	Zd
ZdZedddœZd\  ZZdZeddfd„Zdd„Zd„ Zd„ Zd„ Ze dk(  r e«        yy)u  å�Œå¿ƒåŽ¿äººæ°‘æ”¿åºœ (www.tongxin.gov.cn) å…¬ç¤ºå…¬å‘Š â€” TRS
æ �ç›®: /xwzx/gsgg/
åˆ—è¡¨: é¦–é¡µ + index_{N}.html (æ¯�é¡µ20æ�¡)
è¯¦æƒ…: /xwzx/gsgg/{YYYYMM}/t{YYYYMMDD}_{ID}.html, æ­£æ–‡æœ€å¤§æ–‡æœ¬å�—
ç”¨æ³•: python3 crawl_tongxin_gsgg.py [--pages 5] [--out /tmp/tongxin.jsonl]
é    N)ÚRequestÚurlopen)Ú	HTTPErrorÚURLError)Úurljoin©ÚBeautifulSoupzhttps://www.tongxin.gov.cnz/xwzx/gsgg/u   å�Œå¿ƒåŽ¿-å…¬ç¤ºå…¬å‘Šu   å®�å¤�zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.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)z
User-AgentÚAcceptzAccept-Language)g      ð?gÍÌÌÌÌÌü?é
   é   é   c           
      óR  — t        t        «      }||d<   t        |«      D ]?  }	 t        | |¬«      }t	        ||¬«      }|j                  «       j                  dd¬«      c S  y# t        $ rY}|j                  dv rY d }~ yt        d	|j                  › d
| dd  › �d¬«       t        j                  d|dz  z   «       Y d }~Œ d }~wt        t        t        f$ rO}t        dt        |«      j                   › d
| dd  › �d¬«       t        j                  d|dz  z   «       Y d }~�Œd }~ww xY w)NÚReferer)Úheaders)Útimeoutúutf-8Úignore)Úerrors)i”  iš  Ú z  [HTTP z] iÄÿÿÿT©Úflushr   z  [ERR )ÚdictÚHEADERSÚranger   r   ÚreadÚdecoder   ÚcodeÚprintÚtimeÚsleepr   ÚTimeoutErrorÚOSErrorÚtypeÚ__name__)	ÚurlÚrefererr   Úretriesr   ÚattemptÚreqÚrespÚes	            ú'/root/gov_crawler/crawl_tongxin_gsgg.pyÚfetchr-      s  € Ü”7‹m€GØ €GˆIÑÜ˜“>ò (ˆð	(Ü˜# wÔ/ˆCÜ˜3¨Ô0ˆDØ—9‘9“;×%Ñ% g°hÐ%Ó?Ò?ð	(ð øô ò 	(Ø�v‰v˜Ñ#ÝÜ�H˜QŸV™V˜H B s¨3¨4 y kÐ2¸$Õ?Ü�J‰J�q˜7 Q™;‘×'Ñ'ûÜœ,¬Ð0ò 	(Ü�GœD ›G×,Ñ,Ð-¨R°°C°D°	¨{Ð;À4ÕHÜ�J‰J�q˜7 Q™;‘×'Ò'ûð	(ús*   ¤:A#Á#	D&Á,C Â ;C Ã D&ÃAD!Ä!D&c                 ó‚  — |xs t         }t        | d«      } |g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]‡  }|j	                  d«      xs |j	                  d«      xs d}|rK|j                  d«      r|nt        ||«      }|j                  d|¬	«      }d
|_        |j                  |«       Œx|j                  «        Œ‰ |j                  d«      D ][  }dD ]  }	|	|j                  v sŒ||	= Œ t        |j                  «      D ](  }	|	j                  d«      s|	j                  d«      sŒ&||	= Œ* Œ] |j                  g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]]  }|j	                  dd«      }
|
r4|
j                  d«      s#|
j                  d«      r|
nt        ||
«      |d<   ŒK|
sŒN|j                  «        Œ_ |j                  d«      D ]I  }|j                  d¬«      rŒ|j                  d«      rŒ(|j                  d«      rŒ:|j                  «        ŒK t        |«      S )Núhtml.parser)ÚscriptÚstyleÚiframeÚobjectÚembedÚformÚinputÚbuttonÚimgÚsrczdata-srcr   ÚhttpÚa©Úhrefu   æŸ¥çœ‹å›¾ç‰‡T)r1   ÚclassÚalignÚvalignÚborderÚcellpaddingÚcellspacingÚwidthÚheightÚbgcolorÚfaceÚcolorÚsizeÚlangÚdirÚ	setedariaÚtabindexÚrolezaria-zdata-)ÚdivÚspanÚfontÚcenterÚbÚstrongÚemÚiÚuÚsÚlabelr=   Ú
javascriptÚp©ÚstripÚtable)ÚBASEr	   Ú	decomposeÚfind_allÚgetÚ
startswithr   Únew_tagÚstringÚreplace_withÚattrsÚlistÚunwrapÚget_textÚfindÚstr)ÚhtmlÚbase_urlÚbaseÚsoupÚtr8   r9   Úabs_srcr;   Úattrr=   r[   s               r,   Ú
clean_htmlrt   0   s  € ØÒ”t€DÜ˜˜}Ó-€DÙÒ]Ó^ò ˆØ	�‰�ðà�}‰}˜UÓ#ò ˆØ�g‰g�e‹nÒ9 §¡¨
Ó 3Ò9°rˆÙØ Ÿ^™^¨FÔ3‘c¼ÀÀsÓ9KˆGØ—‘˜S w�Ó/ˆAØ%ˆAŒHØ×Ñ˜QÕà�M‰M�Oðð �]‰]˜4Ó ò ˆð6ò 	ˆDð �q—w‘wŠØ�d‘Gð		ô
 ˜Ÿ™“Mò 	ˆDØ�‰˜wÔ'¨4¯?©?¸7Õ+CØ�d‘Gñ	ðð �]‰]ÒiÓjò ˆØ	�‰�
ðà�]‰]˜3Óò ˆØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô5Ø $§¡°Ô 7™¼WÀTÈ4Ó=PˆAˆfŠIÚØ�K‰K�Mðð �]‰]˜3Óò ˆØ�z‰z ˆzÕ%¨a¯f©f°W­oÀaÇfÁfÈSÅkØ�K‰K�Mðô ˆt‹9Ðó    c                 ó  — t        | d«      }g }|j                  dd¬«      D ]¡  }|d   }t        j                  d|«      }|sŒ!|j	                  d«      xs |j                  d¬«      xs d	j                  «       }|j                  d
«      }|dd › d|dd › d|dd › �}|sŒ|j                  |t        t        |«      |dœ«       Œ£ t        «       g }	}|D ]/  }
|
d   |vsŒ|j                  |
d   «       |	j                  |
«       Œ1 |	S )u3   åˆ—è¡¨: a[href=./YYYYMM/tYYYYMMDD_ID.html] + æ—¥æœŸr/   r;   Tr<   r=   z"(?:^|/)(\d{6})/t(\d{8})_\d+\.html$Útitler\   r   é   Né   ú-é   )rw   r%   Údater%   )r	   ra   ÚreÚsearchrb   rj   r]   ÚgroupÚappendr   ÚLIST_URLÚsetÚadd)rm   rp   Úitemsr;   r=   Úmrw   r|   ÚseenÚoutÚits              r,   Úparse_list_htmlr‰   U   s  € ä˜˜}Ó-€DØ€EØ�]‰]˜3 Tˆ]Ó*ò 	YˆØ�‰yˆÜ�I‰IÐ;¸TÓBˆÙØØ—‘�w“Ò? 1§:¡:°D :Ó#9Ò?¸R×FÑFÓHˆØ�w‰w�q‹zˆØ�r˜�(�˜1˜T ! A˜Y˜K q¨¨a¨b¨¨
Ð3ˆÚØ�L‰L 5´¼À4Ó1HÐRVÑWÕXð	Yô “�rˆ#€DØò ˆØˆe‰9˜DÒ Ø�H‰H�R˜‘YÔØ�J‰J�r�Nðð €Jru   c                 ó  ‡— ddl m}  || d«      Šˆfd„} |d«      xs d} |d«      xs d} |d«      xs d}‰j                  d	d
¬«      xs» ‰j                  d	d
¬«      xs¦ ‰j                  d	d¬«      xs‘ ‰j                  d	d¬«      xs| ‰j                  d	d¬«      xsg ‰j                  d	d¬«      xsR ‰j                  d	d¬«      xs= ‰j                  d	d¬«      xs( ‰j                  dd
¬«      xs ‰j                  dd¬«      }g }|rš|j                  dd¬«      D ]„  }	|	d   j	                  «       }
t        j                  d|
«      sŒ-|	j                  d¬«      xs d}|
j                  d«      r|
nt        ||
«      }|j                  ||f«       |	j                  «        Œ† ‰j                  d	d¬«      xs ‰j                  d	d¬«      }|�rt        j                  dt        |«      t
        j                  «      }|rÔt        j                  d|j                  d«      t
        j                  «      D ]�  }	|	j                  d«      t        j                   d d|	j                  d!«      «      j#                  «       }}
|
j	                  «       j                  d"«      rŒh|
j                  d«      r|
nt        ||
«      }|j                  |xs d|f«       ŒŸ t%        «       }g }|D ].  \  }}||vsŒ|j'                  |«       |j                  ||f«       Œ0 |}d}|rEt)        t        |«      |«      }|r.dj+                  d#„ |D «       «      }|d$z   |z   j#                  «       }|s‰j                  d%«      }g }|D ]?  }|j                  d¬«      }t-        |«      d&kD  sŒ$|j                  t-        |«      |f«       ŒA |r&t/        |d'„ ¬(«      d   }t)        t        |«      |«      }||r|d d) nd|||D ��cg c]
  \  }}||d*œ‘Œ c}}d+œS c c}}w ),Nr   r   r/   c                 óÆ   •— ‰j                  dd| i¬«      xs# ‰j                  dd| j                  «       i¬«      }|r#|j                  d«      xs dj                  «       S dS )NÚmetaÚname)rg   Úcontentr   )rk   Úlowerrb   r]   )r�   r…   rp   s     €r,   rŒ   zparse_detail_html.<locals>.metan   s_   ø€ Ø�I‰I�f V¨T NˆIÓ3Òf°t·y±yÀÐPVÐX\×XbÑXbÓXdÐOe°yÓ7fˆÙ34�—‘�iÓ Ò& B×-Ñ-Ó/Ð<¸"Ð<ru   ÚArticleTitler   ÚPubDateÚContentSourcerO   Úzoom)Úid)Úclass_ÚarticleÚ
TRS_EditorÚTRS_UEDITORÚtrs_editor_viewrŽ   Útdr;   Tr<   r=   zB\.(pdf|doc|docx|xls|xlsx|zip|rar|caj|wps|et|jpg|jpeg|png|gif|mp4)$r\   u   é™„ä»¶r:   ÚfjÚxl_xgwdzhasFJ\s*=\s*'(.+?)'z'<a[^>]+href=\"([^\"]+)\"[^>]*>(.*?)</a>é   ú<[^>]+>rx   rZ   c              3   ó4   K  — | ]  \  }}d |› d|› d�–— Œ y­w)z<p><a href="z">z</a></p>N© )Ú.0rq   Úfus      r,   ú	<genexpr>z$parse_detail_html.<locals>.<genexpr>›   s#   è ø€ ÒTÁÀÀB˜l¨2¨$¨b°°°8Ô<ÑTùs   ‚ú
r[   é   c                 ó   — | d   S )Nr   r    )Úxs    r,   ú<lambda>z#parse_detail_html.<locals>.<lambda>¦   s
   € ¨A¨a©D€ ru   )Úkeyr   )ÚfileNameÚfileUrl)rw   Úpublish_daterŽ   ÚsourceÚattachments)Úbs4r	   rk   ra   r�   r}   r~   rj   rc   r   r€   r`   rl   ÚSÚfinditerr   Úsubr]   r‚   rƒ   rt   ÚjoinÚlenÚmax)rm   r%   r	   rŒ   rw   Úpubr­   r“   Ú	att_linksr;   Úhrq   r¢   r›   r…   Úseen_attÚ
att_links2ÚbodyÚatt_pÚpsÚcandsr[   ÚtxtÚbestrp   s                           @r,   Úparse_detail_htmlrÁ   k   sê  ø€ Ý!Ù˜˜}Ó-€Dô=ñ �Ó Ò& B€EÙ
ˆy‹/Ò
˜R€CÙ�/Ó"Ò( b€Fà�I‰I�e ˆIÓ'ò L¨4¯9©9°UÀ6¨9Ó+Jò LØ�I‰I�e 	ˆIÓ*òLØ.2¯i©i¸Ài¨iÓ.PòLà�I‰I�e LˆIÓ1òLà59·Y±Y¸uÈ]°YÓ5[òLð �I‰I�eÐ$5ˆIÓ6òLð �I‰I�e IˆIÓ.ò	Lð
 �I‰I�d˜vˆIÓ&òLð
 +/¯)©)°DÀ¨)Ó*Kð 	ð €IÙØ—‘˜s¨�Ó.ò 	ˆAØ�&‘	—‘Ó!ˆAÜ�y‰yÐ^Ð`aÕbØ—J‘J T�JÓ*Ò6¨h�ØŸ,™, vÔ.‘Q´G¸CÀ³O�Ø× Ñ  ! R Ô)Ø—‘•ð	ð 
�‰�5˜TˆÓ	"Ò	H d§i¡i°¸i iÓ&H€BÚ	ä�I‰IÐ,¬c°"«g´r·t±tÓ<ˆÙÜ—[‘[Ð!KÈQÏWÉWÐUVËZÔY[×Y]ÑY]Ó^ò 6�Ø—w‘w˜q“z¤2§6¡6¨*°b¸!¿'¹'À!»*Ó#E×#KÑ#KÓ#M�1�Ø—7‘7“9×'Ñ'¨Ô5ØØŸ,™, vÔ.‘Q´G¸CÀ³O�Ø× Ñ  !¢- x°Ð!4Õ5ð6ô ‹u€HØ€JØò '‰ˆˆ2Ø�XÒØ�L‰L˜ÔØ×Ñ˜q "˜gÕ&ð'ð €IØ€DÙÜœ#˜d›) SÓ)ˆÙØ—G‘GÑTÈ)ÔTÓTˆEØ˜4‘K %Ñ'×.Ñ.Ó0ˆDÙà�]‰]˜3ÓˆØˆØò 	,ˆAØ—*‘* 4�*Ó(ˆCÜ�3‹x˜"‹}Ø—‘œc #›h¨˜]Õ+ð	,ñ Ü�u¡.Ô1°!Ñ4ˆDÜœc $›i¨Ó-ˆDàÙ$'˜˜C˜R™¨RØØØDM×N¹5¸1¸b Q°2Ó6ÓNñð ùó
 Os   Ï2Pc                  óÌ	  — t        j                  «       } | j                  dt        dd¬«       | j                  dt        d¬«       | j                  dd	¬
«       | j                  dt        d¬«       | j	                  «       }ddddddœ}t        |j                  dd¬«      }t        «       }t        j                  j                  |j                  «      rDt        |j                  d¬«      D ]*  }	 |j                  t        j                  |«      d   «       Œ, t        t         «      }|st#        dd¬«       y d}t%        j&                  d|«      }|rt        |j)                  d«      «      }|j*                  dkD  rt-        ||j*                  «      }t#        d|› �d¬«       g }	t/        |j0                  |dz   «      D ]®  }
|
dk(  rt         nt         › d|
› d�}t        |«      }|st#        d|
› d�d¬«        nwt3        |«      }|	j5                  |«       t#        d|
› dt7        |«      › dt7        |	«      › �d¬«       t9        j:                  t=        j>                  t@        tB        «      «       Œ° t7        |	«      |d<   t#        dt7        |	«      › d t7        |«      › d!�d¬«       |	D �cg c]  }|d"   |vsŒ|‘Œ }}t#        d#t7        |«      › �d¬«       tE        |d«      D �]»  \  }}t        |d"   «      }|sR|d$xx   dz  cc<   t#        d%|› d&t7        |«      › d'|d"   › �d¬«       |d$   |jF                  k\  rt#        d(d¬«        �nWŒitI        ||d"   «      }|d)   s|d)   |d)<   |d*   s|d+   |d*<   |d,   }t7        |«      d-k  r|d.xx   dz  cc<   |d)   |d*   ||d"   |d"   tJ        tL        t%        jN                  d/d0|«      jQ                  «       d d1 d|d2   |d2   |d3   d4d5d6d7œ}|jS                  t        jT                  |d8¬9«      d:z   «       |jW                  «        |d;xx   dz  cc<   |d<z  dk(  s|t7        |«      k(  r(t#        d%|› d&t7        |«      › d=|d;   › d>|d$   › �d¬«       t9        j:                  t=        j>                  t@        tB        «      «       �Œ¾ |jY                  «        t#        d?t        jT                  |d8¬9«      › �d¬«       y # t        $ r Y �Œòw xY wc c}w )@Nz--pagesr   u   0=å…¨é‡�)r#   ÚdefaultÚhelpz--start-pager�   )r#   rÃ   z--outz/tmp/tongxin.jsonl)rÃ   z--max-detail-failé   )r„   Ú	detail_okÚdetail_failÚemptyÚskippedr;   r   )ÚencodingÚpage_urlu   é¦–åˆ—è¡¨é¡µæŠ“å�–å¤±è´¥Tr   éd   u   å…±\s*(\d+)\s*é¡µu
   æ€»é¡µæ•°=Úindex_z.htmlu   é¡µu    æŠ“å�–å¤±è´¥, å�œæ­¢ç¿»é¡µz: u    æ�¡, ç´¯è®¡ r„   u   åˆ—è¡¨å®Œæˆ�: u    æ�¡ (å·²æŠ“è¿‡ ú)r%   u   å¾…æŠ“è¯¦æƒ…: rÇ   u   è¯¦æƒ… ú/u   : æŠ“å�–å¤±è´¥ u   å¤±è´¥è¿‡å¤š, ä¸­æ­¢rw   r¬   r|   rŽ   r   rÈ   rž   ú éÈ   r­   r®   r   Úotherzcrawl_tongxin_gsgg.py)rw   r¬   rŽ   rË   Ú
source_urlÚ	site_nameÚ
group_nameÚsummaryÚ	date_rankÚauthorÚcontent_sourcer®   ÚcategoryÚindustryÚscript_nameF)Úensure_asciir¤   rÆ   é   z: ok=z fail=u   å®Œæˆ�: )-ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚopenr‡   r‚   ÚosÚpathÚexistsrƒ   ÚjsonÚloadsÚ	Exceptionr-   r�   r   r}   r~   r   ÚpagesÚminr   Ú
start_pager‰   Úextendr´   r   r    ÚrandomÚuniformÚ	SLEEP_MINÚ	SLEEP_MAXÚ	enumerateÚmax_detail_failrÁ   Ú	SITE_NAMEÚGROUPr²   r]   ÚwriteÚdumpsr   Úclose)ÚapÚargsÚstatsÚout_fpÚ	done_urlsÚlinerm   Úpages_totalr…   Ú	all_itemsÚpgr%   r¸   r„   rˆ   Ú	new_itemsÚidxÚdrŽ   Úrecs                       r,   Úmainr  ±   sœ  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°¸€OÔDØ‡O�O�N¬°a€OÔ8Ø‡O�O�GÐ%9€OÔ:Ø‡O�OÐ'¬c¸2€OÔ>Ø�=‰=‹?€Dà a¸ÀAÐRSÑT€EÜ�$—(‘(˜C¨'Ô2€FÜ“€IÜ	‡w�w‡~�~�d—h‘hÔÜ˜Ÿ™¨GÔ4ò 	ˆDðØ—‘œdŸj™j¨Ó.¨zÑ:Õ;ð	ô ”‹?€DÙÜÐ(°Õ5ØØ€KÜ
�	‰	Ð&¨Ó-€AÙÜ˜!Ÿ'™' !›*“oˆØ‡z�z�A‚~Ü˜+ t§z¡zÓ2ˆÜ	ˆJ�{�mÐ
$¨DÕ1à€IÜ�D—O‘O [°1¡_Ó5ò 	9ˆØ š'�h¬(¨°6¸"¸¸UÐ'CˆÜ�#‹JˆÙÜ�C˜�tÐ6Ð7¸tÕDÙÜ Ó"ˆØ×Ñ˜ÔÜ��B�4�rœ#˜e›*˜ ]´3°y³>Ð2BÐCÈ4ÕPÜ�
‰
”6—>‘>¤)¬YÓ7Õ8ð	9ô ˜“^€Eˆ'�NÜ	ˆNœ3˜y›>Ð*Ð*:¼3¸y»>Ð:JÈ!Ð
LÐTXÕYà'ÖF˜¨2¨e©9¸IÒ+E’ÐF€IÐFÜ	ˆNœ3˜y›>Ð*Ð
+°4Õ8Ü˜Y¨Ó*ó '9‰ˆˆRÜ�R˜‘YÓˆÙØ�-Ó  AÑ%Ó Ü�G˜C˜5 ¤# i£.Ð!1°ÀÀEÁÀÐLÐTXÕYØ�]Ñ# t×';Ñ';Ò;ÜÐ,°DÕ9ÚØÜ˜d B u¡IÓ.ˆØ�ŠzØ˜G™ˆAˆg‰JØ�Ò Ø " 6¡
ˆAˆnÑØ�I‘,ˆÜˆw‹<˜"ÒØ�'‹N˜aÑ‹Nà�w‘ZØ˜nÑ-ØØ˜5™	Ø˜U™)Ü"ÜÜ—v‘v˜j¨#¨wÓ7×=Ñ=Ó?ÀÀÐEØØ˜‘kØ ™kØ˜]Ñ+ØØØ2ñ
ˆð" 	�‰”T—Z‘Z °%Ô8¸4Ñ?Ô@Ø�‰ŒØˆkÓ˜aÑÓØ�‰8�qŠ=˜C¤3 y£>Ò1Ü�G˜C˜5 ¤# i£.Ð!1°°u¸[Ñ7IÐ6JÈ&ÐQVÐWdÑQeÐPfÐgÐosÕtÜ�
‰
”6—>‘>¤)¬YÓ7Ö8ðO'9ðP ‡L�L„NÜ	ˆH”T—Z‘Z °EÔ:Ð;Ð
<ÀDÖIøôQ ò Úðüò: Gs   Ã/'SÊ$S!Ê1S!Ó	SÓSÚ__main__)N)!Ú__doc__rß   rè   rå   r}   Úsysr   rï   Úurllib.requestr   r   Úurllib.errorr   r   Úurllib.parser   r¯   r	   r_   r�   rõ   rö   ÚUAr   rñ   rò   ÚMAX_FAILr-   rt   r‰   rÁ   r  r$   r    ru   r,   ú<module>r     sŸ   ðñ÷ 1× 0× 0Ó 0ß +ß ,Ý  Ý à#€Ø�-Ñ€Ø$€	Ø€Øv€àØOØ'ñ€ð
  Ñ €	ˆ9Ø€ð  ¨°Qó ó&"òJò,CòLWJðt ˆzÒÙ…Fð ru   