Ë
    ¸¬ujŸ&  ã                   óâ  — d 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mZ ddlZddl	m
Z
 dZedz   ZdZd	Zd
ZdZddiZ ej$                  «       Zej(                  j+                  e«       d„ Zd„ Zefd„Zd„ Zd„ Zefd„Zedk(  rbeZ eej>                  «      dkD  rAej>                  dd D ]/  Z e jC                  d«      sŒ	  e"e jG                  d«      d   «      ZŒ1  ee¬«       yy# e$$ r Y ŒDw xY w)uÕ   
é•¿æ±Ÿç½‘ - æ­¦æ±‰èµ„è®¯ > æ–‡å­—é“¾ çˆ¬è™«
CMS: é•¿æ±Ÿç½‘è‡ªå»º (TRS UEditor)
åˆ—è¡¨: http://zx.cjn.cn/wkxw/index.htm (page1) / index_N.htm (page N+1, N=0..79)
è¯¦æƒ…: http://zx.cjn.cn/wkxw/YYYYMM/tXXXXXXXX.htm
é    N)Údatetime)Úurljoin)ÚBeautifulSoupzhttp://zx.cjn.cn/wkxwú/u   é•¿æ±Ÿç½‘-æ­¦æ±‰èµ„è®¯u   æ–°é—»åª’ä½“z/mnt/data/search.dbéP   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 óV   — | syt        j                  dd| «      } | j                  «       S )NÚ z(&middot;|&nbsp;|\s)+ú )ÚreÚsubÚstrip)Útexts    ú#/root/gov_crawler/crawl_cjn_wkxw.pyÚ
clean_textr   %   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 óˆ  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]r  }|j                  sŒ|j                  dk(  r'|j	                  d¬«      }|sŒ5|j                  |«       ŒG|j                  dk(  r|j                  t        |«      «       Œq|j                  d	v r„|j                  dd¬
«      D ]:  }|j                  d«      rŒ|j	                  d¬«      }|sŒ*|j                  |«       Œ< |j                  dd¬
«      D ]  }|j                  t        |«      «       Œ �Œ|j                  dk(  s�Œ|j                  dd«      }	|j                  dd«      }
|	s�Œ<|	j                  d«      st        ||	«      n|	}|j                  d|
› d|› d�«       �Œu dj                  |«      S )uF   æ��å�–æ­£æ–‡ï¼Œå�ªå¤„ç�†ç›´æŽ¥å­�å…ƒç´ é�¿å…�é‡�å¤�ï¼Œè¡¨æ ¼ä¿�æŒ�HTMLr	   úhtml.parserÚscriptÚstyleÚpT)r   Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltÚhttpz![z](ú)z

)r   Ú	decomposeÚchildrenÚnameÚget_textÚappendÚstrÚfind_allÚfind_parentÚgetÚ
startswithr   Újoin)Úhtml_contentÚ
detail_urlÚsoupÚtagÚpartsÚchildÚtr   Útblr   r   Úfull_srcs               r   Úclean_content_htmlr5   ,   s—  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðà€EØ—‘ó 6ˆØ�zŠzØØ�:‰:˜ÒØ—‘ T�Ó*ˆAÚØ—‘˜Q•Ø�Z‰Z˜7Ò"Ø�L‰Lœ˜U›Õ$Ø�Z‰ZÐ8Ñ8Ø—^‘^ C°4�^Ó8ò $�Ø—=‘= Ô)ØØ—J‘J T�JÓ*�ÚØ—L‘L •Oð$ð —~‘~ g¸�~Ó>ò '�Ø—‘œS ›XÕ&ò'à�Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜r #  b¨¨
°!Ð4Ö5ð/6ð0 �;‰;�uÓÐr   c           	      ó¤  — g }t        | «      D �]  }|dk(  r
t        dz   }nt        d|› d�z   }t        d|dz   › d�d¬	«       	 t        j	                  |d
¬«      }d|_        |j                  dk7  rt        d|j                  › �«        |S 	 t        |j                  d«      }|j                  dd¬«      }|st        d«        |S d}|D �]7  }	|	j	                  dd«      }
|	j	                  dd«      xs t        |	j                  dd¬«      «      }|
r|sŒK|
j                  d«      st        t        |
«      n|
}|	j                  dd¬«      }|r|j                  dd¬«      nd}|r|j                  dd¬«      nd}|rt        |j                  «       «      nd}|rt        |j                  «       «      nd}t!        j"                  d |«      }|r|j%                  d«      nd}|j'                  |t        |«      ||d!œ«       |dz  }�Œ: t        |› d"�«       t)        j*                  d#«       �Œ |S # t        $ r}t        d|› �«       Y d}~ |S d}~ww xY w)$u$   é��åŽ†æ‰€æœ‰åˆ†é¡µèŽ·å�–æ–‡ç« åˆ—è¡¨r   z	index.htmÚindex_z.htmu     ç¬¬é   u   é¡µ...r
   ©Úendé   ©Útimeoutúutf-8éÈ   zHTTP úERR Nr   ÚaÚa_arc©Úclass_u	   æ— åˆ—è¡¨Úhrefr	   Útitler   Úp_titr   Úp_infoÚspanÚ	span_infoÚ	span_timez(\d{4}-\d{2}-\d{2}))ÚurlrF   ÚdateÚsourceu   æ�¡ç333333Ó?)ÚrangeÚLIST_URLÚprintÚsessionr)   ÚencodingÚstatus_codeÚ	Exceptionr   r   r'   r   Úfindr*   r   r$   r   ÚsearchÚgroupr%   ÚtimeÚsleep)Ú	max_pagesÚ	all_itemsÚpagerL   ÚrÚer.   ÚlinksÚcountrA   rE   rF   Úfull_urlrH   Úsrc_spanÚ	time_spanrN   Údate_strÚdmrM   s                       r   Ú
