Ë
    úAyjN  ã                   óR  — 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d„ Zedk(  r e«        yy)u+  
æŠšå·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å�Œå…¬ç¤º/æ‹Ÿæ‰¹å‡†å…¬ç¤º çˆ¬è™«
åˆ—è¡¨: http://hbj.jxfz.gov.cn/col/col8955/index.html (å�Œå…¬ç¤º 45æ�¡é�™æ€�)
      http://hbj.jxfz.gov.cn/col/col4375/index.html (æ‹Ÿæ‰¹å‡†å…¬ç¤º 5æ�¡é�™æ€�)
  æ³¨æ„�: åŸŸå��æ˜¯ hbj.jxfz.gov.cn (é�ž sthj.jxfz.gov.cn)
  åˆ—è¡¨: é�™æ€� HTML dataStore (script type=text/xml) å�«è®°å½•, jpage API dataproxy å·²å¤±æ•ˆ
è¯¦æƒ…: /art/YYYY/M/D/art_XXXX_YYYY.html
  æ ‡é¢˜: <meta name="ArticleTitle"> (å®Œæ•´)
  æ­£æ–‡: <div class="bfr_article_content">
ç”¨æ³•: python3 crawl_fz_hbj_tzgg.py [--limit=N]
é    N)Úurljoin)Úpush_to_searchdbzhttp://hbj.jxfz.gov.cnu"   æŠšå·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å�Œå…¬ç¤ºu   å…¬ç¤ºå…¬å‘Š)u   å�Œå…¬ç¤ºä¸“æ �z-http://hbj.jxfz.gov.cn/col/col8955/index.html)u   æ‹Ÿæ‰¹å‡†å…¬ç¤ºz-http://hbj.jxfz.gov.cn/col/col4375/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_fz_hbj_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                 ó¦  — g }t        «       }t        j                  d| t        j                  «      D �]  }t        j                  d|«      }|st        j                  d|«      }|sŒ5|j                  d«      }||v rŒK|j                  |«       |j                  d«      st        t        |«      n|}t        j                  d|«      }|st        j                  d|«      }|rt        |j                  d«      «      nd}t        |«      d	k  rŒÚd}t        j                  d
|«      }	|	rd|	j                  «       z  }|j                  |||dœ«       �Œ |S )u)   ä»Žé�™æ€�é¡µ dataStore è§£æž�è®°å½•åˆ—è¡¨z&<record><!\[CDATA\[(.*?)\]\]></record>z,href=['"]([^'"]*art_\d+_\d+\.html[^'"]*)['"]z(art_\d+_\d+\.html)r   Úhttpztitle=['"]([^'"]*)['"]z>([^<]{6,})</a>r   é   z(\d{4})-(\d{2})-(\d{2})z%s-%s-%s)ÚtitleÚhrefÚdate)Úsetr   ÚfindallÚSÚsearchÚgroupÚaddr   r   ÚBASE_URLr   ÚlenÚgroupsÚappend)
ÚhtmlÚitemsÚseenÚrecÚamr"   Útmr!   r#   Údms
             r   Úparse_datastorer5   1   s#  € à€EÜ‹5€DÜ�z‰zÐCÀTÌ2Ï4É4ÓPó CˆÜ�Y‰YÐJÈCÓPˆÙÜ—‘Ð1°3Ó7ˆBÙØØ�x‰x˜‹{ˆØ�4‰<ØØ�‰�ŒØ.2¯o©o¸fÔ.EŒw”x Ô&È4ˆä�Y‰YÐ4°cÓ:ˆÙÜ—‘Ð-¨sÓ3ˆBÙ,.”˜BŸH™H Q›KÔ(°BˆÜˆu‹:˜Š>ØØˆÜ�Y‰YÐ1°3Ó7ˆÙØ §	¡	£Ñ+ˆDØ�‰˜u¨d¸DÑAÖBð-Cð. €Lr   c                 ó¸   — 	 | j                  |d¬«      }d|_        t        |j                  «      S # t        $ r}t        d|› d|› �d¬«       g cY d }~S d }~ww xY w)Né   ©Útimeoutúutf-8z    [ERR] list ú: T©Úflush)ÚgetÚencodingr5   ÚtextÚ	ExceptionÚprint)ÚsessionÚurlÚrÚes       r   Ú
fetch_listrG   O   s[   € ðØ�K‰K˜ RˆKÓ(ˆØˆŒ
Ü˜qŸv™vÓ&Ð&øÜò Ü� ˜u B q cÐ*°$Õ7Ø�	ûðús   ‚.1 ±	AºAÁAÁAc                 ó†  ‡— 	 | j                  ‰t        t        dz   dœd¬«      }d|_        |j                  }d}t        j                  d|«      }|rt        |j                  d«      «      }|s2t        j                  d	|«      }|rt        |j                  d«      «      }d}t        j                  d
|«      }|r"|j                  d«      j                  «       dd }|s_t        j                  d|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}dD �]>  }|j                  |«      }	|	dk\  sŒ|j                  d|	«      dz   }
d}|
}|t        |«      k  rE|||dz    dk(  r|dz  }|dz  }n |||dz    dk(  r|dz  }|dz  }|dk(  rn|dz  }|t        |«      k  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                  «       }t        |«      d k\  s�Œ? n |rt        |«      d k  rd}|||fS # t        $ r}t        d!‰› d"|› �d#¬$«       Y d}~y%d}~ww xY w)&u3   è¯¦æƒ…: meta ArticleTitle + div.bfr_article_contentú/)r   ÚRefererr7   )Úheadersr9   r:   r   z+<meta name="ArticleTitle" content="([^"]*)"r   z<h1[^>]*>([^<]+)</h1>z&<meta name="PubDate" content="([^"]*)"Né
   z(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dé   é   )zclass="bfr_article_content"z	id="zoom"zclass="TRS_UEDITOR"zclass="content"r   ú>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©r(   r   r   ©ÚmrD   s    €r   ú<lambda>zfetch_detail.<locals>.<lambda>…   sr   ø€ ¸+Ðij×ipÑipÐqrÓis×i~Ñi~ð  @[ô  j\ÌÐQTÐVW×V]ÑV]Ð^_ÓV`ÓIañ  ;m€ ð  bc÷  biñ  bið  jkó  blñ  ;m€ 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:rS   rT   rU   s    €r   rW   zfetch_detail.<locals>.<lambda>†   sq   ø€ ¸Ðgh×gnÑgnÐopÓgq×g|Ñg|ð  ~]ô  h^ÄwÈsÐTU×T[ÑT[Ð\]ÓT^ÓG_ñ  :o€ ð  de÷  dkñ  dkð  lmó  dnñ  :o€ r   z\sstyle="[^"]*"zM<span[^>]*>|</span>|<strong[^>]*>|</strong>|<b[^>]*>|</b>|<font[^>]*>|</font>é   z    [ERR] detail r;   Tr<   )r   r   r   )r>   ÚUAr*   r?   r@   r   r'   r   r(   r   r   Úfindr+   r   rA   rB   )rC   rD   rE   r.   r!   rV   Úpub_dateÚbodyÚcidÚiÚstartÚdepthÚjÚrawrF   s    `             r   Úfetch_detailrd   Y   sÅ  ø€ ð6Ø�K‰K˜´BÄ8ÈcÁ>Ñ%RÐ\^ˆKÓ_ˆØˆŒ
