Ë
    ¸¬uj–$  ã                   óN  — 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mZmZ ddlZddlZ	 e
e	j                  «      dkD  r2e	j                  d   j                  «       r ee	j                  d   «      ndZe� ed ee«      z   «        ej"                  dd«      ZdZd	Zd
ZdZ ej.                  «        ed¬«      z
  j1                  d«      ZddiZg Zdd„Zd„ Zd„ Zd„ Zd„ Z d„ Z!dd„Z"d„ Z#dd„Z$e%dk(  r5 e
ej                  «      dkD  r eej                  d   «      ndZ& e$e&«       yy)u‡   
æ°¸ä¸°åŽ¿-åŸºç¡€å»ºè®¾ ç‹¬ç«‹çˆ¬è™« (requestsç‰ˆ)
ç«™ç‚¹: www.jxyongfeng.gov.cn
æ �ç›®: åŸºç¡€å»ºè®¾ (catid=134486, ajax_type=5_xxgk)
é    N)ÚdatetimeÚ	timedeltaé   z[AutoPg] max_pages=Ú	SEARCH_DBz/root/search.dbu   æ°¸ä¸°åŽ¿-åŸºç¡€å»ºè®¾zwww.jxyongfeng.gov.cnÚ134486Ú5_xxgkiG  )Údaysz%Y-%m-%dú
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é2   c           	      óþ  — t         j                  d«      d   }dt        › d| › d�}t        d   ddt        › d�d	œ}t         t        |d
dt        |«      dg d¢dg	ddœ}t        d«      D ]a  }	 t        j                  |||d¬«      }|j                  dk(  r6|j                  «       }|j                  dg «      |j                  dd«      fc S Œc g dfS # t        $ r$}	|dk  rt        j                  d«       Y d}	~	Œ�d}	~	ww xY w)uD   é€šè¿‡requests dict-form dataè°ƒç”¨API (ä¿®æ­£: æ›¿ä»£curlå­�è¿›ç¨‹)Ú_r   úhttp://z/api-ajax_list-ú.htmlr
   ÚXMLHttpRequestz/xxgk-list-jichujianshe.html)r
   zX-Requested-WithÚRefererÚxxgkzY-m-dÚ20)zis_top DESCzdisplayorder DESCzinputtime DESCÚ Ú1)zajax_type[]Úis_dsé   é   )ÚdataÚheadersÚtimeoutéÈ   r   Útotalé   N)Ú	AJAX_TYPEÚsplitÚDOMAINÚHEADERSÚCATIDÚstrÚrangeÚrequestsÚpostÚstatus_codeÚjsonÚgetÚ	ExceptionÚtimeÚsleep)
ÚpageÚnumÚsite_idÚurlÚapi_headersÚ	form_dataÚretryÚrÚdÚes
             ú#/root/gov_crawler/crawl_yongfeng.pyÚ	fetch_apir9      s  € ä�o‰o˜cÓ" 1Ñ%€GØ”F�8˜?¨4¨&°Ð
6€Cä˜lÑ+Ø,ØœV˜HÐ$@ÐAñ€Kô "¤5¨'°6¸7ÄCÈÃHÈdÚNÐPRðTàñ€Iô
 �q“ò ˆð	Ü—‘˜c¨	¸;ÐPRÔSˆAØ�}‰} Ò#Ø—F‘F“H�Ø—u‘u˜V RÓ(¨!¯%©%°¸Ó*;Ð;Ò;ð $ðð ˆqˆ5€Løô ò 	Ø�qŠyÜ—
‘
˜1”ÿøð	ús   Á+ACÃ	C<ÃC7Ã7C<c                 óÂ   — dD ]"  }| j                  |«      sŒ| t        |«      d } Œ$ | j                  d«      }|dkD  r| d| j                  «       } | j	                  «       S )u-   æ¸…ç�†æ ‡é¢˜ä¸­çš„å‰�ç¼€å’Œdisplayorderåžƒåœ¾)u"   æ°¸ä¸°åŽ¿äººæ°‘æ”¿åºœä¿¡æ�¯å…¬å¼€-u   æ°¸ä¸°åŽ¿äººæ°‘æ”¿åºœ-u
   æ°¸ä¸°åŽ¿-NÚdisplayorderr   )Ú
