Ë
    ¸¬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mZmZmZ ddl	Z	ddl
Z
ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ  e
j$                  e
j&                  j(                  «       dZdZdZdZ ej2                  ej4                  «       ed	¬
«      z
  j7                  d«      ZddiZedz   ZdddœZd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'e(dk(  r8 ej                  «       Z) e'«         e*d ej                  «       e)z
  d›d�«       yy)uq   
ä¸°åŸŽå¸‚äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š (jxfc.gov.cn)
åˆ—è¡¨ä½¿ç”¨ JSON API åˆ†é¡µ
URL: /fcsrmzf/gsgg/pc/list.html
é    N)ÚdatetimeÚtimezoneÚ	timedelta)Úpush_to_searchdbu"   ä¸°åŸŽå¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šzhttp://www.jxfc.gov.cnz/fcsrmzf/gsgg/pc/list.htmlé   iG  )Údaysz%Y-%m-%dz
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36z/fcsrmzf/gsgg/pc/listé   é   )ÚpageNumÚpageSizec                 ór   — 	 t        j                  | t        dd¬«      }d|_        |j                  S #  Y y xY w)Nr
   F)ÚheadersÚtimeoutÚverifyzutf-8)ÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚurlÚrs     ú"/root/gov_crawler/crawl_fc_gsgg.pyÚfetchr      s5   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøðÙús   ‚/2 ²6c                 ón   — 	 t        j                  | |t        dd¬«      }|j                  «       S #  Y y xY w)Nr
   F)Úparamsr   r   r   )r   r   r   Újson)Úapi_urlr   r   s      r   Ú
fetch_jsonr   !   s3   € ðÜ�L‰L˜¨¼È"ÐUZÔ[ˆØ�v‰v‹xˆøðÙús   ‚-0 °4c                 óô  — g }| j                  di «      j                  d| j                  d| j                  dg «      «      «      }t        |t        «      �r"|D �]  }|j                  d|j                  dd«      «      }|j                  d|j                  d|j                  dd«      «      «      }|j                  d	|j                  d
|j                  d|j                  dd«      «      «      «      }|s*|j                  d|j                  dd«      «      }|rd|› d�}|sŒÉ|sŒÌ|j                  d«      s	t        |z   }|rt        |«      dk\  r|dd }|j                  |j                  «       ||f«       �Œ |S )u"   ä»Ž JSON API è¿”å›žä¸­æ��å�–æ–‡ç« ÚdataÚlistÚtitleÚnameÚ r   ÚhrefÚlinkUrlÚpublishDateÚpublish_dateÚ
createDateÚcreate_dateÚidÚ	articleIdz/fcsrmzf/gsgg/pc/content_ú.htmlÚhttpé
   N)r   Ú
