Ë
    ¸¬uj  ã                   ó¤  — 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m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diZdZdZddddœZd*d„Zd„ Zd+d„Zedk(  �r6ddlZ ej@                  d¬«      Z!e!jE                  ddd¬«       e!jE                  de#dd¬«       e!jI                  «       Z% ejL                  e«       e%jN                  rdZ(ne%jP                  Z( ee(¬ «      Z)e)s e*d!«        ejV                  d«        e*d" e,e)«      z  «        e-e)«      D ]`  \  Z.\  Z/Z0Z1e.d#z  dk(  re.dkD  r e*d$e. e,e)«      fz  «        ee0«      \  Z2Z3Z4Z5e2xs e/Z6e3xs e1Z7 ee6e0e7e4e5«        ejp                  d%«       Œb  e*d&ed'   ed(   ed)   fz  «       yy),u…  
xjxinhe.gov.cn æ–°å’ŒåŽ¿æ”¿åºœ - å…¬ç¤ºå…¬å‘Šçˆ¬è™«
============================================
æ•°æ�®ä»¥JSONåµŒå…¥HTMLï¼Œè¯¦æƒ…é¡µrequestsç›´è¾¾ã€‚
æ �ç›®: channelId=729ï¼ˆå…¬ç¤ºå…¬å‘Šï¼‰

ç”¨æ³•:
  python3 crawl_xjxinhe.py                # å¢žé‡�çˆ¬ç¬¬1é¡µ
  python3 crawl_xjxinhe.py --pages 3      # çˆ¬3é¡µ
  python3 crawl_xjxinhe.py --full         # å…¨é‡�ï¼ˆJSONå·²å�«æ‰€æœ‰é¡µï¼‰
é    N)Údatetime)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbu   æ–°å’ŒåŽ¿äººæ°‘æ”¿åºœzwww.xjxinhe.gov.cnu   å…¬ç¤ºå…¬å‘Š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/https://www.xjxinhe.gov.cn/xwdt/gsgg/index.htmlzhttps://www.xjxinhe.gov.cn)ÚnewÚskipÚerrorsé   c                 ó  — t        j                  t        t        d¬«      }d|_        |j
                  }t        j                  d|t        j                  «      }|st        dt        j                  ¬«       g S d|j                  d«      z   d	z   }t        j                  |«      }t        |«      }t!        | |«      }t        d