startswithÚlenÚfindÚrstripÚstrip)ÚtitleÚpÚidxs      r8   Úclean_titlerD   7   se   € à[ò #ˆØ×Ñ˜AÕØœ#˜a›&˜'�N‰Eð#ð �*‰*�^Ó
$€CØ
ˆQ‚wØ�d�s�×"Ñ"Ó$ˆØ�;‰;‹=Ðó    c           	      ó¾  — g d¢}|D �]S  \  }}| j                  |«      }|dk  rŒ| j                  d|› �d|«      }|dk  rŒ:| |d }d}t        t        |«      «      D ]ü  }|||dz    d|› �k(  r!|dz   t        |«      k\  s
||dz      dv r|dz  }Œ2|||dz   t        |«      z    d	|› d
�k(  sŒN|dz  }|dk(  sŒY|j                  d
d|«      }	|	dkD  r||	dz   | n|d| }
t	        j
                  dd|
t        j                  t        j                  z  ¬«      }
t	        j
                  dd|
«      j                  «       }t        |«      dkD  sŒê|
j                  «       c c S  �ŒV y)u'   ç²¾å‡†æ��å�–æ­£æ–‡ - ä¼˜å…ˆxxgk_content))zclass="xxgk_content"Údiv)zclass="xxgk_cont"rG   )zid="barrierfree_containerrG   )zclass="articlecon"rG   )z	id="zoom"rG   r   ú<Né   z >
	r   r   z</ú>é   z<(script|style)[^>]*>.*?</\1>r   )Úflagsú<[^>]+>r   )	r>   Úrfindr%   r=   ÚreÚsubÚDOTALLÚIr@   )ÚhtmlÚpatternsÚpatÚtagÚiÚdsÚsr6   ÚjÚgtÚcÚtexts               r8   Úextract_contentr^   B   sy  € ò€Hð ó )‰ˆˆSØ�I‰I�c‹NˆØˆqŠ5ØØ�Z‰Z˜!˜C˜5˜	 1 aÓ(ˆØ�Š6ØØ��ˆIˆØˆÜ”s˜1“v“ò 	)ˆAØ��1�Q‘3ˆx˜Q˜s˜e˜9Ò$¨!¨A©#´°Q³ª-¸1¸Q¸q¹S¹6ÀZÑ;OØ�Q‘‘Ø�1�Q�q‘Sœ˜S›‘\Ð"¨¨3¨%¨q kÓ1Ø�Q‘�Ø˜“6ØŸ™  Q¨Ó*�BØ%'¨!¢V˜˜"˜Q™$˜q™	°°1°Q°�AÜŸ™Ð?ÀÀQÌbÏiÉiÔXZ×X\ÑX\ÉnÔ]�AÜŸ6™6 *¨b°!Ó4×:Ñ:Ó<�DÜ˜4“y 2“~Ø Ÿw™w›yÔ(ò	)ð)ð* rE   c                 ó¨  — d}t        j                  d| «      }|r|j                  d«      }|sLt        j                  d| «      }|r4t        j                  dd|j                  d«      «      j	                  «       }d}t        j
                  d| «      D ]�  }|j                  d«      j	                  «       }t        j                  d|«      }|sŒ;|j                  d«      › d|j                  d	«      j                  d	«      › d|j                  d