isinstancer!   Ú
startswithÚBASE_URLÚlenÚappendÚstrip)r    ÚitemsÚrecordsÚrecr"   r%   Údate_strÚ
article_ids           r   Úparse_list_from_jsonr;   (   sM  € à€EØ�h‰h�v˜rÓ"×&Ñ& v¨t¯x©x¸ÀÇÁÈÐQSÓ@TÓ/UÓV€GÜ�'œ4Õ Øó 	>ˆCØ—G‘G˜G S§W¡W¨V°RÓ%8Ó9ˆEØ—7‘7˜5 #§'¡'¨&°#·'±'¸)ÀRÓ2HÓ"IÓJˆDØ—w‘w˜}¨c¯g©g°nÀcÇgÁgÈlÐ\_×\cÑ\cÐdqÐsuÓ\vÓFwÓ.xÓyˆHÙØ ŸW™W T¨3¯7©7°;ÀÓ+CÓD�
ÙØ6°z°lÀ%ÐH�DÚšØ—‘ vÔ.Ü# d™?�Dá¤ H£°Ò 3Ø'¨¨˜}�HØ—‘˜eŸk™k›m¨T°8Ð<Ö=ð	>ð €Ló    c                 ó†  — g }g d¢}|D �]4  }t        j                  || t         j                  «      D �]  }|j                  d«      j	                  «       }t        |j                  «       «      dk\  r|j                  d«      j	                  «       nd}t        |j                  «       «      dk\  r |j                  d«      j	                  «       }nd}|s%t        j                  dd|«      j	                  «       }|rt        |«      dk  rŒÖ|j                  d«      s	t        |z   }|j                  |||f«       �Œ |s�Œ4 |S  |S )	u#   å…œåº•: ä»Ž HTML é¡µé�¢æ��å�–æ–‡ç« )zD<a[^>]*href="([^"]*gsgg[^"]*content[^"]*\.html)"[^>]*title="([^"]*)"zY<a[^>]*href="([^"]*)"[^>]*target="_blank"[^>]*>(.*?)</a>\s*<span[^>]*>(\d{4}-\d{2}-\d{2})zY<li[^>]*>.*?<a[^>]*href="([^"]+)"[^>]*>(.*?)</a>.*?(?:<span[^>]*>|\[)?(\d{4}-\d{2}-\d{2})r	   é   r$   é   ú<[^>]+>é   r.   )ÚreÚfinditerÚDOTALLÚgroupr5   r3   ÚgroupsÚsubr1   r2   r4   )Úhtmlr6   ÚpatternsÚpatÚmr%   r"   r9   s           r   Úparse_list_from_htmlrL   >   s  € à€Eò€Hð
 ó ˆÜ—‘˜S $¬¯	©	Ó2ó 	2ˆAØ—7‘7˜1“:×#Ñ#Ó%ˆDÜ*-¨a¯h©h«j«/¸QÒ*>�A—G‘G˜A“J×$Ñ$Ô&ÀBˆEÜ�1—8‘8“:‹ !Ò#ØŸ7™7 1›:×+Ñ+Ó-‘à�ÙÜŸ™˜z¨2¨tÓ4×:Ñ:Ó<�ÙœC ›J¨šNØØ—?‘? 6Ô*Ü $‘�Ø�L‰L˜%  xÐ0Ö1ð	2ó ØØ€Lð#ð" €Lr<   c                 ó>   — | dk(  rt         t        z   S t         › d| › d�S )Nr	   z/fcsrmzf/gsgg/pc/list_r-   )r2   Ú	LIST_PATH)Úpages    r   Úget_page_urlrP   Y   s(   € Øˆq‚yÜœ)Ñ#Ð#ÜˆZÐ-¨d¨V°5Ð9Ð9r<   c                 ó.   — t        t        «      }| |d<   |S )Nr   )ÚdictÚ
