Ë
    ¸¬uj/  ã                   óL  — 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ddl	Zddl
ZddlmZmZ ddlmZmZ ej"                  j%                  dd«      ZdZdZd	Ze› d
�ZddiZdZdZdZ ej8                  «        ed¬«      z
  Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$e%dk(  r e$«        yy)u•  
crawl_yq.py â€” é˜³æ³‰å¸‚äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Š
CMS: TRS WCM
åˆ—è¡¨: é�™æ€�åˆ†é¡µ index_N.shtml (<ul class="main-listcon-items_box">)
è¯¦æƒ…: requests + <div class="article-body oflow-hd"> â†’ TRS_UEDITOR
     æ ‡é¢˜ä»Žè¯¦æƒ…é¡µ <h2> æ��å�–å®Œæ•´æ ‡é¢˜ï¼ˆåˆ—è¡¨é¡µtitleè¢«æˆªæ–­å�«...ï¼‰
WAF: æ— 

è¿�è¡Œ: python3 crawl_yq.py [--full]
  --full: å…¨é‡� (æ‰€æœ‰6é¡µ)
  ä¸�åŠ : ä»…ç¬¬1é¡µ (æ—¥è·‘å¢žé‡�)
é    N)ÚThreadPoolExecutorÚas_completed)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu"   é˜³æ³‰å¸‚äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šu   é˜³æ³‰å¸‚äººæ°‘æ”¿åºœzhttps://www.yq.gov.cnú/zwgk/gsgg/z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36é   é   )g333333Ó?g      à?iG  )Údaysc                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú/root/gov_crawler/crawl_yq.pyÚlogr   %   s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 óT  — | dk(  r
t         › d�}nt         › d| › d�}t        j                  j                  |t        ¬«      }	 t        j                  j                  |d¬«      }|j                  «       j                  d¬	«      S # t        $ r}t        d
| › d|› �«       Y d }~y d }~ww xY w)Nr   zindex.shtmlÚindex_z.shtml©Úheadersé   ©ÚtimeoutÚreplace©Úerrorsu
   åˆ—è¡¨é¡µ u    è¯·æ±‚å¤±è´¥: )
