Ë
    ¸¬ujm  ã                   óz  — 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 ej                  d«       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 e	j0                  «        e
d¬«      z
  j3                  d«      ZddiZdZddddddddœZd!d„Zd„ Zd„ Z 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…   
æ‰¬å·žç»�æµŽæŠ€æœ¯å¼€å�‘åŒº-é€šçŸ¥å…¬å‘Š ç‹¬ç«‹çˆ¬è™«
ç«™ç‚¹: kfq.yangzhou.gov.cn
æ �ç›®: é€šçŸ¥å…¬å‘Š (tzgg, JPAAS publish-system)
é    NÚignore)ÚdatetimeÚ	timedeltaé   z[AutoPg] max_pages=Ú	SEARCH_DBz/root/search.dbu   æ‰¬å·žç»�å¼€åŒº-é€šçŸ¥å…¬å‘Šzkfq.yangzhou.gov.cniG  )Údaysz%Y-%m-%dz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zRhttps://kfq.yangzhou.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚl3juUa1slUgnLQOQgtJwyÚCU3LRJa5b4SPXybhicnZlÚcolumnu   åˆ—è¡¨åˆ—è¡¨ÚnullÚLw8wtupr8vbNtGQMW3yCr)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdc           	      óB  — t        t        «      }t        j                  | |dœ«      |d<   t	        d«      D �]2  }	 t        j                  t        |t        dd¬«      }|j                  dk(  rý|j                  «       }|j                  di «      j                  d	d
«      }g }t        j                  d|t        j                  «      D ]g  }t        j                  d|«      }	|	sŒ|j                  dt        z   |	j!                  d«      z   |	j!                  d«      |	j!                  d«      dœ«       Œi t        j                  d|«      }
|
rt#        |
j!                  d«      «      nd}||fc S �Œ5 g dfS # t$        $ r%}|dk  rt'        j(                  d«       Y d}~�Œcd}~ww xY w)u   èŽ·å�–APIåˆ—è¡¨é¡µ)ÚpageNoÚpageSizeÚ	paramJsoné   é   F)ÚparamsÚheadersÚtimeoutÚverifyéÈ   ÚdataÚhtmlÚ z<li[^>]*>(.*?)</li>z[title="([^"]*)"[^>]*href="([^"]+)"[^>]*>([^<]+)</a>\s*<span[^>]*>(\d{4}-\d{2}-\d{2})</span>zhttps://é   r   é   )ÚurlÚtitleÚdatezcount="(\d+)"r   N)ÚdictÚ
API_PARAMSÚjsonÚdumpsÚrangeÚrequestsÚgetÚAPI_URLÚHEADERSÚstatus_codeÚreÚfindallÚDOTALLÚsearchÚappendÚDOMAINÚgroupÚintÚ	ExceptionÚtimeÚsleep)ÚpageÚ	page_sizer   ÚretryÚrÚdr"   ÚitemsÚliÚmÚcount_mÚtotal_countÚes                ú'/root/gov_crawler/crawl_yangzhou_kfq.pyÚ
fetch_listrJ   %   sl  € ä”*Ó€FÜŸ*™*°À)Ñ%LÓM€Fˆ;ÑÜ�q“ó ˆð	Ü—‘œW¨V¼WÈbÐY^Ô_ˆAØ�}‰} Ò#Ø—F‘F“H�Ø—u‘u˜V RÓ(×,Ñ,¨V°RÓ8�à�ÜŸ*™*Ð%;¸TÄ2Ç9Á9ÓMò 	�BÜŸ	™	ØvØó�Aò ØŸ™Ø#-´Ñ#6¸¿¹À»Ñ#CØ%&§W¡W¨Q£ZØ$%§G¡G¨A£Jñ&õ ð	ô Ÿ)™)Ð$4°dÓ;�Ù7>œc '§-¡-°Ó"2Ô3ÀA�Ø˜kÐ)Ò)ñ% $ðð2 ˆqˆ5€Løô ò 	Ø�qŠyÜ—
‘
˜1”ÿùð	ús   »B%E0Ã!BE0Å0	FÅ9FÆFc           	      ó¶  — 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   æ��å�–æ­£æ–‡ - id=zoom))z	id="zoom"Údiv)zclass="contentShow"rL   r   ú<Nr%   z >
	r   r   z</ú>é   z<(script|style)[^>]*>.*?</\1>r#   )Úflagsú<[^>]+>é2   )	ÚfindÚrfindr-   Úlenr3   Úsubr5   ÚIÚstrip)r"   ÚpatÚtagÚiÚdsÚsrB   ÚjÚgtÚcÚtexts              rI   Úextract_contentrb   E   sp  € àJó )‰ˆˆ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Ô(ò	)ð)ð* ó    c                 ó~  — d}t        j                  d| «      }|r|j                  d«      }|s7t        j                  d| «      }|r|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PubDate[^>]*content="([^"]*)"z(\d{4})-(\d{1,2})-(\d{1,2})ú-r$   r   z(\d{4}-\d{2}-\d{2}))r3   r6   r9   rX   ÚfinditerÚmatchÚzfill)	r"   r'   ÚtmÚttmr(   ÚpmrB   ÚcmÚdms	            rI   Úextract_metarn   _   s  € à€EÜ	�‰ÐIÈ4Ó	P€BÙ	Ø—‘˜“ˆÙÜ�i‰iÐ(¨$Ó/ˆÙØ—I‘I˜a“L×&Ñ&Ó(ˆ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 ]D  }	 t        j                  | t        dd¬«      }|j                  dk(  rd|_        |j                  c S ŒF y # t        $ r$}|dk  rt        j                  d«       Y d }~Œpd }~ww xY w)Nr   é   F)r   r   r   r    zutf-8r$   )