||fz  «       g }t#        |«      D ]¯  }	||	   }
|
j                  dg «      D ]“  }|j                  dd«      }|j                  dd«      }|j                  dd«      }|r't%        j&                  |dz  «      j)                  d«      nd}|r|j+                  d«      s	t,        |z   }|j/                  |||f«       Œ• Œ± |S )u1   ä»Žé¦–é¡µJSONæ��å�–æ�¡ç›®ï¼Œå�ªå�–å‰�max_pagesé¡µé   ©ÚheadersÚtimeoutúutf-8zvar dataList=\[(.*?)\];zNo dataList found©Úfileú[r	   ú]u   JSONå…± %d é¡µ, çˆ¬å�– %d é¡µÚinfolistÚtitleÚ ÚurlÚreleaseTimer   iè  z%Y-%m-%dÚhttp)ÚrequestsÚgetÚLIST_URLÚHEADERSÚencodingÚtextÚreÚsearchÚDOTALLÚprintÚsysÚstderrÚgroupÚjsonÚloadsÚlenÚminÚranger   ÚfromtimestampÚstrftimeÚ
startswithÚDETAIL_BASEÚappend)Ú	max_pagesÚrÚhtmlÚmÚrawÚdataÚtotal_pagesÚpages_to_fetchÚitemsÚpage_idxÚpageÚarticler   r   ÚtsÚdates                   ú"/root/gov_crawler/crawl_xjxinhe.pyÚfetch_all_itemsr@   "   s`  € ä�‰”X¤w¸Ô;€AØ€A„JØ�6‰6€Dä
�	‰	Ð,¨d´B·I±IÓ>€AÙÜÐ!¬¯
©
Õ3Øˆ	à
�—‘˜“
Ñ
˜SÑ
 €CÜ�:‰:�c‹?€Dä�d“)€KÜ˜ KÓ0€NÜ	Ð
)¨[¸.Ð,IÑ
IÔJà€EÜ˜.Ó)ò 
-ˆØ�H‰~ˆØ—x‘x 
¨BÓ/ò 	-ˆGØ—K‘K ¨Ó,ˆEØ—+‘+˜e RÓ(ˆCØ—‘˜]¨AÓ.ˆBÙMO”8×)Ñ)¨"¨t©)Ó4×=Ñ=¸jÔIÐUWˆDá˜3Ÿ>™>¨&Ô1Ü! CÑ'�Ø�L‰L˜%  dÐ+Õ,ñ	-ð
-ð €Ló    c                 ó:  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }d}|j                  dddi¬	«      }|rs|j                  d
«      rb|d
   j                  «       }t        j                  d|«      }|r7|j                  d«      ›d|j                  d«      ›d|j                  d«      ›�}d}	d}
|j                  d«      }|rH|j                  ddg«      D ]  }|j                  «        Œ t        |«      }	|j                  d¬«      dd }
|||	|
fS # t         $ r(}t#        d|z  t$        j&                  ¬«       Y d}~yd}~ww xY w)u   èŽ·å�–è¯¦æƒ…é¡µ#zoomæ­£æ–‡r   r   r   Úlxmlr   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4})-(\d{2})-(\d{2})r	   ú-é   é   z#zoomÚscriptÚstyleT)ÚstripNéÈ   z    detail error: %sr   )r   r   r   r   )r   r   r   r   r   r   ÚfindrO   r    r!   r&   Ú
select_oneÚfind_allÚ	decomposeÚstrÚget_textÚ	Exceptionr#   r$   r%   )r   r2   Úsoupr   rD   r>   Úmeta_dr5   r4   Ú	body_htmlÚsummaryÚzoomÚtagÚes                 r?   Úfetch_detailr_   C   s~  € ð!Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V VÓ,ˆð ˆØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙ�D—H‘H˜YÔ'Ø˜‘O×)Ñ)Ó+ˆEð ˆØ—‘˜6¨&°)Ð)<�Ó=ˆÙ�f—j‘j Ô+Ø˜Ñ#×)Ñ)Ó+ˆCÜ—	‘	Ð4°cÓ:ˆAÙØ%&§W¡W¨Q¥Z°·±¸µ¸Q¿W¹WÀQ¼ZÐH�ð ˆ	ØˆØ�‰˜wÓ'ˆÙØ—}‘} h°Ð%8Ó9ò  �Ø—‘•ð ä˜D›	ˆIØ—m‘m¨$�mÓ/°°Ð5ˆGà�d˜I wÐ.Ð.øÜò ÜÐ$ qÑ(¬s¯z©zÕ:Üûðús   ‚E&E) Å)	FÅ2FÆF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: %sr   )Úsqlite3Úconnectr   ÚexecuterO   ÚDOMAINÚ	SITE_NAMEÚCATEGORY_NAMEÚINDUSTRYÚGROUPÚcommitÚtotal_changesÚfetchoneÚcloseÚstatsrW   r#   r$   r%   )
r   Úpage_urlÚpublish_daterZ   r[   ÚconnÚis_newÚrowÚ_c2r^   s
             r?   Ústore_recordrt   i   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   xjxinhe å…¬ç¤ºå…¬å‘Šçˆ¬è™«)Údescriptionz--fullÚ
store_trueu   å…¨é‡�)ÚactionÚhelpz--pagesu   é¡µæ•°(é»˜è®¤1))ÚtypeÚdefaultry   iç  )r1   u   æ— å�¯é‡‡é›†æ�¡ç›®u
   å…± %d æ�¡é
   z  [%d/%d]...g333333Ó?u"   
å®Œæˆ�! æ–°%d, è·³è¿‡%d, é”™è¯¯%dr   r   r   )r	   )r   r   )9Ú__doc__Úosr    r$   Útimer'   ra   r   r   Úbs4r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   re   rd   rf   rh   rg   r   r   r/   rm   r@   r_   rt   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsÚchdirÚfullÚpagesr9   r#   Úexitr)   Ú	enumerateÚir   r   Údate_from_listÚdt_titleÚdt_dateÚbodyr[   Úfinal_titleÚ
final_dateÚsleep© rA   r?   ú<module>r�      s	  ðñ
÷ (× '× 'Ý Û Ý à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#8Ó9€	à#€	Ø	€Ø€Ø€Ø€Øð  Kð  L€à<€Ø*€Ø˜1¨Ñ*€óòB#óL'ðT ˆzÓÛØ$ˆX×$Ñ$Ð1MÔN€FØ
×Ñ˜¨¸HÐÔEØ
×Ñ˜	¨°QÐ=NÐÔOØ×ÑÓ€Dà€B‡H�HˆXÔà‡y‚yØ‰à—
‘
ˆá eÔ,€EÙÙÐ"Ô#Øˆ�‰�Œá	ˆ,™˜U›Ñ
#Ô$á+4°UÓ+;ò Ñ'ˆÑ'ˆE�3˜Øˆr‰6�QŠ;˜1˜qš5Ù�. A¡s¨5£z ?Ñ2Ô3Ù+7¸Ó+<Ñ(ˆ�'˜4 ØÒ' %ˆØÒ. ˆ
Ù�[ # z°4¸ÔAØˆ�
‰
�3�ðñ 
Ð
/°5¸±<ÀÀvÁÐPUÐV^ÑP_Ð2`Ñ
`Õað= rA   