«      j                  d	«      › �} n |s)t        j                  d| «      }|r|j                  d«      }||fS )u   æ��å�–æ ‡é¢˜å’Œæ—¥æœŸr   z3<meta[^>]*name="ArticleTitle"[^>]*content="([^"]*)"r   z<title>(.*?)<z_[^_]+$zPubDate[^>]*content="([^"]*)"z(\d{4})-(\d{1,2})-(\d{1,2})ú-r   r   z(\d{4}-\d{2}-\d{2}))rO   ÚsearchÚgrouprP   r@   ÚfinditerÚmatchÚzfill)	rS   rA   ÚtmÚttmÚdateÚpmr6   ÚcmÚdms	            r8   Úextract_metarl   c   s%  € à€EÜ	�‰ÐIÈ4Ó	P€BÙ	Ø—‘˜“ˆÙÜ�i‰iÐ(¨$Ó/ˆÙÜ—F‘F˜: r¨3¯9©9°Q«<Ó8×>Ñ>Ó@ˆEØ€DÜ�k‰kÐ:¸DÓAò ˆØ�H‰H�Q‹K×ÑÓˆÜ�X‰XÐ4°aÓ8ˆÚØ—h‘h˜q“k�] ! B§H¡H¨Q£K×$5Ñ$5°aÓ$8Ð#9¸¸2¿8¹8ÀA»;×;LÑ;LÈQÓ;OÐ:PÐQˆDÙðñ Ü�Y‰YÐ-¨tÓ4ˆÙØ—8‘8˜A“;ˆDØ�$ˆ;ÐrE   c                 ó  — t        d«      D ]C  }	 t        j                  | t        d¬«      }|j                  dk(  rd|_        |j                  c S ŒE y # t        $ r$}|dk  rt        j                  d«       Y d }~Œod }~ww xY w)Nr   r   )r   r   r   zutf-8r   )
r%   r&   r*   r"   r(   Úencodingr]   r+   r,   r-   )r1   r4   r5   r7   s       r8   Ú	fetch_urlro   {   sw   € Ü�q“ò ˆð	Ü—‘˜S¬'¸2Ô>ˆAØ�}‰} Ò#Ø$�”
Ø—v‘v’ð $ðð øô ò 	Ø�qŠyÜ—
‘
˜1”ÿøð	ús   �=AÁ	B ÁA;Á;B c                 óª  — t        j                  t        «      }|j                  d«       	 |j                  dt        | | ||||dd ddf	«       |j
                  }|j                  «        |r#|j                  d| f«       |j                  «        |j                  «        |S # t        $ r(}|j                  «        t        d|› �«       Y d}~y	d}~ww xY w)
u   æ�’å…¥ä¸€æ�¡æ–‡ç« åˆ°search.dbzPRAGMA journal_mode=WALz‰INSERT OR IGNORE INTO gov_raw(site_name,source_url,page_url,title,publish_date,content,summary,status,category) VALUES(?,?,?,?,?,?,?,?,?)Nr   Úactiveu   åŸºç¡€å»ºè®¾z°INSERT INTO gov_search(rowid,title,site_name,summary) SELECT r.id,r.title,r.site_name,r.summary FROM gov_raw r WHERE r.page_url=? AND r.id NOT IN (SELECT rowid FROM gov_search)u     â�Œ DB error: r   )
Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEÚtotal_changesÚcommitÚcloser+   Úprint)r1   rA   rh   ÚcontentÚdbÚaffectedr7   s          r8   Úinsert_articler}   ˆ   sÆ   € ä	�‰œÓ	#€BØ‡J�JÐ(Ô)ðØ
�
‰
ð XÜ˜˜S %¨¨w¸¸d¸s¸ÀXÈ~Ð^ô	`ð ×#Ñ#ˆØ
�	‰	ŒÙØ�J‰Jð CØ�ôð �I‰IŒKØ
�‰Œ
ØˆøÜò Ø
�‰Œ
ÜÐ   Ð$Ô%Üûðús   ¬A4B! Â!	CÂ*CÃCc                 ó  — t        dt        › d�«       g }d}t        dt        | t        xs | «      dz   «      D ]Ñ  }t        |«      \  }}|s"|dk(  rt        d«       nt        d|› d�«        nŸ|dk(  r|}t        d|› dt        |«      › d	|› d
�«       |D ]^  }|j                  dt        › d|j                  dd«      › d�|j                  dd«      t        |j                  dd«      «      dd dœ«       Œ` t        j                  d«       ŒÓ t        dt        |«      › d�«       dx}x}x}	}
t        |d«      D �]5  \  }}|d   }|d   }|d   }|r|t        k  r|dz  }Œ't        |«      }|st        d|dd › �«       |
dz  }
ŒKt        |«      \  }}|rt!        |«      n
t!        |«      }|r|n|}|r|t        k  r|dz  }Œˆt#        |«      }|r.t        t%        j&                  dd|«      j)                  «       «      nd}|dk  r|	dz  }	|dk(  rt        d|dd › �«       Œæt+        ||||«      r|dz  }n|dz  }|dz  dk(  rt        d|› d t        |«      › �«       t        j                  d«       �Œ8 t        d!|› d"|› d#|	› d$|
› �«       |S )%u9   ä»ŽAPIçˆ¬å�–åˆ—è¡¨æ–‡ç« ï¼Œä»Žè¯¦æƒ…é¡µæ��å�–çœŸå®žæ ‡é¢˜u   
ðŸ“‹ APIåˆ—è¡¨çˆ¬å�– (ú)r   r   u     âš  APIæ— è¿”å›žu     ç¬¬u   é¡µ: ç©º -> ç»“æ�Ÿu   é¡µ: u	    æ�¡ (å…±õ   æ�¡)r   z/xxgk-show-Úidr   r   rA   Ú	inputtimeNé
   )r1   rA   rh   g333333Ó?u   
