Ë
    ¸¬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mZmZ ddlZ ej                  dd«      Z
dZdZdZd	Z ej                  «        ed
¬«      z
  j!                  d«      ZddiZd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.jishui.gov.cn
æ �ç›®: æ±¡æŸ“é˜²æ²» (catid=165920, ajax_type=4_xxgk)
åˆ—è¡¨: AJAX API POST (requests, é�žcurl)
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   å�‰æ°´åŽ¿-æ±¡æŸ“é˜²æ²»zwww.jishui.gov.cnÚ165920Ú4_xxgkiG  )Údaysz%Y-%m-%dú
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z0http://www.jishui.gov.cn/xxgk-show-10239261.htmlc           	      óþ  — 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)u#   é€šè¿‡requestsè°ƒç”¨APIèŽ·å�–åˆ—è¡¨Ú_r   úhttp://z/api-ajax_list-ú.htmlr	   ÚXMLHttpRequestz/xxgk-list-wuranfangzhi.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_jishui.pyÚ	fetch_apir7      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 )N)u"   å�‰æ°´åŽ¿äººæ°‘æ”¿åºœä¿¡æ�¯å…¬å¼€-u   å�‰æ°´åŽ¿äººæ°‘æ”¿åºœ-u
   å�‰æ°´åŽ¿-Údisplayorderr   )Ú
startswithÚlenÚfindÚrstripÚstrip)ÚtitleÚpÚidxs      r6   Úclean_titlerB   6   se   € Ø[ò #ˆØ×Ñ˜AÕØœ#˜a›&˜'�N‰Eð#ð �*‰*�^Ó
$€CØ
ˆQ‚wØ�d�s�×"Ñ"Ó$ˆØ�;‰;‹=Ðó    c           	      óV  — g d¢}|D �]  \  }}| 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  ¬«      }
|
j                  «       c c S  �Œ" y)u'   ç²¾å‡†æ��å�–æ­£æ–‡ - ä¼˜å…ˆxxgk_content))zclass="xxgk_content"Údiv)zid="barrierfree_containerrE   )zclass="zwxxgk_box"rE   )z	id="zoom"rE   )zclass="articlecon"rE   r   ú<Né   z >
	é   r   z</ú>é   z<(script|style)[^>]*>.*?</\1>r   )Úflags)	r<   Úrfindr#   r;   ÚreÚsubÚDOTALLÚIr>   )ÚhtmlÚpatternsÚpatÚtagÚiÚdsÚsr4   ÚjÚgtÚcs              r6   Úextract_contentr[   @   sS  € ò€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ØŸ7™7›9Ô$ò		%ð%ð& rC   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="([^"]*)"rH   z<title>(.*?)<z_[^_]+$zPubDate[^>]*content="([^"]*)"z(\d{4})-(\d{1,2})-(\d{1,2})ú-r   r   z(\d{4}-\d{2}-\d{2}))rM   ÚsearchÚgrouprN   r>   ÚfinditerÚmatchÚzfill)	rQ   r?   ÚtmÚttmÚdateÚpmr4   ÚcmÚdms	            r6   Úextract_metari   _   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à�$ˆ;ÐrC   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&   ÚencodingÚtextr)   r*   r+   )r/   r2   r3   r5   s       r6   Ú	fetch_urlrm   y   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)r/   r?   re   ÚcontentÚdbÚaffectedr5   s          r6   Úinsert_articler{   †   sÆ   € ä	�‰œÓ	#€BØ‡J�JÐ(Ô)ðØ