Ú	LIST_BASEÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	Exceptionr   )Úpage_noÚurlÚreqÚrespÚes        r   Ú
fetch_listr-   )   s    € Ø�!‚|Ü�˜;Ð'‰ä�˜6 ' ¨&Ð1ˆÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ!¨Ð!Ó3Ð3øÜò Üˆj˜˜	 °°Ð4Ô5Üûðús   ÁA B Â	B'ÂB"Â"B'c                 ó�  — g }t        j                  d| t         j                  «      }|s|S |j                  d«      }t        j                  d|t         j                  «      D ]á  }|j                  d«      }t        j                  d|«      }|sŒ-|j                  d«      }t        j                  |j                  d«      j                  «       «      }t        j                  d|«      }	|	sŒ‰|	j                  d«      }
|j                  d«      r|dd  }|j                  d«      st        › d	|› �n|}|j                  |||
f«       Œã |S )
Nz;<ul class="main-listcon-items_box"[^>]*>(.*?)</ul>\s*</div>é   z&<li[^>]*class="atitle"[^>]*>(.*?)</li>z'<a\s+href="([^"]+)"[^>]*title="([^"]*)"é   z%<span[^>]*>(\d{4}-\d{2}-\d{2})</span>z./Úhttpr   )ÚreÚsearchÚDOTALLÚgroupÚfinditerÚhtmlmodÚunescapeÚstripÚ
startswithÚBASE_URLÚappend)Ú	html_textÚitemsÚmÚ
ul_contentÚliÚli_textÚa_mÚurl_pathÚtitleÚdate_mÚpub_dateÚfull_urls               r   Ú
parse_listrI   7   s%  € Ø€EÜ
�	‰	ÐPÐR[Ô]_×]fÑ]fÓg€AÙØˆØ—‘˜“€Jä�k‰kÐCÀZÔQS×QZÑQZÓ[ò 2ˆØ—(‘(˜1“+ˆÜ�i‰iÐBÀGÓLˆÙØØ—9‘9˜Q“<ˆÜ× Ñ  §¡¨1£×!3Ñ!3Ó!5Ó6ˆä—‘ÐCÀWÓMˆÙØØ—<‘< “?ˆà×Ñ˜tÔ$Ø  �|ˆHØ=E×=PÑ=PÐQWÔ=X”h�Z˜{¨8¨*Ñ5Ð^fˆà�‰�h  xÐ0Õ1ð#2ð$ €Lr   c                 óÈ  — t        j                  d| t         j                  «      }|r2t        j                  |j                  d«      j                  «       «      S t        j                  d| t         j                  «      }|rb|j                  d«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }t        j                  |«      S y)	uV   ä»Žè¯¦æƒ…é¡µæ��å�–å®Œæ•´æ ‡é¢˜ï¼ˆ<h2> æˆ– <meta ArticleTitle>ï¼‰ï¼ŒåŽ»é™¤ <br/> æ�¢è¡Œz3<meta[^>]*name="ArticleTitle"[^>]*content="([^"]+)"r/   z<h2>(.*?)</h2>z	<br\s*/?>Ú ú\s+ú N)	r2   r3   Ú
IGNORECASEr7   r8   r5   r9   r4   Úsub)Úhtmlr?   Úts      r   Úextract_full_titlerR   S   s«   € ô 	�	‰	ÐHÈ$ÔPR×P]ÑP]Ó^€AÙÜ×Ñ §¡¨£
× 0Ñ 0Ó 2Ó3Ð3ä
�	‰	Ð# T¬2¯9©9Ó5€AÙØ�G‰G�A‹JˆÜ�F‰F�<  QÓ'ˆÜ�F‰F�6˜3 Ó"×(Ñ(Ó*ˆÜ×Ñ Ó"Ð"Ør   c                 óÞ  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |d¬«      }|j                  «       j                  d¬«      }t        |«      }|s|}d}t        j                  d|t        j                  «      }	|	ri|	j                  d«      }
t        j                  d	|
t        j                  «      }|r |j                  d«      j                  «       }n«|
j                  «       }nšt        j                  d	|t        j                  «      }	|	r |	j                  d«      j                  «       }nSd
D ]N  }t        j                  d|› d�|t        j                  «      }	|	sŒ/|	j                  d«      j                  «       } n |r&t        j                  dd|«      j                  «       }nd}| |||fS # t        $ r}| ||dfcY d}~S d}~ww xY w)uŽ   çˆ¬è¯¦æƒ…é¡µï¼Œè¿”å›ž (url, full_title, date, content)ã€‚
    full_title ä¼˜å…ˆä½¿ç”¨è¯¦æƒ…é¡µ <h2> çš„å®Œæ•´æ ‡é¢˜ï¼Œé�¿å…�åˆ—è¡¨é¡µæˆªæ–­ã€‚r   r   r   r   r   NzP<div[^>]*class="article-body[^"]*oflow-hd"[^>]*>(.*?)</div>\s*(?:<!--|</div>|\n)r/   zI<div[^>]*class="[^"]*TRS_UEDITOR[^"]*"[^>]*>(.*?)</div>\s*(?:</div>|<!--))Ú
TRS_EditorÚneirongÚcontentz<div[^>]*class="[^"]*z[^"]*"[^>]*>(.*?)</div>rL   rM   rK   )r    r!   r"   r#   r$   r%   r&   r'   rR   r2   r3   r4   r5   r9   rO   )r)   Ú
list_titleÚdater*   r+   rP   r,   Ú
full_titlerV   r?   Ú	body_htmlÚm2Úclss                r   Úfetch_detailr]   c   s´  € ô �.‰.×
 Ñ
  ¬gÐ
 Ó
6€Cð-Ü�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ!¨Ð!Ó3ˆô
 $ DÓ)€JÙØˆ