ðŸ“Š APIå…± õ    æ�¡r1   rh   õ     âš  å�–ä¸�åˆ°: r   rM   u     âš  ç©ºæ­£æ–‡: é   z  ...ú/u     APIæ–‡ç« : æ–°å¢žu   , è·³è¿‡u   , ç©ºæ­£æ–‡u   , é”™è¯¯)ry   r!   r%   ÚminÚ_MAX_PGr9   r=   Úappendr*   r$   r,   r-   Ú	enumerateÚCUTOFFro   rl   rD   r^   rO   rP   r@   r}   )Ú	max_pagesÚ	all_itemsÚtotal_countÚpgr   r   ÚitemÚnewÚskipÚno_bodyÚerrrW   Úitem_urlÚitem_title_apiÚ	item_daterS   ÚptÚpdÚ
real_titleÚ	real_daterz   Útext_lens                         r8   Ú	crawl_apirž   Ÿ   sá  € ä	Ð$¤V H¨AÐ
.Ô/Ø€IØ€KÜ�A”s˜9¤gÒ&:°Ó;¸aÑ?Ó@ò ˆÜ “m‰ˆˆeÙØ�QŠwÜÐ*Õ+ä˜˜b˜TÐ!3Ð4Ô5ÙØ˜!ÒØˆKÜ��b�T˜œs 4›y˜k¨°5°'¸Ð>Ô?Øò 	ˆDØ×ÑØ ¤ ¨°D·H±H¸TÀ2Ó4FÐ3GÀuÐMØŸ™ '¨2Ó.Ü˜DŸH™H [°"Ó5Ó6°s¸Ð;ñõ ð	ô 	�
‰
�3�ð#ô& 
ˆNœ3˜y›>Ð*¨$Ð
/Ô0Ø!"Ð"€CÐ"ˆ$Ð"�˜3Ü˜Y¨Ó*ó '‰ˆˆ4Ø˜‘;ˆØ˜g™ˆØ˜‘Lˆ	á˜¤VÒ+Ø�A‰IˆDØä˜Ó"ˆÙÜÐ% n°S°bÐ&9Ð%:Ð;Ô<Ø�1‰HˆCØô ˜dÓ#‰ˆˆBÙ(*”[ ”_´¸NÓ0Kˆ
Ù‘B )ˆ	á˜¤VÒ+Ø�A‰IˆDØä! $Ó'ˆÙCJ”3”r—v‘v˜j¨"¨gÓ6×<Ñ<Ó>Ô?ÐPQˆØ�bŠ=Ø�q‰LˆGØ˜1Š}ÜÐ)¨*°S°b¨/Ð):Ð;Ô<Øä˜( J°	¸7ÔCØ�1‰H‰Cà�A‰IˆDàˆq‰5�AŠ:Ü�E˜!˜˜Aœc )›nÐ-Ð.Ô/Ü�
‰
�3ŽðO'ôR 
Ð ˜u H¨T¨F°+¸g¸YÀhÈsÈeÐ
TÔUØ€JrE   c            
      óJ  — t         syt        dt        t         «      › d�«       d} t         D ]æ  }dt        › d|› �}t	        |«      }|st        d|› �«       Œ+t        |«      \  }}|rt        |«      n