API_PARAMS)rO   r   s     r   Úget_api_paramsrT   ^   s   € Ü”*Ó€FØ€Fˆ9ÑØ€Mr<   c                 óð  — t        | «      }|syi }t        j                  d|t        j                  «      }|r7t        j                  dd|j                  d«      «      j                  «       |d<   |j                  d«      s^t        j                  d|t        j                  «      }|r7t        j                  dd|j                  d«      «      j                  «       |d<   t        j                  d|«      }|r|j                  d«      |d	<   |j                  d	«      s,t        j                  d
|«      }|r|j                  d«      |d	<   |j                  d	«      s,t        j                  d|«      }|r|j                  d«      |d	<   d}dD ]n  }t        j                  d|z   dz   |t        j                  «      }|sŒ1t        |j                  d«      «      dkD  sŒO|j                  d«      j                  «       } n |rt        |«      dk  rFt        j                  d|t        j                  «      }|r|j                  d«      j                  «       }|rut        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }||d<   |j                  d«      |j                  d«      |j                  d	«      fS )N)NNNz<h1[^>]*>(.*?)</h1>r@   r$   r	   r"   z<title>(.*?)</title>u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r(   u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})z(\d{4}-\d{2}-\d{2}))
Ú
TRS_EditorÚcontentzarticle-contentÚarticle_contentzxxgk-contentÚCustom_UnionStyleÚcon_textzmain-contentzinfo-contentr   z<div[^>]*class="[^"]*z0[^"]*"[^>]*>(.*?)</div>\s*(?:<div|</div>|<!--|$)é2   z#<div[^>]*id="zoom"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>rW   )
r   rB   ÚsearchrD   rG   rE   r5   r   r3   ÚI)r   rH   ÚresultrK   rW   Úclss         r   Úfetch_detailra   c   sW  € Ü�‹:€DÙØØ€FÜ
�	‰	Ð(¨$´·	±	Ó:€AÙÜŸ&™& ¨R°·±¸³Ó<×BÑBÓDˆˆw‰Ø�:‰:�gÔÜ�I‰IÐ-¨t´R·Y±YÓ?ˆÙÜ Ÿf™f Z°°Q·W±W¸Q³ZÓ@×FÑFÓHˆF�7‰OÜ
�	‰	Ð=¸tÓD€AÙØ!"§¡¨£ˆˆ~ÑØ�:‰:�nÔ%Ü�I‰IÐAÀ4ÓHˆÙØ%&§W¡W¨Q£ZˆF�>Ñ"Ø�:‰:�nÔ%Ü�I‰IÐ,¨dÓ3ˆÙØ%&§W¡W¨Q£ZˆF�>Ñ"Ø€Gð hò ˆÜ�I‰IÐ.°Ñ4Ð7jÑjÐlpÔrt×r{Ñr{Ó|ˆÚ”�Q—W‘W˜Q“Z“ 2Ó%Ø—g‘g˜a“j×&Ñ&Ó(ˆGÙð	ñ
 ”c˜'“l RÒ'Ü�I‰IÐ<¸dÄBÇIÁIÓNˆÙØ—g‘g˜a“j×&Ñ&Ó(ˆGÙÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆØ#ˆˆyÑØ�:‰:�gÓ §
¡
¨9Ó 5°v·z±zÀ.Ó7QÐQÐQr<   c                  ó2  — dd l } | j                  dt        › �¬«      }|j                  dt        d¬«       |j                  ddd	¬
«       |j                  «       }t        dd› dt        › dd› �«       g }|j                  rdnt        }d}t        d|dz   «      D �]  }t        d|› d�dd¬«       t        t        t        |«      «      }|rWt        |t        «      rGt        |«      }|r:t        dt!        |«      › d�«       |j#                  |«       d}|j                  r nˆŒˆt%        |«      }	t        ddd¬«       t'        |	«      }
|
st        d«        nTt)        |
«      }|st        d«        n:t        dt!        |«      › d�«       |j#                  |«       |j                  s�Œ n t        dt!        |«      › d�«       g t+        «       }}t-        |«      D �]  \  }\  }}	}|	|v rŒ|j/                  |	«       |j0                  rt!        |«      |j0                  k\  r nÔt        dt!        |«      dz   › dt!        |«      › d|d d  › d!�dd¬«       t3        |	«      \  }}}|r|}|xs |}t5        j6                  d"d|xs d#«      j9                  «       d d$ }t5        j6                  d%d|«      }|j;                  t        ||	|xs d#||t        d&œ«       t        d'«       t=        j>                  d(«       �Œ |rtA        |d)«       t        d*t!        |«      › d�«       y )+Nr   u   çˆ¬è™«: )Údescriptionz--limitu   æµ‹è¯•ï¼šå�ªå¤„ç�†Næ�¡è¯¦æƒ…)ÚtypeÚhelpz--incrementalÚ
store_trueu   å¢žé‡�æ¨¡å¼�ï¼šä»…çˆ¬ç¬¬1é¡µ)Úactionre   ú
z2==================================================u   
ðŸ�  r	   Fu
   
