Ë
    ¸¬ujF!  ã            	       ó~  — 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                  ej                  j                  e«      «      Z ej                  dd«      ZdZdZdZd	Zd
ZdZddiZdZedez  z   ZdZdZddddœZd„ Zd„ Zd„ Zd„ Z d0d„Z!e"dk(  �ryddl#Z# e#jH                  d¬«      Z%e%jM                  ddd¬«       e%jM                  de'dd ¬!«       e%jM                  d"d#e'dd$¬%«       e%jQ                  «       Z) ejT                  e«        e«       Z+ e,d&e+z  «       e)jZ                  re+Z.n4e)j^                  �e)j^                  Z.ne)j`                  �e)j`                  Z.neZ. e1e.e+«      Z. e,d'e.z  «        e2e.«      D ]u  Z3e3Z4	  ee4«      Z5 ee5«      Z6e6s e,d(e4z  «        nS e,d)e4 e7e6«      fz  «       e6D ]9  \  Z8Z9Z: e e9«      \  Z;Z<Z=Z>e;xs e8Z?e<Z@ e!e?e9e@e=e>«        ej‚                  d*«       Œ; Œw  e,d,ed-   ed.   ed/   fz  «       yy# eB$ rZC e,d+e4eCfz  «       Y dZC[CŒ¨dZC[Cww xY w)1uc  
xunhua.gov.cn å¾ªåŒ–åŽ¿æ”¿åºœ - éƒ¨é—¨å…¬å¼€çˆ¬è™«
=========================================
TRS CMSï¼Œçº¯HTMLåˆ—è¡¨ï¼Œrequestså�³å�¯ã€‚
æ �ç›®: 10568ï¼ˆéƒ¨é—¨å…¬å¼€ï¼‰

ç”¨æ³•:
  python3 crawl_xunhua.py                # å¢žé‡�çˆ¬ï¼ˆç¬¬1é¡µï¼‰
  python3 crawl_xunhua.py --pages=5      # çˆ¬5é¡µ
  python3 crawl_xunhua.py --full         # å…¨é‡�æ‰€æœ‰é¡µ
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbu   å¾ªåŒ–åŽ¿äººæ°‘æ”¿åºœzwww.xunhua.gov.cniH)  õ   éƒ¨é—¨å…¬å¼€u   é�’æµ·-æµ·ä¸œu   æ”¿åºœå…¬å‘Šz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zhttp://www.xunhua.gov.cnz/html/%d/Listé   é
   )ÚnewÚskipÚerrorsc                  óÐ   — t        j                  t        dz   t        d¬«      } d| _        t        j                  d| j                  «      }|rt        d„ |D «       «      dz   S t        S )u   ä»Žé¦–é¡µèŽ·å�–æ€»é¡µæ•°ú.htmlé   ©ÚheadersÚtimeoutúutf-8zList-(\d+)\.htmlc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Úint)Ú.0Úns     ú!/root/gov_crawler/crawl_xunhua.pyú	<genexpr>z"get_total_pages.<locals>.<genexpr>*   s   è ø€ Ò(˜a”3�q—6Ñ(ùs   ‚r   )