r-   r.   r/   r1   r2   Úencodingra   r;   r<   r=   )r&   r@   rA   rH   s       rI   Ú	fetch_urlrr   w   sy   € Ü�q“ò ˆð	Ü—‘˜S¬'¸2ÀeÔLˆ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)	NzPRAGMA journal_mode=WALz‰INSERT OR IGNORE INTO gov_raw(site_name,source_url,page_url,title,publish_date,content,summary,status,category) VALUES(?,?,?,?,?,?,?,?,?)r    Ú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'   r(   ÚcontentÚdbÚaffectedrH   s          rI   Úinsert_articler€   „   sÆ   € Ü	�‰œÓ	#€BØ‡J�JÐ(Ô)ðØ
�
‰
ð XÜ˜˜S %¨¨w¸¸d¸s¸ÀXÈ~Ð^ô	`ð ×#Ñ#ˆØ
�	‰	ŒÙØ�J‰Jð CØ�ôð �I‰IŒKØ
�‰Œ
ØˆøÜò Ø
�‰Œ
ÜÐ   Ð$Ô%Üûðús   ¬A4B! Â!	CÂ*CÃCr    c                 óÆ  — t        dd› �«       t        dt        › �«       t        d› «       t        d«      \  }}|st        d«       y t        d|› d|dz   d	z  › d
�«       t        | |dz   d	z  «      }t	        |«      }t        dt        |t        xs |«      dz   «      D ]©  }t        |«      \  }}|st        d|› d�«        nˆ|j                  |«       |D �cg c]  }|d   ‘Œ	 }	}t        d|› dt        |«      › d|	d   › d|	d   › d�	«       t        |	«      t        k  rt        dt        › d�«        nt        j                  d«       Œ« t        dt        |«      › d�«       dx}
x}x}}t        |d«      D �]  \  }}|d   r|d   t        k  r|dz  }Œt        |d   «      }|s|dz  }Œ4t        |«      \  }}|r|n|d   }|r|n|d   }|r|t        k  r|dz  }Œet!        |«      }|r.t        t#        j$                  dd|«      j'                  «       «      nd}|dk  r|dz  }|dk(  rt        d|d d  › �«       ŒÃt)        |d   |||«      r|
dz  }
n|dz  }|d!z  dk(  rt        d"|› d#t        |«      › �«       t        j                  d$«       �Œ t        d%«       t+        j,                  t.        «      }|j1                  d&t        f«       |j1                  d't        f«       |j3                  «        |j1                  d(t        f«      }|j5                  «       d   }|j7                  «        t        d)|› d�«       t        d*t        › d+|
› d,|› d-|› d.|› d/|› d0�«       y c c}w )1Nú
z2==================================================u   ðŸš€ r   u   âš   APIæ— è¿”å›žu     å…±u   æ�¡, 15æ�¡/é¡µ = é   r   u   é¡µr$   u     ç¬¬u   é¡µ: ç©º -> ç»“æ�Ÿr(   u   é¡µ: u    æ�¡ (r   z ~ éÿÿÿÿú)u      è¯¥é¡µå·²å…¨éƒ¨æ—©äºŽæˆªæ–­æ—¥u   ï¼Œå�œæ­¢ç¿»é¡µg333333Ã?u   
ðŸ“Š APIå…± u    æ�¡r&   r'   rQ   r#   é
   u     âš  ç©ºæ­£æ–‡: rp   é   z  ...ú/g333333Ó?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=?z  FTS: u   
âœ… u   : æ–°å¢žu   , è·³è¿‡u   , ç©ºæ­£æ–‡u   , é”™è¯¯u   , FTSå…±u   æ�¡)r|   rx   rJ   ÚminÚlistr-   Ú_MAX_PGÚextendrU   ÚmaxÚCUTOFFr<   r=   Ú	enumeraterr   rn   rb   r3   rV   rX   r€   ru   rv   r   rw   rz   Úfetchoner{   )Ú	max_pagesrC   ÚtotalÚtotal_pagesÚall_list_itemsÚpgÚitsÚ_ÚitÚdatesÚnewÚskipÚno_bodyÚerrr[   Úitemr"   ÚptÚpdÚ
real_titleÚ	real_dater}   Útext_lenr~   r`   Úcnts                             rI   Úrunr¥   š   s•  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔô ˜a“=�L€Eˆ5ÙÜÐ!Ô"ØÜ	ˆE�%�Ð)¨5°©8°b©.Ð)9¸Ð
=Ô>Ü�i %¨"¡*°Ñ!3Ó4€Kä˜%“[€NÜ�A”s˜;¬Ò(>°;Ó?À!ÑCÓDò ˆÜ˜B“‰ˆˆQÙÜ�E˜"˜Ð/Ð0Ô1ÙØ×Ñ˜cÔ"Ø&)Ö* ��F“Ð*ˆÐ*Ü��b�T˜œs 3›x˜j¨¨u°Q©x¨j¸¸EÀ"¹I¸;ÀaÐHÔIäˆu‹:œÒÜÐ4´V°H¸OÐLÔMÙÜ�
‰
�4Õðô 
ˆNœ3˜~Ó.Ð/¨tÐ
4Ô5Ø!"Ð"€CÐ"ˆ$Ð"�˜3Ü˜^¨QÓ/ó !‰ˆˆ4Ø�Š<˜D ™L¬6Ò1Ø�A‰IˆDØä˜˜e™Ó%ˆÙØ�1‰HˆCØä˜dÓ#‰ˆˆBÙ‘R 4¨¡=ˆ
Ù‘B $ v¡,ˆ	á˜¤VÒ+Ø�A‰IˆDØä! $Ó'ˆÙCJ”3”r—v‘v˜j¨"¨gÓ6×<Ñ<Ó>Ô?ÐPQˆØ�bŠ=Ø�q‰LˆGØ˜1Š}ÜÐ)¨*°S°b¨/Ð):Ð;Ô<Øä˜$˜u™+ z°9¸gÔFØ�1‰H‰Cà�A‰IˆDàˆq‰5�AŠ:Ü�E˜!˜˜Aœc .Ó1Ð2Ð3Ô4Ü�
‰
�3ŽðC!ôF 
ÐÔ!Ü	�‰œÓ	#€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�+˜X c U¨(°4°&¸ÀGÀ9ÈHÐUXÐTYÐYaÐbeÐafÐfiÐ
jÕkùòm +s   ÃMÚ__main__)r   )r    )&Ú__doc__r.   r3   ru   r<   Úsysr+   ÚwarningsÚfilterwarningsr   r   ÚosÚ_SYSrU   ÚargvÚisdigitr:   r‹   r|   ÚstrÚgetenvr   rx   r8   ÚnowÚstrftimerŽ   r1   r0   r*   rJ   rb   rn   rr   r€   r¥   Ú__name__Úmp© rc   rI   ú<module>r¶      sH  ðñ÷ 8× 7× 7Ó 7Ø €× Ñ ˜Ô !ß (Û 	Û Ù" 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ò0
òó,JlðZ ˆzÒÙ  §¡›]¨QÒ.‰ˆS�X‰X�a‰[Ô	°C€BÙˆ…Gð rc   