Ë
    ¸¬ujI*  ã                   óŠ  — 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 ee«      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)#ul   
å®‰å�‰åŽ¿-çŽ¯å¢ƒå½±å“�è¯„ä»· ç‹¬ç«‹çˆ¬è™« (JPAASç³»ç»Ÿ)
ç«™ç‚¹: www.anji.gov.cn
æ �ç›®: çŽ¯å¢ƒå½±å“�è¯„ä»·
é    NÚignore)ÚdatetimeÚ	timedeltaé   z[AutoPg] max_pages=Ú	SEARCH_DBz/root/search.dbu   å®‰å�‰åŽ¿-çŽ¯å¢ƒå½±å“�è¯„ä»·zwww.anji.gov.cniG  )Údaysz%Y-%m-%dz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zNhttps://www.anji.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ3628Úz2V6NtY1ABvxkwIRPBqVpÚcolumnu   æ �ç›®ä¸€listÚnullÚ8UHBe2bEEuEubNnILsQ82)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdc                 óÜ  — t        t        «      }t        j                  | |dœ«      |d<   t	        d«      D �]ÿ  }	 t        j                  t        |t        d¬«      }|j                  dk(  �rÊ|j                  «       }|j                  di «      j                  dd	«      }|rt        |«      d
k  r“t        t        «      }t        j                  | |dœ«      |d<   t        j                  t        |t        d¬«      }|j                  dk(  r3|j                  «       }	|	j                  di «      j                  dd	«      }ng dfc S g }
t        j                  d|t        j                  «      D ]‘  }t        j                  d|«      }|sŒt        j                  d|«      }|r|j!                  d«      j#                  «       nd	}|
j%                  dt&        z   |j!                  d«      z   |j!                  d«      |dœ«       Œ“ t        j                  d|«      }|rt)        |j!                  d«      «      nd}|
|fc S �Œ g dfS # t*        $ r%}|dk  rt-        j.                  d«       Y d}~�Œ0d}~ww xY w)u   èŽ·å�–APIåˆ—è¡¨é¡µ)ÚpageNoÚpageSizeÚ	paramJsoné   é   )ÚparamsÚheadersÚtimeoutéÈ   ÚdataÚhtmlÚ é2   r   z<li[^>]*>(.*?)</li>z"title="([^"]*)"[^>]*href="([^"]+)"z&<span class="time"[^>]*>([^<]*)</span>r   zhttps://é   )ÚurlÚtitleÚdatezcount[=:]\s*["\']?(\d+)N)ÚdictÚ
API_PARAMSÚjsonÚdumpsÚrangeÚrequestsÚgetÚAPI_URLÚHEADERSÚstatus_codeÚlenÚAPI_PARAMS_FALLBACKÚreÚfindallÚDOTALLÚsearchÚgroupÚstripÚappendÚDOMAINÚintÚ	ExceptionÚtimeÚsleep)ÚpageÚ	page_sizer   ÚretryÚrÚdr!   ÚpfÚrfÚdfÚitemsÚliÚmÚspanr'   Úcount_mÚtotal_countÚes                     ú/root/gov_crawler/crawl_anji.pyÚ
fetch_listrP   '   s
  € ä”*Ó€FÜŸ*™*°À)Ñ%LÓM€Fˆ;ÑÜ�q“ó !ˆð 	Ü—‘œW¨V¼WÈbÔQˆAØ�}‰} Ó#Ø—F‘F“H�Ø—u‘u˜V RÓ(×,Ñ,¨V°RÓ8�Ùœs 4›y¨2š~äÔ1Ó2�BÜ&*§j¡j¸DÈiÑ1XÓ&Y�B�{‘OÜ!Ÿ™¤g°bÄ'ÐSUÔV�BØ—~‘~¨Ò,ØŸW™W›Y˜Ø!Ÿv™v f¨bÓ1×5Ñ5°f¸bÓA™à! 1˜ušà�ÜŸ*™*Ð%;¸TÄ2Ç9Á9ÓMò 	�BÜŸ	™	Ð"GÈÓL�AÚÜ!Ÿy™yÐ)RÐTVÓW˜Ù8<˜tŸz™z¨!›}×2Ñ2Ô4À"˜ØŸ™Ø#-´Ñ#6¸¿¹À»Ñ#CØ%&§W¡W¨Q£ZØ$(ñ&õ ð	ô Ÿ)™)Ð$>ÀÓE�Ù7>œc '§-¡-°Ó"2Ô3ÀA�Ø˜kÐ)Ò)ñ7 $ð!ðD ˆqˆ5€Løô ò 	Ø�qŠyÜ—