ÚrequestsÚgetÚ	LIST_BASEÚHEADERSÚencodingÚreÚfindallÚtextÚmaxÚ	MAX_PAGES)ÚrÚnumss     r   Úget_total_pagesr$   $   sT   € ä�‰”Y Ñ(´'À2ÔF€AØ€A„JÜ�:‰:Ð)¨1¯6©6Ó2€DÙÜÑ( 4Ô(Ó(¨1Ñ,Ð,ÜÐó    c                 ó–   — | dk(  r
t         dz   }nt         d| z  z   }t        j                  |t        d¬«      }d|_        |j
                  S )u   èŽ·å�–åˆ—è¡¨é¡µr   r   z-%d.htmlr   r   r   )r   r   r   r   r   r   )Úpage_numÚurlr"   s      r   Úfetch_list_pager)   .   sD   € à�1‚}Ü˜'Ñ!‰ä˜* xÑ/Ñ/ˆÜ�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€Mr%   c                 ó  — g }t        | d«      }|j                  d«      D ]i  }|j                  dd«      }|j                  d¬«      }t	        |«      dkD  sŒ6t        j                  dt        z  |«      sŒT|}|j                  ||df«       Œk |S )	u7   è§£æž�åˆ—è¡¨é¡µï¼Œè¿”å›ž [(title, url, date_text), ...]ÚlxmlÚaÚhrefÚ T©Ústripr   z/html/%d/\d+\.html$)	r   Úfind_allr   Úget_textÚlenr   ÚsearchÚCATEGORY_IDÚappend)ÚhtmlÚitemsÚsoupr,   r-   ÚtxtÚfull_urls          r   Úparse_itemsr<   9   sˆ   € à€EÜ˜˜vÓ&€Dà�]‰]˜3Óò .ˆØ�u‰u�V˜RÓ ˆØ�j‰j˜tˆjÓ$ˆÜˆs‹8�b‹=œRŸY™YÐ'=ÄÑ'KÈTÕRØˆHà�L‰L˜#˜x¨Ð,Õ-ð.ð €Lr%   c                 ó\  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }d}|j                  dddi¬	«      }|rs|j                  d
«      rb|d
   j                  «       }t        j                  d|«      }	|	r7|	j                  d«      ›d|	j                  d«      ›d|	j                  d«      ›�}|sYt        j                  d|j
                  «      }	|	r7|	j                  d«      ›d|	j                  d«      ›d|	j                  d«      ›�}d}
d}|j                  d«      }|rJ|j                  ddg«      D ]  }|j                  «        Œ t        |«      }
|j                  d¬«      dd }�ng }|j                  d«      D ]Y  }|j                  d¬«      }t!        |«      dkD  sŒ$d|dz   v sŒ,d|dd vsŒ4|j#                  t!        |«      t        |«      |f«       Œ[ |r&|j%                  d „ ¬!«       |d"   d   }
|d"   d   dd }|
st|j                  d#«      }|ra|j                  ddg«      D ]  }|j                  «        Œ |j                  d¬«      }|j                  d$«      }|d"k\  r||d%z   d }|r|}
|dd }|||
|fS # t&        $ r(}t)        d&|z  t*        j,                  ¬'«       Y d}~y(d}~ww xY w))u   èŽ·å�–è¯¦æƒ…é¡µå†…å®¹r   r   r   r+   r.   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentz
td.heicu26Tr/   ÚPubDatez(\d{4})[/-](\d{2})[/-](\d{2})r   ú-é   é   u'   æ—¶é—´.*?(\d{4})å¹´(\d{2})æœˆ(\d{2})æ—¥z#zoomÚscriptÚstyleNéÈ   Útableéd   u   ã€‚ï»¿u   ã€‚u   é¦–é¡µé   c                 ó   — | d    S )Nr   © )Úxs    r   ú<lambda>zfetch_detail.<locals>.<lambda>{   s   € ¨q°©t¨e€ r%   )Úkeyr   Úbodyr   é   z    detail error: %s©Úfile)r.   r.   r.   r.   )r   r   r   r   r   r   Úfindr0   Ú
select_oner2   r   r4   Úgroupr1   Ú	decomposeÚstrr3   r6   ÚsortÚ	ExceptionÚprintÚsysÚstderr)r(   r"   r9   Útitler>   ÚtdÚdateÚmeta_dÚrawÚmÚ	body_htmlÚsummaryÚzoomÚtagÚ
candidatesrJ   r:   rR   ÚsÚidxÚes                        r   Úfetch_detailrn   H   s  € ðFÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V VÓ,ˆð ˆØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙ�D—H‘H˜YÔ'Ø˜‘O×)Ñ)Ó+ˆEÙØ—‘ Ó.ˆBÙØŸ™¨$˜Ó/�ð ˆØ—‘˜6¨&°)Ð)<�Ó=ˆÙ�f—j‘j Ô+Ø˜Ñ#×)Ñ)Ó+ˆCÜ—	‘	Ð:¸CÓ@ˆAÙØ%&§W¡W¨Q¥Z°·±¸µ¸Q¿W¹WÀQ¼ZÐH�Ùä—	‘	ÐDÀaÇfÁfÓMˆAÙØ%&§W¡W¨Q¥Z°·±¸µ¸Q¿W¹WÀQ¼ZÐH�ð ˆ	ØˆØ�‰˜wÓ'ˆÙØ—}‘} h°Ð%8Ó9ò  �Ø—‘•ð ä˜D›	ˆIØ—m‘m¨$�mÓ/°°Ð5ŠGð ˆJØŸ™ wÓ/ò G�Ø—n‘n¨4�nÓ0�Ü�s“8˜c“> h°#¸±+Ò&=à s¨3¨B xÒ/Ø"×)Ñ)¬3¨s«8´S¸³ZÀÐ*EÕFðGñ à—‘¡O�Ô4Ø& q™M¨!Ñ,�	Ø$ Q™-¨Ñ*¨4¨CÐ0�Ùà—y‘y Ó(�ÙØ!Ÿ]™]¨H°gÐ+>Ó?ò &˜ØŸ™�ð&àŸ-™-¨d˜-Ó3�CàŸ(™( >Ó2�CØ˜a’xØ! # a¡% &˜k˜ÙØ$'˜	Ø"% d s )˜à�d˜I wÐ.Ð.øÜò ÜÐ$ qÑ(¬s¯z©zÕ:Üûðús+   ‚HK: ÈK: È&K: È.CK: Ë:	L+ÌL&Ì&L+c                 ó.  — t        j                  t        «      }	 |j                  d| j	                  «       |t
        t        |t        t        t        ||f