Ø�v‰vˆØˆÜ�I‰IÐDÀdÓKˆÙÜ §¡¨£
Ó+ˆEÙÜ—	‘	Ð2°DÓ9ˆAÙÜ# A§G¡G¨A£JÓ/�ØˆÜ�I‰IÐ?ÀÓFˆÙØ—w‘w˜q“z×'Ñ'Ó)¨#¨2Ð.ˆHÙÜ—	‘	Ð8¸$Ó?ˆAÙØ)¨Q¯W©W°Q«Z¼¸Q¿W¹WÀQ»Z»Ì#ÈaÏgÉgÐVWËjË/Ð,ZÑZ�àˆØió 	ˆCØ—	‘	˜#“ˆAØ�A‹vØŸ	™	 # qÓ)¨AÑ-�Ø�Ø�Øœ#˜d›)’mØ˜A˜a ™c�{ fÒ,Ø ™
˜Ø˜Q™™Ø˜a  !¡˜¨Ò0Ø ™
˜Ø˜Q™˜Ø  Aš:Ø!à˜Q™˜ð œ#˜d›)“mð ˜5  1¡�o�Ü—f‘fÐ8¸"¸cÓB�Ü—f‘fÐ6¸¸CÓ@�Ü—f‘fÐ.ó  1mð  oró  s�Ü—f‘fÐ-ó  0oð  qtó  u�Ü—f‘fÐ/°°SÓ9�Ü—f‘fÐmÐoqÐsvÓw�Ø—y‘y“{�Ü�t“9 ”?Ùð5	ñ6 ”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús,   ƒEJ ÅA+J ÇB6J Ê J Ê	K Ê#J;Ê;K c                  ó2  — t        «       } t        dt        › �d¬«       t        j                  «       }|j
                  j                  dt        i«       	 |j                  t        dz   d¬«       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+        j0                  d|t*        j2                  «      D ]B  }|j                  |j5                  d«      j/                  «       |j5                  d
«      dœ«       ŒD |	j                  t        |d	   |d	   ||||t6        |rt9        j:                  |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¬«       t=        |	t        ¬$«       t?        d%„ |	D «       «      }t        d&t!        |	«      › d'|› �d¬«       y # t        $ r Y �Œ¦w xY w)(Nz[FZ-HBJ] SITE=Tr<   r   rI   rY   r8   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>rM   )ÚnamerD   F)Úensure_ascii)	Ú	site_nameÚ
source_urlrD   r!   r\   ÚcontentÚsummaryÚcategoryÚattachmentsrL   z	  detail g333333Ó?z
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)rk   r   r   N)r>   r   )Ú.0rE   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   rB   Ú	SITE_NAMEÚrequestsÚSessionrK   ÚupdaterZ   r>   r*   rA   r$   Ú	LIST_URLSrG   r)   r-   r+   ÚtimeÚsleepÚ	enumeraterd   r   r   r   ÚfinditerÚIr(   ÚCATEGORYÚjsonÚdumpsr   Úsum)r   rC   Ú	all_itemsr0   Úcol_namerD   r/   Ú	new_countÚitÚresultsr_   Úd_titleÚd_dater]   r!   r\   rl   ÚattsrV   Úemptys                       r   ÚmainrŠ   ”   s  € Ü‹L€EÜ	ˆNœ9˜+Ð
&¨dÕ3ä×ÑÓ €GØ‡O�O×Ñ˜L¬"Ð-Ô.ðØ�‰”H˜s‘N¨BˆÔ/ð €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ÖIøô[ ò Úðús   ÁL	 Ì		LÌLÚ__main__)Ú__doc__Úosr	   r   rx   r~   r.   r   rt   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r*   rs   r}   rw   rZ   ÚHEADERSr   r   r5   rG   rd   rŠ   Ú__name__© r   r   ú<module>r˜      s­   ðñ
÷ 1× 0× 0Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à#€Ø0€	Ø€àHØHð€	ð
 w€Ø˜Ð
€òòòò<ò8òv5Jðp ˆzÒÙ…Fð r   