ðŸ“„ ç¬¬ u    é¡µ (API)...ú T)ÚendÚflushu   âœ… u    æ�¡ (JSON)z
-> HTML...u   â�Œu   0 æ�¡u    æ�¡ (HTML)u   
ðŸ“Š åˆ—è¡¨æ€»è®¡: u    æ�¡z  [ú/z] r[   z...r@   r$   i,  z\s+)Ú	site_namer"   r   rW   Úpub_dateÚsummaryÚtagsu   âœ…g333333Ó?Ú	jxfc_gsggu   
âœ… å®Œæˆ�! å…± )!ÚargparseÚArgumentParserÚ	SITE_NAMEÚadd_argumentÚintÚ
parse_argsÚprintÚincrementalÚ	MAX_PAGESÚranger   ÚAPI_URLrT   r0   rR   r;   r3   ÚextendrP   r   rL   ÚsetÚ	enumerateÚaddÚlimitra   rB   rG   r5   r4   ÚtimeÚsleepr   )rr   ÚparserÚargsÚall_listÚ	max_pagesÚ
api_workedrO   r    r6   r   rH   Ú	all_itemsÚseenÚir"   Ú	list_dateÚdtrW   ÚdateÚ
final_datero   s                        r   Úmainr�   Š   sï  € ÛØ×$Ñ$°8¼I¸;Ð1GÐ$ÓH€FØ
×Ñ˜	¬Ð2PÐÔQØ
×Ñ˜°ÐCaÐÔbØ×ÑÓ€DÜ	ˆBˆvˆh�gœi˜[¨¨6¨(Ð
3Ô4Ø€HØ×%Ò%‘¬9€Ià€JÜ�a˜ Q™Ó'ó ˆÜ�˜D˜6 Ð/°SÀÕEÜœ'¤>°$Ó#7Ó8ˆÙ”J˜t¤TÔ*Ü(¨Ó.ˆEÙÜ˜œS ›Z˜L¨Ð4Ô5Ø—‘ Ô&Ø!�
Ø×#Ò#ÙØä˜4Ó ˆÜ�
 ¨DÕ1Ü�S‹zˆÙÜ�%ŒLÙÜ$ TÓ*ˆÙÜ�'ŒNÙÜ�”S˜“Z�L Ð,Ô-Ø�‰˜ÔØ×ÔÙð5ô6 
Ð!¤# h£- °Ð
5Ô6Øœ#›%ˆt€IÜ&/°Ó&9ó Ñ"ˆÑ"ˆE�3˜	Ø�$‰;ØØ�‰�ŒØ�:Š:œ#˜i›.¨D¯J©JÒ6ÙÜ�”C˜	“N 1Ñ$Ð% Q¤s¨8£} o°R¸¸c¸r¸
°|À3ÐGÈSÐX\Õ]Ü(¨Ó-ÑˆˆG�TÙØˆEØÒ&˜Yˆ
Ü—&‘&˜ S¨'ª-°RÓ8×>Ñ>Ó@ÀÀ#ÐFˆÜ—&‘&˜  gÓ.ˆØ×ÑÜ"¨U¸3Ø’} "°*Ø¬	ñ
ô 	ô
 	ˆeŒÜ�
‰
�3Žð'ñ( Ü˜ KÔ0Ü	Ðœs 9›~Ð.¨dÐ
3Õ4r<   Ú__main__u   â�± è€—æ—¶: z.1fÚs)+Ú__doc__ÚsysÚosrB   r‚   r   r   r   r   r   Úurllib3ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrt   r2   rN   rz   ÚnowÚutcÚstrftimeÚTHREE_YEARS_AGOr   r|   rS   r   r   r;   rL   rP   rT   ra   r�   Ú__name__Út0rx   © r<   r   ú<module>r§      s5  ðñ÷
 × Ó ß 2Ñ 2ß Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà0€	Ø#€Ø(€	Ø€	Ø�8—<‘< §¡Ó-±	¸uÔ0EÑE×OÑOÐPZÓ[€ØÐvÐ
w€ð Ð,Ñ
,€Ø¨Ñ+€
òòòò,ò6:ò
ò
%RòN>5ð@ ˆzÒØ	ˆ�‰‹€BÙ„FÙ	ˆL˜˜Ÿ™› R™¨Ð,¨AÐ
.Õ/ð r<   