«       |j                  «        |j                  dkD  }|sj|rh|j                  d|f«      j                  «       }|rE|d   r|d   j	                  «       dk(  r*|j                  d|||d   f«       |j                  «        d}|r™|j                  d|f«      j                  «       }|rdt        j                  t        «      }	 |j                  d	|d   | j	                  «       t        f«       |j                  «        |j                  «        t        d
xx   dz  cc<   nt        dxx   dz  cc<   |j                  «        y #  Y ŒHxY w# |j                  «        w xY w# t        $ r9}	t        dxx   dz  cc<   t!        d|	z  t"        j$                  ¬«       Y d }	~	Œjd }	~	ww xY w# |j                  «        w xY w)Nz£INSERT OR IGNORE INTO gov_raw (title, page_url, source_url, site_name, publish_date, category, industry, group_name, content, summary) VALUES (?,?,?,?,?,?,?,?,?,?)r   z0SELECT id, content FROM gov_raw WHERE page_url=?r   r.   z2UPDATE gov_raw SET content=?, summary=? WHERE id=?Tz'SELECT id FROM gov_raw WHERE page_url=?zHINSERT OR IGNORE INTO gov_search(rowid, title, site_name) VALUES (?,?,?)r   r	   r
   z  DB error: %srT   )Úsqlite3Úconnectr   Úexecuter0   ÚDOMAINÚ	SITE_NAMEÚCATEGORY_NAMEÚINDUSTRYÚGROUPÚcommitÚtotal_changesÚfetchoneÚcloseÚstatsr\   r]   r^   r_   )