t        |«      }|r|nd}t        |«      }|r.t        t        j                  dd|«      j                  «       «      nd}	t        d	|d
d › d|› d|	› d�«       |	dk  rt        d«       Œ½t        ||||«      r| dz  } t        d«       ŒÜt        d«       Œè t        d| › �«       | S )u'   è¡¥å……çˆ¬å�–ä¸�åœ¨APIåˆ—è¡¨ä¸­çš„æ–‡ç« r   u   
ðŸ“‹ è¡¥å……ç¼ºå¤±æ–‡ç«  (r€   r   r‡   r…   r   rM   z  Né(   z... (z, u   å­—)rƒ   u       âš  ç©ºæ­£æ–‡ï¼Œè·³è¿‡r   u       âœ… å…¥åº“u       â�­ å·²å­˜åœ¨u     è¡¥å……: æ–°å¢ž)ÚMISSING_ARTICLESry   r=   r!   ro   rl   rD   r^   rO   rP   r@   r}   )
r’   Úpathr1   rS   r™   rš   r›   rœ   rz   r�   s
             r8   Úcrawl_missingr£   æ   s4  € åØÜ	Ð'¬Ô,<Ó(=Ð'>¸dÐ
CÔDØ
€CÜ ò (ˆØœ�x˜q  Ð'ˆÜ˜‹~ˆÙÜÐ% c UÐ+Ô,ØÜ˜dÓ#‰ˆˆBÙ(*”[ ”_´¸DÓ0Aˆ
Ù‘B "ˆ	Ü! $Ó'ˆÙCJ”3”r—v‘v˜j¨"¨gÓ6×<Ñ<Ó>Ô?ÐPQˆÜ��:˜c˜r�?Ð# 5¨¨°2°h°Z¸tÐDÔEØ�bŠ=ÜÐ.Ô0ØÜ˜#˜z¨9°gÔ>Ø�1‰HˆCÜ�NÕ$äÐ%Õ'ð'(ô( 
Ð˜S˜EÐ
"Ô#Ø€JrE   c           	      ó  — t        dd› �«       t        dt        › �«       t        d› «       t        | «      }t        «       }t        d«       t	        j
                  t        «      }|j                  dt        f«       |j                  dt        f«       |j                  «        |j                  dt        f«      }|j                  «       d   }|j                  «        t        d	|› d
�«       t        dt        › d||z   › d|› d�«       y )Nú
z2==================================================u   ðŸš€ u   
ðŸ“Š FTSå�Œæ­¥...z(DELETE FROM gov_search WHERE site_name=?zyINSERT INTO gov_search(rowid,title,site_name,summary) SELECT rowid,title,site_name,summary FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?r   z  FTS: r„   u   
âœ… u   : æ€»è®¡æ–°å¢žu   , FTSå…±u   æ�¡)ry   ru   rž   r£   rr   rs   r   rt   rw   Úfetchonerx   )r�   Ún1Ún2r{   r\   Úcnts         r8   Úrunrª     së   € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔä	�9Ó	€BÜ	‹€Bô 
ÐÔ!Ü	�‰œÓ	#€BØ‡J�JÐ9¼I¸<ÔHØ‡J�Jð  Kô  NWð  MYô  ZØ‡I�I„KØ
�
‰
ÐFÌÈÓU€AØ
�*‰*‹,�q‰/€CØ‡H�H„JÜ	ˆG�C�5˜Ð
Ôä	ˆF”9�+˜^¨B¨r©E¨7°(¸3¸%¸sÐ
CÕDrE   Ú__main__)r   )'Ú__doc__r&   rO   rr   r,   Úsysr   r   ÚosÚ_SYSr=   ÚargvÚisdigitÚintr‰   ry   r$   Úgetenvr   ru   r!   r#   r   ÚnowÚstrftimerŒ   r"   r¡   r9   rD   r^   rl   ro   r}   rž   r£   rª   Ú__name__Úmp© rE   r8   ú<module>r¹      s3  ðñ÷ (× 'Ó 'ß (Û 	Û Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/ð ˆB�I‰I�kÐ#4Ó5€	Ø$€	Ø	 €Ø€Ø€	à
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€ØÐWÐ
X€àÐ óò4òòBò0
òó.DòNó<Eð, ˆzÒÙ  §¡›]¨QÒ.‰ˆS�X‰X�a‰[Ô	°B€BÙˆ…Gð rE   