Ë
    ¸¬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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	j(                  «        e
d
¬«      z
  j+                  d«      ZdZddiZddlZ ej4                  «       Zej8                  j;                  e«       d„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#e$dk(  r e#«        yy)uU   crawl_rongcheng_eia.py â€” è�£æˆ�å¸‚äººæ°‘æ”¿åºœ-å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯é    N)ÚdatetimeÚ	timedelta)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu:   è�£æˆ�å¸‚äººæ°‘æ”¿åºœ-å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯zbhttp://www.rongcheng.gov.cn/module/xxgk/search.jsp?infotypeId=RCA241904&vc_title=&vc_number=&area=é   iG  )Údaysz%Y-%m-%dé   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36c                 ó
  — ddddddt        | «      dddddœ}t        d«      D ]3  }	 t        j                  t        |d¬«      }d	|_        |j                  c S  y# t        $ r}t        j                  d
«       Y d}~ŒZd}~ww xY w)zFetch one page via POSTÚ	RCA241904Ú121Ú Údiv56364)Ú
infotypeIdÚjdidÚareaÚdividÚvc_titleÚ	vc_numberÚcurrpageÚvc_filenumberÚvc_allÚtexttypeÚfbtimeé   é   )ÚdataÚtimeoutúutf-8é   N)
ÚstrÚrangeÚsessÚpostÚLIST_URLÚencodingÚtextÚ	ExceptionÚtimeÚsleep)Úpager   Ú_ÚrÚes        ú(/root/gov_crawler/crawl_rongcheng_eia.pyÚ
fetch_listr0      s’   € ð "ØØØØØÜ˜“IØØØØñ€Dô �1‹Xò ˆð	Ü—	‘	œ(¨°r�	Ó:ˆAØ ˆAŒJØ—6‘6ŠMð	ð øô ò 	Ü�J‰J�q�M‰Mûð	ús   §.AÁ	BÁ#A=Á=Bc                 ó   — g }t        j                  d| t         j                  «      D ]£  }|j                  d«      }t        j                  d|«      }t        j                  d|«      }|sŒC|sŒF|j                  |j                  d«      |j                  d«      j                  «       |j                  d«      j                  «       dœ«       Œ¥ |S )zParse articles from list HTMLz-<tr class="tr_main_value_\w+"[^>]*>(.*?)</tr>r    z'<a\s+href='([^']+)'[^>]*title='([^']*)'z*<td align='center' width='80'>([^<]+)</td>é   )ÚurlÚtitleÚdate)ÚreÚfinditerÚDOTALLÚgroupÚsearchÚappendÚstrip)ÚhtmlÚitemsÚtrÚtr_htmlÚaÚdate_tds         r/   Ú
parse_listrC   2   s«   € à€EÜ�k‰kÐJÈDÔRT×R[ÑR[Ó\ò 	ˆØ—(‘(˜1“+ˆÜ�I‰IÐ@À'ÓJˆÜ—)‘)ÐIÈ7ÓSˆÚ’Ø�L‰LØ—w‘w˜q“zØŸ™ ›×)Ñ)Ó+ØŸ™ aÓ(×.Ñ.Ó0ñõ ð	ð €Ló    c                 óÜ  — t        j                  d| t         j                  «      }|r |j                  d«      j	                  «       }nHt        j                  d| t         j                  «      }|r|j                  d«      j	                  «       nd}t        j
                  dd|t         j                  ¬«      }t        j
                  dd|t         j                  ¬«      }|j	                  «       S )z Extract content from detail pageuC   <!--<\$\[ä¿¡æ�¯å†…å®¹\]>begin-->(.*?)<!--<\$\[ä¿¡æ�¯å†…å®¹\]>end-->r    z7<meta name="ContentStart">(.*?)<meta name="ContentEnd">r   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)r6   r:   r8   r9   r<   Úsub)r=   ÚmÚcontents      r/   Úextract_contentrJ   B   s¯   € ô 	�	‰	ÐXÐZ^Ô`b×`iÑ`iÓj€AÙØ—'‘'˜!“*×"Ñ"Ó$‰ô �I‰IÐPÐRVÔXZ×XaÑXaÓbˆÙ()�!—'‘'˜!“*×"Ñ"Ô$¨rˆô �f‰fÐ1°2°wÄbÇiÁiÔP€GÜ�f‰fÐ/°°WÄBÇIÁIÔN€GØ�=‰=‹?ÐrD   c                 óÜ   — t        d«      D ]3  }	 t        j                  | t        d¬«      }d|_        |j
                  c S  y# t        $ r}t        j                  d«       Y d}~ŒZd}~ww xY w)zFetch detail pager   r   )Úheadersr   r   r    N)	r"   ÚrequestsÚgetÚHEADERSr&   r'   r(   r)   r*   )r3   r,   Úrespr.   s       r/   Úfetch_detailrQ   T   sa   € ä�1‹Xò ˆð	Ü—<‘< ¬W¸bÔAˆDØ#ˆDŒMØ—9‘9Òð	ð øô ò 	Ü�J‰J�q�M‰Mûð	ús   �.AÁ	A+ÁA&Á&A+c                 ój  — t        | d   «      }|syd}d}t        j                  d|«      }|r|j                  d«      j	                  «       }t        j                  d|«      }|r"|j                  d«      j	                  «       dd }t        |«      }t        |xs | d	   | d   |xs | d
   | d   |dœdfS )z2Process one article: fetch detail, extract contentr3   )NÚ	FETCH_ERRr   z-<meta name="ArticleTitle"\s+content="([^"]+)"r    z(<meta name="PubDate"\s+content="([^"]+)"Né
   r4   r5   )Ú	site_namer4   Úpage_urlÚpublish_dateÚ
source_urlrI   )rQ   r6   r:   r9   r<   rJ   Ú	SITE_NAME)Úitemr=   r4   Úpub_daterH   rI   s         r/   Úprocess_itemr\   `   sË   € ä˜˜U™Ó$€DÙØ à€EØ€Hô 	�	‰	ÐBÀDÓI€AÙØ—‘˜“
× Ñ Ó"ˆô 	�	‰	Ð=¸tÓD€AÙØ—7‘7˜1“:×#Ñ#Ó% c rÐ*ˆä˜dÓ#€Gô ØÒ'˜$˜w™-Ø˜‘KØ Ò0 D¨¡LØ˜5‘kØñð ðð rD   c                  óH  — t        dt        j                  «       j                  d«      › dt        › �«       t        d«      } | st        d«       y d}t        j                  d| «      }|rt        |j                  d«      «      }nt        d«       y d}t        j                  d	| «      }|rt        |j                  d«      «      }t        d
|› d|› d�«       t        | «      }t        d|dz   «      D ]  }t        |«      }|r8t        |«      }|j                  |«       t        d|› dt        |«      › d�«       nt        d|› d�«       t        j                  t!        j"                  dd«      «       Œ� t        dt        |«      › d�«       |D �cg c]  }|d   t$        k\  sŒ|‘Œ }	}t        dt        |	«      › dt        |«      t        |	«      z
  › d�«       t'        j(                  t*        d¬«      }