fetch_listrh   P   s^  € à€IÜ�iÓ ó 0ˆØ�1Š9Ü˜[Ñ(‰Cä˜v d V¨4Ð0Ñ0ˆCÜ��d˜1‘f�X˜VÐ$¨#Õ.ð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØ�}‰} Ò#Ü˜˜aŸm™m˜_Ð-Ô.ØðL ÐðQ $ô ˜QŸV™V ]Ó3ˆØ—‘˜c¨'�Ó2ˆÙÜ�+ÔØð: Ðð7 ˆØó 	ˆAØ—5‘5˜ Ó$ˆDØ—E‘E˜' 2Ó&ÒQ¬*°Q·V±V¸CÈ°VÓ5PÓ*QˆEÙ™uØØ6:·o±oÀfÔ6M”wœx¨Ô.ÐSWˆHà—V‘V˜C¨�VÓ1ˆFÙBH�v—{‘{ 6°+�{Ô>ÈdˆHÙCI˜Ÿ™ F°;˜Ô?ÈtˆIÙ8@”Z × 1Ñ 1Ó 3Ô4ÀbˆFÙ;D”z )×"4Ñ"4Ó"6Ô7È"ˆHä—‘Ð1°8Ó<ˆBÙ"$�2—8‘8˜A”;¨"ˆDà×ÑØÜ# EÓ*ØØ ñ	ô ð �Q‰JŠEð-	ô0 	���sˆmÔÜ�
‰
�3Žða0ðb ÐøôK ò 	Ü�D˜˜�*ÔÜðF ÐûðK	ús   ÁAH,È,	IÈ5I
É
Ic                 ó   — t        | d«      }d}d}d}d}|j                  dd¬«      }|rt        |j                  «       «      }|j                  dd¬«      }|rs|j                  «       }	t	        j
                  d|	«      }
|
r|
j                  d	«      d
d }t	        j
                  d|	«      }|r|j                  d	«      j                  «       }|j                  dd¬«      }|r*|j                  dd¬«      }|rt        t        |«      |«      }||||fS )u?   è§£æž�è¯¦æƒ…é¡µï¼Œè¿”å›ž (title, publish_date, source, content)r   r	   Úh1z	arc-titlerC   r   zarc-metaz(\d{4}-\d{2}-\d{2} \d{2}:\d{2})r8   Né
   u   æ�¥æº�[ï¼š:]\s*([^<\s]+)zarc-mainÚview)