‘
˜1”ÿùð	ús&   »DH=ÅAH=ÆB/H=È=	I+ÉI&É&I+c           	      óö  — g d¢}d}|D ]  }| j                  |«      }|dk\  sŒ n |dk  �rZd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| j                  dd|«      }|dk  ry| |d }d}t        t        |«      «      D �]¼  }	||	|	dz    dk(  r!|	dz   t        |«      k\  s
||	dz      dv r|d	z  }Œ0||	|	dz    dk(  sŒ<|d	z  }|dk(  sŒG|j                  dd|	«      }
|
dkD  r||
d	z   |	 n|d|	 }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  ¬«      }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  ¬«      }t	        j
                  dd|t        j                  ¬«      }t	        j
                  dd|t        j                  ¬«      }t	        j
                  dd|«      j                  «       }t        |«      dkD  s�Œ­|j                  «       c S  y)uI   æ��å�–æ­£æ–‡ - å�ªä¿�ç•™ <div class="w100 text"> å†…çš„å®žé™…æ–‡ç« å†…å®¹)zclass="w100 text"zclass='w100 text'z	w100 textéÿÿÿÿr   ))zid='barrierfree_container'Údiv)zid="barrierfree_containerrS   )z	id="zoom"rS   )zclass="nr_content"rS   ú<Né   z >
	r   r   z</ú>é   z<(script|style)[^>]*>.*?</\1>r"   )Úflagsú<[^>]+>r#   z<divé   z</div>zstyle="[^"]*mso-[^"]*"z&<span[^>]*mso-spacerun[^>]*>\s*</span>z width\s*[:=]\s*["\']?\d+px["\']?zmax-width:100%z!<div[^>]*main_5124[^>]*>.*?</div>z%<div[^>]*height:\s*8px[^>]*>.*?</div>)	ÚfindÚrfindr,   r2   r4   Úsubr6   ÚIr9   )r!   ÚpatsÚtext_div_startÚpatÚtagÚiÚdsÚsrD   ÚjÚgtÚcÚtexts                rO   Úextract_contentrj   P   s}  € ò E€DØ€NØò ˆØŸ™ 3›ˆØ˜QÓÙðð
 ˜Óð
ó 	-‰HˆC�ð —	‘	˜#“ˆAØ�1ŠuØØ—‘˜a ˜u˜I q¨!Ó,ˆBØ�AŠvØØ�R�S�	ˆAØˆAÜœ3˜q›6“]ò -�Ø�Q�q˜‘s�8  3 %˜yÒ(¨a°©c´S¸³Vªm¸qÀÀ1Á¹vÈÑ?SØ˜‘F‘AØ�q˜˜1™œS ›X™Ð&¨B¨s¨e°1¨+Ó5Ø˜‘F�AØ˜A“vØŸV™V C¨¨AÓ.˜Ø)+¨aª˜A˜b ™d 1™I°Q°q¸°V˜ÜŸF™FÐ#CÀRÈÔRT×R[ÑR[Ô\^×\`Ñ\`ÑR`Ôa˜Ü!Ÿv™v j°"°aÓ8×>Ñ>Ó@˜Ü˜t›9 r›>Ø#$§7¡7£9Ô,ò-ð	-ð4 ð 
�‰�F˜A˜~Ó	.€BØ	ˆA‚vØð 	ˆRˆSˆ	€AØ	€AÜ”3�q“6‹]ó %ˆØˆQˆq�‰sˆ8�vÒ 1 Q¡3¬#¨a«&¢=°A°a¸±c±F¸jÑ4HØ�‰F‰AØˆq��1‘ˆX˜Ó!Ø�‰FˆAØ�A‹vØ—V‘V˜C  AÓ&�Ø!# a¢�A�b˜‘d˜1‘I¨Q¨q°¨V�ô —F‘FÐ;¸RÀÌ"Ï)É)ÔTV×TXÑTXÉ.ÔY�ô —F‘FÐ4°b¸!Ä2Ç4Á4ÔH�ä—F‘FÐDÀbÈ!ÔSU×S\ÑS\Ô]_×]aÑ]aÑSaÔb�ô —F‘FÐ>Ð@PÐRSÔ[]×[_Ñ[_Ô`�ô —F‘FÐ?ÀÀQÌbÏiÉiÔX�Ü—F‘FÐCÀRÈÔRT×R[ÑR[Ô\�ä—v‘v˜j¨"¨aÓ0×6Ñ6Ó8�Ü�t“9˜r”>ØŸ7™7›9Ò$ð5%ð6 ó    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 )Nr"   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}))r4   r7   r8   r9   ÚfinditerÚmatchÚzfill)	r!   r&   ÚtmÚttmr'   ÚpmrD   ÚcmÚdms	            rO   Úextract_metarv   Ÿ   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Ø�$ˆ;Ðrk   c                 óè   — t        d«      D ]C  }	 t        j                  | t        d¬«      }|j                  dk(  rd|_        |j                  c S ŒE y #  |dk  rt        j                  d«       Y ŒexY w)Nr   r   )r   r   r   zutf-8r$   )	r,   r-   r.   r0   r1   Úencodingri   r>   r?   )r%   rB   rC   s      rO   Ú	fetch_urlry   ¶   sk   € Ü�q“ò ˆð	Ü—‘˜S¬'¸2Ô>ˆAØ�}‰} Ò#Ø$�”
Ø—v‘v’ð $ðð øð	Ø�qŠyÜ—
‘
˜1”üs   �=AÁA1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)z  DB error: r   )
Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEÚtotal_changesÚcommitÚcloser=   Úprint)r%   r&   r'   ÚcontentÚdbÚaffectedrN   s          rO   Úinsert_articler‡   Ã   sÆ   € Ü	�‰œÓ	#€BØ‡J�JÐ(Ô)ðØ
�
‰
ð XÜ˜˜S %¨¨w¸¸d¸s¸ÀXÐOcÐdô	fð ×#Ñ#ˆØ
�	‰	ŒÙØ�J‰Jð CØ�ôð �I‰IŒKØ
�‰Œ
ØˆøÜò Ø
�‰Œ
Ü�˜Q˜CÐ Ô!Üûðús   ¬A4B! Â!	CÂ*CÃCr#   c                 ó  — t        dd› �«       t        dt        › �«       t        d› «       t        d«      \  }}|s't        d«       t        d«      \  }}|st        d«       y t        d|› 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   sŒ	|d   ‘Œ }	}|	rZt        d|› dt        |«      › dt        |	«      › dt        |	«      › d�	«       t        |	«      t        k  r0t        dt        › d�«        n2t        d|› dt        |«      › d�«       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  }Œ3t        |«      \  }}|r|n|d   }|r|n|d   }|r|t        k  r|dz  }Œdt!        |«      }|r.t        t#        j$                  dd|«      j'                  «       «      nd}|dk  r|dz  }Œ¬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+|› d�«       y c c}w ),Nú
z2==================================================u   ðŸš€ r   u+   âš   APIæ— è¿”å›žï¼Œå°�è¯•fallbackå�‚æ•°...u   â�Œ APIä»�ç„¶æ— è¿”å›žu     å…±u   æ�¡é   é   r$   u     ç¬¬u   é¡µ: ç©º -> ç»“æ�Ÿr'   u   é¡µ: u    æ�¡ (z ~ ú)u     å…¨éƒ¨æ—©äºŽu   ï¼Œå�œæ­¢ç¿»é¡µu    æ�¡g333333Ã?u   
ðŸ“Š APIå…± r   r%   r&   rY   r"   é
   é   z  ...ú/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å…±)rƒ   r   rP   ÚminÚlistr,   Ú_MAX_PGÚextendr2   ÚmaxÚCUTOFFr>   r?   Ú	enumeratery   rv   rj   r4   r]   r9   r‡   r|   r}   r   r~   r�   Úfetchoner‚   )Ú	max_pagesrH   ÚtotalÚtotal_pagesÚ	all_itemsÚpgÚitsÚ_ÚitÚdatesÚnewÚskipÚno_bodyÚerrrc   Úitemr!   ÚptÚpdÚ
