Ë
    Eyj  ã                   óL  — 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
 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZdZdZdd	gZd
ZdeiZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uæ  
çŸ³å®¶åº„é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒº - ç”Ÿæ€�çŽ¯å¢ƒ/å¤„ç½šå¼ºåˆ¶ çˆ¬è™«
åˆ—è¡¨: http://shidz.gov.cn/columns/65370511-855e-4ad0-aff2-ecd04caa2e21/index.html (ç”Ÿæ€�çŽ¯å¢ƒ)
      http://shidz.gov.cn/columns/508efae1-43e4-4673-9fc3-a93ab7cb875b/index.html (å¤„ç½š/å¼ºåˆ¶)
  æ³¨æ„�: https è¯�ä¹¦ä¸�åŒ¹é…�, å¿…é¡»ç”¨ http
  è¯¦æƒ…: /columns/UUID/YYYYMM/DD/UUID.html
  æ ‡é¢˜: #biaoti å†… div; æ—¥æœŸ: å�‘å¸ƒæ—¶é—´ï¼šYYYY-MM-DD; æ­£æ–‡: #conN
ç”¨æ³•: python3 crawl_shidz_tzgg.py [--limit=N]
é    N)Úurljoin)Úpush_to_searchdbzhttp://shidz.gov.cnu1   çŸ³å®¶åº„é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒº-ç”Ÿæ€�çŽ¯å¢ƒu   å…¬ç¤ºå…¬å‘Š)u   ç”Ÿæ€�çŽ¯å¢ƒzKhttp://shidz.gov.cn/columns/65370511-855e-4ad0-aff2-ecd04caa2e21/index.html)u   å¤„ç½š/å¼ºåˆ¶zKhttp://shidz.gov.cn/columns/508efae1-43e4-4673-9fc3-a93ab7cb875b/index.htmlzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36ú
User-Agentc                  ó˜   — d} t         j                  dd  D ]1  }|j                  d«      sŒt        |j	                  d«      d   «      } Œ3 | S )Nr   é   z--limit=ú=)ÚsysÚargvÚ
startswithÚintÚsplit)ÚlimitÚas     ú%/root/gov_crawler/crawl_shidz_tzgg.pyÚ
parse_argsr      sI   € Ø€EÜ�X‰X�a�bˆ\ò )ˆØ�<‰<˜
Õ#Ü˜Ÿ™ › Q™Ó(‰Eð)ð €Ló    c                 óÞ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )NÚ z[\u200b\u200e\u200f\ufeff\xa0]ú\s+ú u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r   Úclean_titler   '   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr   c           
      ó¤  — 	 | j                  |d¬«      }d|_        |j                  }g }t        «       }t	        j
                  d|«      D ]Ø  }|j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d	«      j                  «       f\  }}}	}
}||v rŒn|j                  |«       |j                  d
«      st        t        |«      n|}t        |«      }t        |«      dk  rŒ¼|j                  |||› d|	› d|
› �dœ«       ŒÚ |S # t        $ r}t!        d|› d|› �d¬«       g cY d}~S d}~ww xY w)uY   ä»Žé�™æ€�é¡µæ��å�–æ–‡ç« é“¾æŽ¥ (href=/columns/UUID/YYYYMM/DD/UUID.html + æ ‡é¢˜ + æ—¥æœŸ)é   )Útimeoutúutf-8zX<a[^>]*href=['"]([^'"]*?/(\d{4})(\d{2})/(\d{2})/[0-9a-f-]+\.html)['"][^>]*>([^<]{3,80})<r   é   é   é   é   Úhttpú-)ÚtitleÚhrefÚdatez    [ERR] list ú: T©ÚflushN)ÚgetÚencodingÚtextÚsetr   ÚfinditerÚgroupr   Úaddr   r   ÚBASE_URLr   ÚlenÚappendÚ	ExceptionÚprint)ÚsessionÚurlÚrÚhtmlÚitemsÚseenÚmr)   ÚyÚmoÚdr(   r   Úes                 r   Ú
fetch_listrE   /   sH  € ðØ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆØˆÜ‹uˆä—‘Ð|ð  Có  Dò 		NˆAØ$%§G¡G¨A£J°·±¸³
¸A¿G¹GÀA»JÈÏÉÐPQË
ÐTU×T[ÑT[Ð\]ÓT^×TdÑTdÓTfÐ$fÑ!ˆD�!�R˜˜EØ�t‰|ØØ�H‰H�TŒNØ26·/±/À&Ô2I”7œ8 TÔ*ÈtˆDÜ˜EÓ"ˆAÜ�1‹v˜ŠzØØ�L‰L 1¨d¸q¸cÀÀ2À$ÀaÈÀs¸OÑLÕMð		Nð ˆøÜò Ü� ˜u B q cÐ*°$Õ7Ø�	ûðús   ‚D$D' Ä'	EÄ0E
ÅEÅ
Ec                 ó˜  ‡— 	 | j                  ‰t        t        dz   dœd¬«      }d|_        |j                  }d}|j                  d«      }|dk\  r8t        j                  d	|||d
z    «      }|rt        |j                  d«      «      }|sDt        j                  d|«      }|r,t        |j                  d«      j                  d«      d   «      }d}t        j                  d|«      }|r|j                  d«      }|s_t        j                  d|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}|j                  d«      }|dk\  �r|j                  d|«      dz   }	d}
|	}|t        |«      k  rJ|
dkD  rE|||dz    dk(  r|
dz  }
|dz  }n|||dz    dk(  r|
dz  }
|dz  }n|dz  }|t        |«      k  r|
dkD  rŒE||	|dz
   }t        j                  dd|«      }t        j                  dd|«      }t        j                  dˆfd„|«      }t        j                  dˆfd„|«      }t        j                  dd|«      }t        j                  d d|«      }|j                  «       }|rt        |«      d!k  rd}|||fS # t        $ r}t!        d"‰› d#|› �d$¬%«       Y d&}~y'd&}~ww xY w)(u4   è¯¦æƒ…: #biaoti æ ‡é¢˜ + å�‘å¸ƒæ—¶é—´ + #conN æ­£æ–‡ú/)r   ÚRefererr   )Úheadersr    r!   r   zid="biaoti"r   z#<div[^>]*>\s*([^<]{4,100})\s*</div>i   r   z<title>([^<]+)</title>Ú_u,   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})z(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dr"   r#   z	id="conN"ú>r$   z<divé   z</div>z<script[\s\S]*?</script>z<style[\s\S]*?</style>zhref="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nz	href="%s"r   )r&   ú#Ú