r   rW   r   r$   r   rX   rY   r   r5   r&   )ÚhtmlrL   r.   rF   Úpublish_daterN   ÚcontentÚtitle_h1Úmeta_divÚ	meta_textrg   ÚsmÚmain_divÚview_divs                 r   Úparse_detailrv   ˆ   s  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð �y‰y˜ kˆyÓ2€HÙÜ˜8×,Ñ,Ó.Ó/ˆð �y‰y˜ zˆyÓ2€HÙØ×%Ñ%Ó'ˆ	Ü�Y‰YÐ9¸9ÓEˆÙØŸ8™8 A›; s¨Ð+ˆLÜ�Y‰YÐ2°IÓ>ˆÙØ—X‘X˜a“[×&Ñ&Ó(ˆFð �y‰y˜ zˆyÓ2€HÙØ—=‘= ¨v�=Ó6ˆÙÜ(¬¨X«¸Ó<ˆGà�, ¨Ð/Ð/r   c                 óB  — | d   j                  dd«      }|xs | d   j                  dd«      }|xs | j                  dd«      }|xs | j                  dt        «      }|j                  dd«      }|j                  dd«      }	|dd	 }
t        }d
|› d|› d|	› d|› d|› d|› d|
› dt        › d�}|dz   }	 t	        j
                  dt        g|ddd¬«      }|j                  dk(  r`|j                  j                  «       }	 t        |j                  «       «      }|dkD  rPd|› d�}t	        j
                  dt        g|ddd¬«       yd|j                  vrt        d|j                  dd	 › �«       y# t        $ r d}Y Œcw xY w# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)u   å†™å…¥gov_raw + FTS gov_searchrL   ú'z''rF   rM   r	   rN   Nr?   zœINSERT OR IGNORE INTO gov_raw 
        (page_url, title, content, publish_date, source_url, site_name, summary, group_name, industry)
    VALUES 
        ('z', 'u   ', 'æ”¿åºœå…¬å‘Š');
zDSELECT CASE WHEN changes() > 0 THEN last_insert_rowid() ELSE 0 END;
Úsqlite3Tr;   )ÚinputÚcapture_outputr   r=   r   z‡INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary)
SELECT rowid, title, site_name, summary FROM gov_raw WHERE rowid = z;
zUNIQUE constraintz	    [DB] u       [DB] é”™è¯¯: F)Úreplacer)   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr   ÚintÚ
ValueErrorÚstderrrR   rV   )ÚitemÚdetail_titleÚpub_daterN   ro   Úpage_urlrF   rn   Úsource_nameÚcontent_safeÚsummaryÚ	site_nameÚsql_rawÚcombined_sqlÚresultÚoutÚrowidÚfts_sqlr`   s                      r   Úinsert_articler•   «   só  € à�E‰{×"Ñ" 3¨Ó-€HØÒ*˜T '™]×3Ñ3°C¸Ó>€EØÒ3˜tŸx™x¨°Ó3€LØÒ9˜DŸH™H X¬yÓ9€KØ×%Ñ% c¨4Ó0€KØ—?‘? 3¨Ó-€LØ�D�Sˆk€GÜ€Iðð ˆ*�D˜˜˜t L >°°l°^À4ÈÀzÐQUÐV_ÐU`Ð`dÐelÐdmÐmqÔrwÐqxð yð€Gð
 ð ñ €Lð'Ü—‘ØœÐ ØØ d°Bô
ˆð
 ×Ñ Ò!Ø—-‘-×%Ñ%Ó'ˆCðÜ˜CŸI™I›KÓ(�ð �qŠyðDØDIÀ7ð Kð�ô —‘ 	¬7Ð3¸7ÐSWÐ^bÐlnÕoØà"¨&¯-©-Ñ7Ü˜	 &§-¡-°°Ð"5Ð!6Ð7Ô8ð øô ò Ø’ðûô ò 'ÜÐ! ! Ð%×&Ð&Øûð'úsC   Â3A	E= Ã=E, Ä+E= Å)E= Å,E:Å7E= Å9E:Å:E= Å=	FÆFÆFc                 ó˜  — t        d«       t        | «      }|st        d«       y t        dt        |«      › d�«       t        «       }	 t	        j
                  dt        dgddd¬	«      }|j                  d
k(  rL|j                  j                  «       r2t        |j                  j                  «       j                  d«      «      }t        dt        |«      › �«       d
}d
}t        |«      D ]ø  \  }}|d   }||v r|dz  }Œt        d|dz   › dt        |«      › d|d   d d › d�d¬«       	 t        j                  |d¬«      }	d|	_        t%        |	j&                  |«      \  }}}}|j                  «       st        d«       |dz  }Œ™t)        |||||«      r,|dz  }t        dt        |j                  «       «      › d�«       n|dz  }t        d«       t!        j"                  d«       Œú t        d|› d |› d�«       t        d!«       y # t        $ r Y �ŒKw xY w# t        $ r.}
t        d|
› �«       t!        j"                  d«       Y d }
~
�Œ[d }
~
ww xY w)"Nu%   === é•¿æ±Ÿç½‘ - æ–‡å­—é“¾ çˆ¬è™« ===
u   æ— æ–‡ç« åˆ—è¡¨u   
åˆ—è¡¨æ€»è®¡: u    æ�¡ry   z>SELECT page_url FROM gov_raw WHERE page_url LIKE '%zx.cjn.cn%'Tr;   )r{   r   r=   r   ú
u   å·²çŸ¥URL: rL   r8   z  [r   z] rF   é2   z...r
   r9   r<   r>   r@   u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)rO   u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rR   rh   ÚlenÚsetr   r€   r�   r‚   rƒ   r   ÚsplitrV   Ú	enumeraterS   r)   rT   rZ   r[   rv   r   r•   )r\   ÚarticlesÚ