real_titleÚ	real_dater„   Útext_lenr…   rh   Úcnts                             rO   Úrunr¬   Ù   sŸ  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔä˜a“=�L€Eˆ5ÙÜÐ;Ô<Ü! !“}‰ˆˆuÙÜÐ*Ô+ØÜ	ˆE�%�˜Ð
ÔÜ�i %¨"¡*°Ñ!3Ó4€Kä�U“€IÜ�A”s˜;¬Ò(>°;Ó?À!ÑCÓDò ˆÜ˜B“‰ˆˆQÙÜ�E˜"˜Ð/Ð0Ô1ÙØ×Ñ˜ÔØ&)Ö8 ¨R°«Z��F“Ð8ˆÐ8ÙÜ�E˜"˜˜U¤3 s£8 *¨F´3°u³:°,¸cÄ#ÀeÃ*ÀÈQÐOÔPÜ�5‹zœFÒ"Ü˜¤v h¨oÐ>Ô?Ùä�E˜"˜˜U¤3 s£8 *¨DÐ1Ô2Ü�
‰
�4Õðô  
ˆNœ3˜y›>Ð*¨$Ð
/Ô0Ø!"Ð"€CÐ"ˆ$Ð"�˜3Ü˜Y¨Ó*ò ‰ˆˆ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Øä˜$˜u™+ z°9¸gÔFØ�1‰H‰Cà�A‰IˆDàˆq‰5�AŠ:Ü�E˜!˜˜Aœc )›nÐ-Ð.Ô/Ü�
‰
�4Öð?ô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�+˜X c U¨(°4°&¸ÀGÀ9ÈHÐUXÐTYÐYaÐbeÐafÐfiÐ
jÕkùòm 9s   Ã*
NÃ5NÚ__main__)r‹   )r#   )(Ú__doc__r-   r4   r|   r>   Úsysr*   ÚwarningsÚfilterwarningsr   r   ÚosÚ_SYSr2   ÚargvÚisdigitr<   r’   rƒ   ÚstrÚgetenvr   r   r;   ÚnowÚstrftimer•   r0   r/   r)   r(   r3   rP   rj   rv   ry   r‡   r¬   Ú__name__Úmp© rk   rO   ú<module>r½      sW  ðñ÷ 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€à
Z€àØØ'ØØØØ%ñ€
ñ ˜:Ó&Ð ó&òRLò^ò.
òó,Llð^ ˆzÒÙ  §¡›]¨QÒ.‰ˆS�X‰X�a‰[Ô	°B€BÙˆ…Gð rk   