ð €GÜ
�	‰	ÐeÐgkÔmo×mvÑmvÓw€AÙØ—G‘G˜A“Jˆ	Ü�Y‰YÐcÐenÔpr×pyÑpyÓzˆÙØ—h‘h˜q“k×'Ñ'Ó)‰Gà—o‘oÓ'‰Gä�I‰IÐbÐdhÔjl×jsÑjsÓtˆÙØ—g‘g˜a“j×&Ñ&Ó(‰Gà;ò �Ü—I‘IÐ!6°s°eÐ;RÐSÐUYÔ[]×[dÑ[dÓe�ÚØŸg™g a›j×.Ñ.Ó0�GÙð	ñ Ü—&‘&˜  gÓ.×4Ñ4Ó6‰àˆà�˜T 7Ð+Ð+øôE ò -Ø�Z  tÐ,Õ,ûð-ús   §AG Ç	G,ÇG'Ç!G,Ç'G,c                 óŽ  — t        j                  t        «      }|j                  «       }d}d}| D ]F  \  }}}}	 |j	                  dt
        |||t        |xs df«       |j                  dkD  r|dz  }n|dz  }ŒH |j                  «        |j                  «        ||fS # t        $ r}	t        d|d d › d|	› �«       Y d }	~	Œ�d }	~	ww xY w)Nr   z�INSERT OR IGNORE INTO gov_raw
                   (site_name, title, page_url, publish_date, source_url, content)
                   VALUES (?, ?, ?, ?, ?, ?)rK   r/   u   å…¥åº“å¤±è´¥: é2   z... )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuter   ÚSOURCEÚrowcountr'   r   ÚcommitÚclose)
ÚarticlesÚconnrc   ÚinsertedÚskippedr)   rE   rX   rV   r,   s
             r   Ú
save_to_dbrm   �   sÙ   € Ü�?‰?œ7Ó#€DØ�[‰[‹]€FØ€HØ€Gà%-ò 4Ñ!ˆˆU�D˜'ð	4Ø�N‰Nð0ô ˜E 3¨¬f°g²mÀÐDô	ð �‰ Ò"Ø˜A‘‘à˜1‘�øð4ð 	‡K�K„MØ‡J�J„LØ�WÐÐøô ò 	4Ü�.  S b  
¨$¨q¨cÐ2×3Ñ3ûð	4ús   ¹>BÂ	CÂ&B?Â?Cc                  ó6  — dt         j                  v } t        d| rdnd› d�«       g }| rt        dt        «      ndg}|D ]è  }t        j                  t        j                  t        Ž «       t        |«      }|€t        d|dz   › d	�«       ŒLt        |«      }|st        d|dz   › d
�«        n~t        d|dz   › dt        |«      › d�«       g }|D ]6  }	 t        j                  |d   d«      }|t        k\  r|j!                  |«       Œ8 |j#                  |«       t        |«      dk  sŒè n t        dt        |«      › d�«       |st        d«       y t        dt$        › d�«       g }	t'        t$        ¬«      5 }
t)        |«      D ����ci c]"  \  }\  }}}|
j+                  t,        |||«      |“Œ$ }}}}}d}t        |«      }t/        |«      D ]F  }|dz  }	 |	j!                  |j1                  «       «       |dz  dk(  s||k(  sŒ6t        d|› d|› �«       ŒH 	 d d d «       t5        |	«      \  }}t        d|› d|› �«       y #  |j!                  |«       Y �Œ„xY wc c}}}}w # t2        $ r& ||   }||   \  }}}|	j!                  |||d f«       Y Œ™w xY w# 1 sw Y   Œ|xY w)Nz--fullu   å¼€å§‹u   å…¨é‡�u   å¢žé‡�u	   çˆ¬å�–...r   u   ç¬¬ r/   u
    é¡µè·³è¿‡u    é¡µä¸ºç©ºï¼Œç»“æ�Ÿu    é¡µ: u    æ�¡r0   z%Y-%m-%dr   u
   å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®ï¼ˆè¿‘3å¹´ï¼‰u   æ²¡æœ‰æ•°æ�®ï¼Œé€€å‡ºu   å¼€å§‹å¤šçº¿ç¨‹çˆ¬å�–è¯¦æƒ… (u
   çº¿ç¨‹)...)Úmax_workersr_   u   è¯¦æƒ…è¿›åº¦: ú/u   å…¥åº“å®Œæˆ�: æ–°å¢ž u	   , è·³è¿‡ )ÚsysÚargvr   ÚrangeÚ	MAX_PAGESÚtimeÚsleepÚrandomÚuniformÚREQUEST_DELAYr-   rI   Úlenr   ÚstrptimeÚTHREE_YEARS_AGOr<   ÚextendÚNUM_THREADSr   Ú	enumerateÚsubmitr]   r   Úresultr'   rm   )Úis_fullÚ	all_itemsÚpages_to_crawlr(   r=   r>   ÚfilteredÚitemÚdtÚresultsÚexecutorÚir)   rQ   ÚdÚfuturesÚdoneÚtotalÚfÚidxrk   rl   s                         r   Úmainr‘   ©   s¯  € Øœ#Ÿ(™(Ð"€GÜˆ&™W‘¨(Ð3°9Ð=Ô>à€IÙ,3”U˜1œiÔ(¸!¸€Nà!ò ˆÜ�
‰
”6—>‘>¤=Ð1Ô2Ü˜wÓ'ˆ	ØÐÜ�$�w ‘{�m :Ð.Ô/ØÜ˜9Ó%ˆÙÜ�$�w ‘{�mÐ#6Ð7Ô8ÙÜˆd�7˜Q‘;�-˜v¤c¨%£j \°Ð6Ô7àˆØò 	&ˆDð&Ü×&Ñ& t¨A¡w°
Ó;�ØœÒ(Ø—O‘O DÔ)øð		&ð 	×Ñ˜Ô"äˆu‹:˜‹?Ùð/ô2 ˆ*”S˜“^Ð$Ð$AÐBÔCáÜÐ#Ô$ØäÐ
'¬ }°JÐ?Ô@Ø€GÜ	¬Ô	4ð 5¸ÜU^Ð_hÓUi×jÑjÁ>À1ÁkÀsÈAÈq�8—?‘?¤<°°a¸Ó;¸QÑ>ÐjˆÓjØˆÜ�G“ˆÜ˜gÓ&ò 		5ˆAØ�A‰IˆDð2Ø—‘˜qŸx™x›zÔ*ð
 �b‰y˜AŠ~ ¨£Ü�n T F¨!¨E¨7Ð3Õ4ñ		5÷	5ô # 7Ó+Ñ€HˆgÜÐ
 ˜z¨°7°)Ð<Õ=øð?&Ø—‘ ×%üõ køô ò 2Ø˜a‘j�Ø% c™N‘	��Q˜Ø—‘  Q¨¨4Ð0Ö1ð2ú÷5ð 5úsT   Ã3H<Å5JÆ'IÆ-%JÇIÇ2JÈ JÈ<IÉJÉ,JÊ	JÊJÊJÊJÚ__main__)&Ú__doc__rq   r2   ru   rw   r`   ÚosÚurllib.requestr    Úurllib.errorrP   r7   Úconcurrent.futuresr   r   r   r   ÚenvironÚgetrb   r   re   r;   r   r#   rt   r~   ry   Únowr|   r   r-   rI   rR   r]   rm   r‘   Ú__name__© r   r   ú<module>r�      sÃ   ðñ÷ H× G× G× GÛ ß ?ß (à
�*‰*�.‰.˜Ð&7Ó
8€Ø0€	Ø	 €à"€Øˆj˜Ð$€	àð  Dð€ð €	Ø€Ø€à�(—,‘,“.¡9°'Ô#:Ñ:€ò.òòò8ò ),òXò48>ðv ˆzÒÙ…Fð r   