|
j-                  «       }t/        d„ |j1                  dt        f«      D «       «      }|	D �cg c]  }|d   |vsŒ|‘Œ }}t        dt        |«      › �«       dx}}t3        t4        ¬«      5 }|D �ci c]  }|j7                  t8        |«      |“Œ }}t;        t=        |«      d«      D ]õ  \  }}||   }|j?                  «       \  }}|s|s0t        d |› d!t        |«      › d|d"   d d › d#|xs d$› �«       |dz  }ŒR	 |j1                  d%|d&   |d"   |d'   |d(   |d)   |d*   f«       |j@                  r9|dz  }t        d |› d!t        |«      › d|d"   d d › d+t        |d*   «      › d,�	«       n$t        d |› d!t        |«      › d|d"   d d › d-�«       |
jE                  «        Œ÷ 	 d d d «       |
jG                  «        t        d/|› d0|› �«       y c c}w c c}w c c}w # tB        $ r5}t        d |› d!t        |«      › d|d"   d d › d.|› �«       |dz  }Y d }~Œ…d }~ww xY w# 1 sw Y   Œ{xY w)1Nú[z%H:%M:%Sz] r    z[ERROR] Failed page 1r   u   å…±(\d+)æ�¡è®°å½•z[ERROR] Cannot find totalu   å…±(\d+)é¡µzTotal: z
 records, z pagesr2   z  Page z: z itemsz: FAILEDg333333Ó?g333333ã?zCollected: r5   zWithin 3 years: z (filtered: ú)é   )r   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )Ú.0r-   s     r/   ú	<genexpr>zmain.<locals>.<genexpr>«   s   è ø€ Òk˜A�1�Q•4Ñkùs   ‚z.SELECT page_url FROM gov_raw WHERE site_name=?r3   zNew items: )Úmax_workersz  [ú/r4   z... ÚFAILzšINSERT OR IGNORE INTO gov_raw
                    (site_name, title, page_url, publish_date, source_url, content)
                    VALUES (?,?,?,?,?,?)rU   rV   rW   rX   rI   z... OK (zB)z... DUPz	... ERR: z
=== Done === New: z
, Errors: )$Úprintr   ÚnowÚstrftimerY   r0   r6   r:   Úintr9   rC   r"   ÚextendÚlenr)   r*   ÚrandomÚuniformÚCUTOFFÚsqlite3ÚconnectÚDB_PATHÚcursorÚsetÚexecuter   ÚMAX_WORKERSÚsubmitr\   Ú	enumerater   ÚresultÚrowcountr(   ÚcommitÚclose)r=   ÚtotalrH   Útotal_pagesÚ	all_itemsÚpÚhr>   ÚiÚrecentÚconnÚcÚexistingÚto_fetchÚnewÚerrÚexecutorrZ   ÚfuturesÚfuturerz   Úerrorr.   s                          r/   Úmainr�      s2  € Ü	ˆAŒh�l‰l‹n×%Ñ% jÓ1Ð2°"´Y°KÐ
@ÔAô �a‹=€DÙÜÐ%Ô&Øð €EÜ
�	‰	Ð&¨Ó-€AÙÜ�A—G‘G˜A“J“‰äÐ)Ô*Øà€KÜ
�	‰	�. $Ó'€AÙÜ˜!Ÿ'™' !›*“oˆä	ˆG�E�7˜* [ M°Ð
8Ô9ô ˜4Ó €IÜ�1�k A‘oÓ&ò -ˆÜ�q‹MˆÙÜ˜q“MˆEØ×Ñ˜UÔ#Ü�G˜A˜3˜b¤ U£ ¨FÐ3Õ4ä�G˜A˜3˜hÐ'Ô(Ü�
‰
”6—>‘> # sÓ+Õ,ð-ô 
ˆKœ˜I›Ð' vÐ
.Ô/à"Ö:�A a¨¡i´6Ó&9ŠaÐ:€FÐ:Ü	ÐœS ›[˜M¨´c¸)³nÄSÈÃ[Ñ6PÐ5QÐQRÐ
SÔTä�?‰?œ7¨BÔ/€DØ�‰‹€AÜÑk §¡Ð+[Ô^gÐ]iÓ!jÔkÓk€Hà!Ö>�a Q u¡X°XÒ%=’Ð>€HÐ>Ü	ˆKœ˜H›�Ð
'Ô(à€M€Cˆ#Ü	¬Ô	4ð ¸ØIQÖRÀ�8—?‘?¤<°Ó6¸Ñ<ÐRˆÐRÜ"¤<°Ó#8¸!Ó<ò 	‰IˆAˆvØ˜6‘?ˆDØ"ŸM™M›O‰MˆF�EÙ™FÜ˜˜A˜3˜a¤ H£˜¨b°°g±¸sÀÐ1CÐ0DÀDÈÊÐRXÐHYÐZÔ[Ø�q‘�ØðØ—	‘	ð ,ð ˜{Ñ+¨V°G©_¸fÀZÑ>PØ˜~Ñ.°°|Ñ0DÀfÈYÑFWð.YôZð
 —:’:Ø˜1‘H�CÜ˜C ˜s !¤C¨£M ?°"°T¸'±]À3ÀBÐ5GÐ4HÈÔQTÐU[Ð\eÑUfÓQgÐPhÐhjÐkÕlä˜C ˜s !¤C¨£M ?°"°T¸'±]À3ÀBÐ5GÐ4HÈÐPÔQð �K‰K�Mñ+	÷ð2 	‡J�J„LÜ	Ð    Z°¨uÐ
5Õ6ùòK ;ùò ?ùò
 Søô& ò Ü˜˜A˜3˜a¤ H£˜¨b°°g±¸sÀÐ1CÐ0DÀIÈaÈSÐQÔRØ�q‘•ûðú÷)ð úsb   ÆOÆ!OÈ-OÈ:OÉ+PÉ0OÊA)PË8BOÎPÏPÏ	PÏ +PÐPÐPÐPÐP!Ú__main__)%Ú__doc__Úosr6   rq   r)   Úsysrn   Úurllib.parseÚurllibr   r   Úconcurrent.futuresr   r   ÚenvironrN   rs   rY   r%   Ú	PAGE_SIZEri   rj   rp   rw   rO   rM   ÚSessionr#   rL   Úupdater0   rC   rJ   rQ   r\   r�   Ú__name__rb   rD   r/   ú<module>rœ      sÕ   ðñ \ç 7× 7× 7Ó 7ß (ß ?à
�*‰*�.‰.˜Ð&7Ó
8€ØH€	Øo€Ø€	Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€Ø€ð ð  Dð€ó Ø€x×ÑÓ€Ø ‡�× Ñ �GÔ òò2ò ò$	òò>L7ð^ ˆzÒÙ…Fð rD   