javascript©r3   r   r   ©r@   r;   s    €r   ú<lambda>zfetch_detail.<locals>.<lambda>t   sq   ø€ °kÐef×elÑelÐmnÓeo×ezÑezð  |Wô  fXÄWÈSÐRS×RYÑRYÐZ[ÓR\ÓE]ñ  7i€ ð  ^_÷  ^eñ  ^eð  fgó  ^hñ  7i€ r   zsrc="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nzsrc="%s"r   )r&   zdata:rO   rP   rQ   s    €r   rR   zfetch_detail.<locals>.<lambda>u   sq   ø€ °ZÐcd×cjÑcjÐklÓcm×cxÑcxð  zYô  dZÄ7È3ÐPQ×PWÑPWÐXYÓPZÓC[ñ  6k€ ð  `a÷  `gñ  `gð  hió  `jñ  6k€ r   z\sstyle="[^"]*"zM<span[^>]*>|</span>|<strong[^>]*>|</strong>|<b[^>]*>|</b>|<font[^>]*>|</font>é   z    [ERR] detail r+   Tr,   N)r   r   r   )r.   ÚUAr5   r/   r0   Úfindr   Úsearchr   r3   r   r   r6   r   r   r8   r9   )r:   r;   r<   r=   r(   Úir@   Úpub_dateÚbodyÚstartÚdepthÚjÚrawrD   s    `            r   Úfetch_detailr_   H   sÈ  ø€ ð4Ø�K‰K˜´BÄ8ÈcÁ>Ñ%RÐ\^ˆKÓ_ˆØˆŒ
Ø�v‰vˆØˆØ�I‰I�mÓ$ˆØ�Š6Ü—	‘	Ð@À$ÀqÈÈ3ÉÀ-ÓPˆAÙÜ# A§G¡G¨A£JÓ/�ÙÜ—	‘	Ð3°TÓ:ˆAÙÜ# A§G¡G¨A£J×$4Ñ$4°SÓ$9¸!Ñ$<Ó=�ØˆÜ�I‰IÐEÀtÓLˆÙØ—w‘w˜q“zˆHÙÜ—	‘	Ð8¸$Ó?ˆAÙØ)¨Q¯W©W°Q«Z¼¸Q¿W¹WÀQ»Z»Ì#ÈaÏgÉgÐVWËjË/Ð,ZÑZ�àˆØ�I‰I�kÓ"ˆØ�‹6à—I‘I˜c 1Ó%¨Ñ)ˆEØˆEØˆAØ”c˜$“i’- E¨A¢IØ˜˜!˜A™#�; &Ò(Ø˜Q‘J�EØ˜‘F‘AØ˜!˜A˜a™C�[ HÒ,Ø˜Q‘J�EØ˜‘F‘Aà˜‘F�Að ”c˜$“i’- E¨A£Ið �u˜Q˜q™S�/ˆCÜ—&‘&Ð4°b¸#Ó>ˆCÜ—&‘&Ð2°B¸Ó<ˆCÜ—&‘&Ð*ó  -ið  knó  oˆCÜ—&‘&Ð)ó  ,kð  mpó  qˆCÜ—&‘&Ð+¨R°Ó5ˆCÜ—&‘&ÐiÐkmÐorÓsˆCØ—9‘9“;ˆDÙ”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús   ƒG J# Ç$B>J# Ê#	K	Ê,KËK	c                  óÜ  — t        «       } t        dt        › �d¬«       t        j                  «       }|j
                  j                  dt        i«       g }t        «       }t        D ]�  \  }}t        ||«      }d}|D ]4  }|d   |v rŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        d|› d	t        |«      › d
|› d�d¬«       t        j                  d«       Œƒ t        dt        |«      › d�d¬«       | rt        |«      | kD  r|d |  }g }	t!        |«      D �]j  \  }
}t#        ||d   «      \  }}}|xs |d   }|xs |j%                  dd«      }|rt'        j(                  dd|«      n|}t'        j(                  dd|«      j+                  «       d d }g }|rjt'        j,                  d|t&        j.                  «      D ]B  }|j                  |j1                  d«      j+                  «       |j1                  d«      dœ«       ŒD |	j                  t        |d   |d   ||||t2        |rt5        j6                  |d¬«      nddœ	«       |
dz   dz  dk(  rt        d|
dz   › dt        |«      › �d¬«       t        j                  d«       �Œm t        d t        |	«      › d!�d¬«       t9        |	t        ¬"«       t;        d#„ |	D «       «      }t        d$t        |	«      › d%|› �d¬«       y )&Nz[SHIDZ] SITE=Tr,   r   r   r)   r   z  [z] u   æ�¡(æ–°ú)gš™™™™™Ù?u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...r(   r*   r   z<[^>]+>r   r   i,  zQ<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps))"[^>]*>([^<]*)</a>r"   )Únamer;   F)Úensure_ascii)	Ú	site_nameÚ
source_urlr;   r(   rY   ÚcontentÚsummaryÚcategoryÚattachmentsé
   z	  detail rG   g333333Ó?z
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)rf   r   r   N)r.   r   )Ú.0r<   s     r   ú	<genexpr>zmain.<locals>.<genexpr>±   s)   è ø€ ÒK�a¨1¯5©5°Ó+;Ò+A¸r×*HÑ*HÕ*J”ÑKùs   ‚(2«2z  DONE. pushed=u    ç©ºæ­£æ–‡=)r   r9   Ú	SITE_NAMEÚrequestsÚSessionrI   ÚupdaterU   r1   Ú	LIST_URLSrE   r4   r7   r6   ÚtimeÚsleepÚ	enumerater_   r.   r   r   r   r2   ÚIr3   ÚCATEGORYÚjsonÚdumpsr   Úsum)r   r:   Ú	all_itemsr?   Úcol_namer;   r>   Ú	new_countÚitÚresultsrX   Úd_titleÚd_daterZ   r(   rY   rg   Úattsr@   Úemptys                       r   Úmainr…   �   sÖ  € Ü‹L€EÜ	ˆMœ)˜Ð
%¨TÕ2ä×ÑÓ €GØ‡O�O×Ñ˜L¬"Ð-Ô.à€IÜ‹5€DÜ"ò 
‰ˆ�#Ü˜7 CÓ(ˆØˆ	Øò 	ˆBØ�&‰z˜TÑ!ØØ�H‰H�R˜‘ZÔ Ø×Ñ˜RÔ Ø˜‰N‰Ið	ô 	��H�:˜R¤ E£
˜|¨7°9°+¸QÐ?ÀtÕLÜ�
‰
�3�ð
ô 
ˆNœ3˜y›>Ð*Ð*<Ð
=ÀTÕJÙ”�Y“ %Ò'Ø˜f˜uÐ%ˆ	à€GÜ˜9Ó%ó ‰ˆˆ2Ü ,¨W°b¸±jÓ AÑˆ�˜ØÒ&˜2˜g™;ˆØÒ/˜RŸV™V F¨BÓ/ˆÙ37”"—&‘&˜ S¨$Ô/¸UˆÜ—&‘&˜  gÓ.×4Ñ4Ó6°t¸Ð<ˆØˆÙÜ—[‘[Ð!uÐw{Ô}÷  ~Bñ  ~Bó  Cò M�Ø—‘ Q§W¡W¨Q£Z×%5Ñ%5Ó%7ÀÇÁÈÃ
ÑKÕLðMà�‰Ü"°"°V±*ÀRÈÁZØ¨¸TØ¬HÙCGœ4Ÿ:™: d¸Õ?ÈRñ	
ô 	ð �‰E�R‰<˜1ÒÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4¸DÕAÜ�
‰
�3Žð%ô( 
ˆJ”s˜7“|�nÐ$9Ð
:À$ÕGÜ�W¬)Õ4ÜÑK˜7ÔKÓK€EÜ	ˆOœC ›L˜>¨°U°GÐ
<ÀDÖIr   Ú__main__)Ú__doc__Úosr	   r   rt   ry   r=   r   rp   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r5   ro   rx   rs   rU   ÚHEADERSr   r   rE   r_   r…   Ú__name__© r   r   ú<module>r“      s¨   ðñ÷ 1× 0× 0Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à €Ø?€	Ø€àcØdð€	ð
 w€Ø˜Ð
€òòòò26òr1Jðh ˆzÒÙ…Fð r   