known_urlsr‘   ÚaddedÚskippedÚirA   rL   r_   r`   Úd_titleÚd_dateÚd_sourcero   s                  r   Úmainr¥   Ø   sC  € Ü	Ð2Ô4ô ˜)Ó$€HÙÜÐÔ ØÜ	ÐœS ›]˜O¨4Ð
0Ô1ô “€JðÜ—‘ØœÐ!aÐbØ d°Bô
ˆð ×Ñ Ò! f§m¡m×&9Ñ&9Ô&;Ü˜VŸ]™]×0Ñ0Ó2×8Ñ8¸Ó>Ó?ˆJô 
ˆKœ˜J›Ð(Ð
)Ô*ð €EØ€GÜ˜(Ó#ò ‰ˆˆ1Ø�‰hˆØ�*ÑØ�q‰LˆGØä��A�a‘C�5˜œ#˜h›-˜¨¨1¨W©:°c°r¨?Ð*;¸3Ð?ÀSÕIð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJô .:¸!¿&¹&À#Ó-FÑ*ˆ�˜ 7Ø�}‰}ŒÜÐ"Ô#Ø�q‰LˆGØä˜!˜W f¨h¸Ô@Ø�Q‰JˆEÜ�Dœ˜WŸ]™]›_Ó-Ð.¨dÐ3Õ4à�q‰LˆGÜÐ0Ô1ä�
‰
�3�ð9ô< 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôM ò Úðûô" ò 	Ü�D˜˜�*ÔÜ�J‰J�qŒMÝûð	ús+   ÁA;H Ä(HÈ	HÈHÈ	I	È#IÉI	Ú__main__r8   z--pages=ú=)r\   )%Ú__doc__r   ÚsysrZ   r   r   Úurllib.parser   ÚrequestsÚbs4r   ÚBASE_URLrQ   r}   r~   r�   ÚTOTAL_PAGESÚHEADERSÚSessionrS   ÚheadersÚupdater   r5   rh   rv   r•   r¥   Ú__name__Úpagesr™   ÚargvÚargr*   r„   r›   r…   © r   r   ú<module>r¸      s.  ðñó 
Û 
Û Û Ý Ý  ã Ý ð #€Ø�c‰>€Ø$€	Ø€Ø
€Ø€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò ðH %ó 4òp0òF)ðZ ó 9ðx ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Â?C&Ã&C.Ã-C.