�
‰
ð XÜ˜˜S %¨¨w¸¸d¸s¸ÀXÈ~Ð^ô	`ð ×#Ñ#ˆØ
�	‰	ŒÙØ�J‰Jð CØ�ôð �I‰IŒKØ
�‰Œ
ØˆøÜò Ø
�‰Œ
ÜÐ   Ð$Ô%Üûðús   ¬A4B! Â!	CÂ*CÃCé2   c                 ó  — t        dt        › d�«       g }d}t        d| 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 ]n  }|j                  |j                  ddt        › d|j                  dd«      › d�«      |j                  dd«      t        |j                  dd«      «      dd dœ«       Œp 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 )%u   ä»ŽAPIçˆ¬å�–åˆ—è¡¨æ–‡ç« u   
ðŸ“‹ APIåˆ—è¡¨çˆ¬å�– (ú)r   rH   u     âš  APIæ— è¿”å›žu     ç¬¬u   é¡µ: ç©º -> ç»“æ�Ÿu   é¡µ: u	    æ�¡ (å…±õ   æ�¡)r/   r   z/xxgk-show-Úidr   r   r?   Ú	inputtimeNé
   )r/   r?   re   g333333Ó?u   
ðŸ“Š APIå…± õ    æ�¡re   õ     âš  å�–ä¸�åˆ°: r   ú<[^>]+>u     âš  ç©ºæ­£æ–‡: é   z  ...ú/u     APIæ–‡ç« : æ–°å¢žu   , è·³è¿‡u   , ç©ºæ­£æ–‡u   , é”™è¯¯)rw   r   r#   r7   r;   Úappendr(   r"   r*   r+   Ú	enumerateÚCUTOFFrm   ri   rB   r[   rM   rN   r>   r{   )Ú	max_pagesÚ	all_itemsÚtotal_countÚpgr   r   ÚitemÚnewÚskipÚno_bodyÚerrrU   Úitem_urlÚitem_title_apiÚ	item_daterQ   ÚptÚpdÚ
real_titleÚ	real_daterx   Útext_lens                         r6   Ú	crawl_apirœ   �   sß  € ä	Ð$¤V H¨AÐ
.Ô/Ø€IØ€KÜ�A�y 1‘}Ó%ò ˆÜ “m‰ˆˆeÙØ�QŠwÜÐ*Õ+ä˜˜b˜TÐ!3Ð4Ô5ÙØ˜!ÒØˆKÜ��b�T˜œs 4›y˜k¨°5°'¸Ð>Ô?Øò 	ˆDØ×ÑØ—x‘x ¨´°¸ÀDÇHÁHÈTÐSUÓDVÐCWÐW\Ð']Ó^ØŸ™ '¨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ŽðM&ôP 
Ð ˜u H¨T¨F°+¸g¸YÀhÈsÈeÐ
TÔUØ€JrC   c            
      óH  — t        dt        t        «      › d�«       d} t        D ]ì  }t        |«      }|st        d|› �«       Œt	        |«      \  }}|rt        |«      nt        |j                  d«      d   «      }|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åˆ—è¡¨ä¸­çš„æ–‡ç« u   
ðŸ“‹ è¡¥å……ç¼ºå¤±æ–‡ç«  (r   r   r„   r‡   éÿÿÿÿr   r…   z  Né(   z... (z, u   å­—)r‚   u       âš  ç©ºæ­£æ–‡ï¼Œè·³è¿‡rH   u       âœ… å…¥åº“u       â�­ å·²å­˜åœ¨u     è¡¥å……: æ–°å¢ž)rw   r;   ÚMISSING_ARTICLESrm   ri   rB   r   r[   rM   rN   r>   r{   )	r�   r/   rQ   r—   r˜   r™   rš   rx   r›   s	            r6   Úcrawl_missingr¡   ã   s)  € ä	Ð'¬Ô,<Ó(=Ð'>¸dÐ
CÔDØ
€CÜò (ˆÜ˜‹~ˆÙÜÐ% c UÐ+Ô,ØÜ˜dÓ#‰ˆˆBÙ(*”[ ”_´¸C¿I¹IÀc»NÈ2Ñ<NÓ0Oˆ
Ù‘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Ð
"Ô#Ø€JrC   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   æ�¡)rw   rs   rœ   r¡   rp   rq   r   rr   ru   Úfetchonerv   )r‹   Ún1Ún2ry   rZ   Úcnts         r6   Ú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ÕDrC   Ú__main__rH   )é#   )r|   )"Ú__doc__r$   rM   rp   r*   Úsysr   r   ÚosÚgetenvr   rs   r   r!   r   ÚnowÚstrftimerŠ   r    r    r7   rB   r[   ri   rm   r{   rœ   r¡   r¨   Ú__name__r;   ÚargvÚintÚmp© rC   r6   ú<module>r¶      så   ðñ÷ (× 'Ó 'ß (Û 	àˆB�I‰I�kÐ#4Ó5€	Ø$€	Ø	€Ø€Ø€	à
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€ØÐWÐ
X€ð 7ðÐ ó
ò4òò>ò4
òó.CòLó6Eð, ˆzÒÙ  §¡›]¨QÒ.‰ˆS�X‰X�a‰[Ô	°B€BÙˆ…Gð rC   