r`   Úpage_urlÚpublish_daterf   rg   ÚconnÚis_newÚrowÚ_c2rm   s
             r   Ústore_recordrƒ   “   s¹  € Ü�?‰?œ9Ó%€Dð%Ø�‰ð+ð �[‰[‹]˜H¤f¬i¸ÜœH¤e¨Y¸ðAô		
ð 	�‰ŒØ×#Ñ# aÑ'ˆá™)Ø—,‘,ÐQÐT\ÐS^Ó_×hÑhÓjˆCÙ˜C šF c¨!¡f§l¡l£n¸Ò&:Ø—‘ÐQÐT]Ð_fÐhkÐlmÑhnÐSoÔpØ—‘”Ø�áØ—,‘,ÐHÈ8È+ÓV×_Ñ_ÓaˆCÙÜ—o‘o¤iÓ0�ð Ø—K‘KÐ jØ!$ Q¡¨¯©«¼	Ð BôDà—J‘J”Lð —I‘I”KÜ�%‹L˜AÑŒLä�&‹M˜QÑ‹Mð
 	�
‰
�øðÙûà—I‘I•Kûô ò 5Üˆh‹˜1Ñ‹ÜÐ Ñ"¬¯©×4Ò4ûð5ûð 	�
‰
�úsN   ›DF= Ä#:F! Å3F= Æ!F%Æ#F( Æ(F:Æ:F= Æ=	G?Ç/G:Ç5H Ç:G?Ç?H ÈHÚ__main__u   xunhua éƒ¨é—¨å…¬å¼€çˆ¬è™«)Údescriptionz--fullÚ
store_trueu   å…¨é‡�æ‰€æœ‰é¡µ)ÚactionÚhelpz--pagesu   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultrˆ   r   ú?u   å…¼å®¹æ—§é…�ç½®)Únargsr‰   rŠ   rˆ   u   æ€»é¡µæ•°: %du   å°†çˆ¬å�– %d é¡µ...u     ç¬¬%dé¡µ: ç©ºu     ç¬¬%dé¡µ: %dæ�¡g      à?u     ç¬¬%dé¡µé”™è¯¯: %su"   
å®Œæˆ�! æ–°%d, è·³è¿‡%d, é”™è¯¯%dr   r	   r
   )r.   r.   )DÚ__doc__Úosr   r^   ÚtimeÚjsonrp   r   Úbs4r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   rt   rs   r5   ru   rw   rv   r   ÚBASE_URLr   ÚDEFAULT_PAGESr!   r|   r$   r)   r<   rn   rƒ   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsÚargsÚchdirÚtotal_pagesr]   ÚfullÚpages_to_crawlÚpagesr   ÚminÚrangeÚpr'   r7   r8   r3   r`   r(   Ú_Údt_titleÚdt_daterR   rg   Úfinal_titleÚ
final_dateÚsleepr\   rm   rN   r%   r   ú<module>r¯      s°  ðñ
÷ (× '× 'Û Ý à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#8Ó9€	à#€	Ø	€Ø€Ø€Ø€Ø€Øð  Kð  L€à%€Ø�¨Ñ4Ñ4€	Ø€Ø€	Ø˜1¨Ñ*€òòòòHóV'ðT ˆzÓÛØ$ˆX×$Ñ$Ð1LÔM€FØ
×Ñ˜¨Ð<MÐÔNØ
×Ñ˜	¨°TÀÐÔOØ
×Ñ˜ 3¨S¸$ÐEVÐÔWØ×ÑÓ€Dà€B‡H�HˆXÔá!Ó#€KÙ	ˆ/˜KÑ
'Ô(à‡y‚yØ$‰Ø	�‰Ð	ØŸ™‰Ø	�‰Ð	ØŸ™‰à&ˆá˜¨Ó5€NÙ	Ð
 .Ñ
0Ô1á�>Ó"ò :ˆØˆð	:Ù" 8Ó,ˆDÙ Ó%ˆEÙÙÐ'¨(Ñ2Ô3ÙÙÐ%¨±3°u³:Ð(>Ñ>Ô?Ø!&ò  ‘��s˜AÙ3?ÀÓ3DÑ0�˜' 4¨Ø&Ò/¨%�Ø$�
Ù˜[¨#¨z¸4ÀÔIØ�—
‘
˜3•ñ ð:ñ$ 
Ð
/°5¸±<ÀÀvÁÐPUÐV^ÑP_Ð2`Ñ
`ÕaðW øðP ò 	:ÙÐ(¨H°a¨=Ñ8×9Ñ9ûð	:ús   ÆH Æ4AH È H<È%H7È7H<