Ë
    ¸¬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mZ ddlm	Z	 ddl
Z
ddlmZ ddlZ ej                  d«       dZe› d�Zd	Zd
ZdZdZdZde› d�dœZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rI ej<                  «       ZejA                  de!d¬«       ejE                  «       Z# ee#jH                  ¬«       yy)ud  
ç‰¡ä¸¹æ±Ÿå¸‚äººæ°‘æ”¿åºœ - çŽ¯å¢ƒå½±å“�è¯„ä»·æ �ç›®çˆ¬è™«
URL: https://mdj.gov.cn/mdjsrmzf/c100041/zfxxgk_list.shtml
CMS: ç‰¡ä¸¹æ±Ÿç«™ç¾¤ç³»ç»Ÿ (JSON API + ucapcontent/TRS_Editor è¯¦æƒ…é¡µ)
API: /search/{channelId}?page=N&_pageSize=15

é…�ç½®:
  channelId = "1f7fbb73b2a141d080bad0cd5478586d"
  15æ�¡/é¡µ, å…±1325æ�¡/89é¡µ

æ—¥è·‘: --max-pages 1 (å¢žé‡�)
é    N)Údatetime)Úurljoin)ÚBeautifulSoupÚignorezhttps://mdj.gov.cnz(/search/1f7fbb73b2a141d080bad0cd5478586dé   u   ç‰¡ä¸¹æ±Ÿå¸‚äººæ°‘æ”¿åºœu   çŽ¯å¢ƒå½±å“�è¯„ä»·u	   é»‘é¾™æ±Ÿz/mnt/data/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z#/mdjsrmzf/c100041/zfxxgk_list.shtml)z
User-AgentÚRefererc                 ój  — | syt        j                  dd| «      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd	|«      }|j                  «       S )
u   æ¸…ç�†æ­£æ–‡HTMLÚ z\sstyle="[^"]*"z<span[^>]*>|</span>z<strong[^>]*>|</strong>z<b[^>]*>|</b>z<font[^>]*>|</font>z<o:p[^>]*>|</o:p>z\n{3,}ú

)ÚreÚsubÚstrip)ÚhtmlÚcleaneds     ú#/root/gov_crawler/crawl_mdj_xxgk.pyÚclean_content_htmlr   &   s˜   € áØÜ�f‰fÐ'¨¨TÓ2€GÜ�f‰fÐ+¨R°Ó9€GÜ�f‰fÐ/°°WÓ=€GÜ�f‰fÐ% r¨7Ó3€GÜ�f‰fÐ+¨R°Ó9€GÜ�f‰fÐ)¨2¨wÓ7€GÜ�f‰f�Y ¨Ó0€GØ�=‰=‹?Ðó    c                 óL  — t         › d| › dt        › d�}	 t        j                  |t        d¬«      }|j                  «        |j                  «       }d|v r d|d   v r|d   d   t        |d   d   «      fS g d	fS # t        $ r!}t        d
| › d|› �d¬«       g d	fcY d}~S d}~ww xY w)u    é€šè¿‡ API èŽ·å�–åˆ—è¡¨é¡µæ•°æ�®z?page=z&_pageSize=zF&_isAgg=true&_isJson=true&_template=index&_rangeTimeGte=&_channelName=é   ©ÚheadersÚtimeoutÚdataÚresultsÚtotalr   u     [é”™è¯¯] åˆ—è¡¨é¡µ u    è¯·æ±‚å¤±è´¥: T©ÚflushN)
ÚAPI_URLÚ	PAGE_SIZEÚrequestsÚgetÚHEADERSÚraise_for_statusÚjsonÚintÚ	ExceptionÚprint)ÚpageÚurlÚrespr   Úes        r   Ú
fetch_listr,   4   sº   € äˆY�f˜T˜F +¬i¨[ØSðU€Cð	Ü�|‰|˜C¬¸"Ô=ˆØ×ÑÔØ�y‰y‹{ˆØ�T‰>˜i¨4°©<Ñ7Ø˜‘< 	Ñ*¬C°°V±¸WÑ0EÓ,FÐFÐFØ�1ˆuˆøÜò ÜÐ% d V¨?¸1¸#Ð>ÀdÕKØ�1ˆu�ûðús$   •AA9 Á5A9 Á9	B#ÂBÂB#ÂB#c                 óÐ  — t        t        | «      }	 t        j                  |t        d¬«      }d|_        t        |j                  d«      }|j                  d«      }|rr|j                  d«      }|rIt        |«      }|j                  d«      }t        |j                  d¬	«      «      }|s|d
k\  r!t        |«      S t        |«      }t        |«      S |j                  d«      }	|	rt        t        |	«      «      S |j                  d«      }
|
rt        t        |
«      «      S |j                  d«      }|r�g }|j                  d«      D ]a  }|j                  dd«      }|j                  d¬	«      }|sŒ*|j                  d«      rŒ<|j                  dt        t        |«      › d|› d�«       Œc |rddj!                  |«      z   S y# t"        $ r}t%        d| › d|› �d¬«       Y d}~yd}~ww xY w)u   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡r   r   zutf-8úhtml.parserz#zoomconÚucapcontentÚtableT©r   i�  zdiv.TRS_Editorz.article_content_bodyz.article_appendixÚaÚhrefr
   Ú
javascriptú	<a href="ú">ú</a>u   <p>é™„ä»¶ï¼š</p>
ú
u!     [é”™è¯¯] è¯¦æƒ…é¡µèŽ·å�–å¤±è´¥ z: r   N)r   ÚBASE_URLr    r!   r"   Úencodingr   ÚtextÚ
select_oneÚstrÚfind_allÚlenÚget_textÚ_procÚ
startswithÚappendÚjoinr&   r'   )Ú
detail_urlÚfull_urlr*   ÚsoupÚzoomconÚucapÚcontent_htmlÚtablesÚtext_lenÚtrsÚbodyÚappendixÚlinksr2   r3   Útxtr+   s                    r   Úfetch_detailrR   D   sÊ  € ä”x Ó,€Hð-Ü�|‰|˜H¬g¸rÔBˆØˆŒÜ˜TŸY™Y¨Ó6ˆð —/‘/ *Ó-ˆÙØ×%Ñ% mÓ4ˆDÙÜ" 4›y�ØŸ™ wÓ/�Ü˜tŸ}™}°4˜}Ó8Ó9�Ù˜X¨š_Ü  Ó.Ð.ô  # 7›|�Ü˜\Ó*Ð*ð �o‰oÐ.Ó/ˆÙÜœ˜S›“?Ð"ð �‰Ð6Ó7ˆÙÜœ˜T›Ó#Ð#ð —?‘?Ð#6Ó7ˆÙØˆEØ×&Ñ& sÓ+ò S�Ø—u‘u˜V RÓ(�Ø—j‘j t�jÓ,�Ú §¡°Õ =Ø—L‘L 9¬W´X¸tÓ-DÐ,EÀRÈÀuÈDÐ!QÕRð	Sñ
 Ø+¨d¯i©i¸Ó.>Ñ>Ð>àøÜò ÜÐ1°*°¸RÀ¸sÐCÈ4ÕPÜûðús=   ’B'F? Â:F? Ã&F? Ã7&F? ÄAF? Å.F? Æ =F? Æ?	G%ÇG Ç G%c                 ó°  — t        | d«      }|j                  d«      D ]<  }|j                  dd«      }|sŒ|j                  d«      rŒ*t	        t
        |«      |d<   Œ> |j                  d«      D ]N  }|j                  dd«      }|sŒ|j                  d«      rŒ*|j                  d«      rŒ<t	        t
        |«      |d<   ŒP t        |«      j                  «       S )	u   å¤„ç�†å›¾ç‰‡å’Œé“¾æŽ¥ URLr.   ÚimgÚsrcr
   Úhttpr2   r3   r4   )r   r>   r!   rB   r   r9   r=   r   )r   rG   rT   rU   r2   r3   s         r   rA   rA   w   sº   € ä˜˜}Ó-€DØ�}‰}˜UÓ#ò 0ˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~ fÕ-Ü ¤¨3Ó/ˆC�ŠJð0ð �]‰]˜3Óò 0ˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™¨Õ/¸¿¹ÈÕ8UÜ¤¨$Ó/ˆAˆfŠIð0ô ˆt‹9�?‰?ÓÐr   c                 óL  — g }| j                  dg «      D ]y  }|j                  dd«      xs |j                  dd«      }|j                  dd«      xs |j                  dd«      }|sŒRt        t        |«      }|j                  d|› d	|› d
�«       Œ{ |rdj	                  |«      S dS )u   æž„å»ºé™„ä»¶MarkdownÚresListÚfilePathNewr
   ÚfilePathÚfileNameÚtitleu   é™„ä»¶r5   r6   r7   r   )r!   r   r9   rC   rD   )ÚitemÚpartsÚresÚfpÚfnÚfus         r   Úbuild_attachmentsrc   …   s£   € à€EØ�x‰x˜	 2Ó&ò 5ˆØ�W‰W�] BÓ'ÒB¨3¯7©7°:¸rÓ+BˆØ�W‰W�Z Ó$ÒB¨¯©°¸Ó(BˆÚÜœ 2Ó&ˆBØ�L‰L˜9 R D¨¨2¨$¨dÐ3Õ4ð5ñ "'ˆ6�;‰;�uÓÐ.¨BÐ.r   c                 óJ	  — t        j                  «       }|j                  j                  t        «       t        j                  t        «      }|j                  d«       |j                  d«       t        «       }|j                  dt        f«      }|D ]  }|j                  |d   «       Œ t        dt        |«      › d�d¬«       t        d	«      \  }}|dk(  rt        d
d¬«       |j                  «        y|t         z   d	z
  t         z  }| rt#        | |«      n|}	t        d|› d|› d|	› d�d¬«       d}
d}d}t%        d	|	d	z   «      D �]ñ  }t        d|› d|	› d�dd¬«       |d	k(  r|nt        |«      d   }|st        dd¬«       Œ>d}|D �]|  }|j'                  dd«      }|sŒt)        t*        |«      }||v r|d	z  }Œ3|j'                  d«      xs dj-                  dd«      j/                  «       }|s3|j'                  d«      xs dj-                  dd«      j/                  «       }|s|d	z  }Œ£d}|j'                  dd«      }|rt        |«      dk\  r|dd }t1        |«      }|rt        |j/                  «       «      dk  r:|j'                  dd«      xs |j'                  dd«      xs d}|j/                  «       }t3        |«      }|r<|r%t        t5        |d «      j7                  d¬!«      «      nd}|d"k  rd#|› �}n|d$|› �z  }t9        |«      }t;        j<                  d%d|«      }t;        j<                  d&d|«      j/                  «       dd' }d}	 |j                  d(t        |||dd) ||dd) |d*t>        t@        |f«      }|jB                  dkD  ru|j                  d+|f«      jE                  «       }|r&|d   }	 |j                  d,||dd) t        |dd- f«       |j                  |«       |jI                  «        |
d	z  }
|d	z  }n|d	z  }�Œ t        d/|› d0|
› d1�d¬«       ||	k  s�ŒÝtM        jN                  d2«       �Œô |j                  «        t        d3|
› d4|› d5|› �d¬«       |
S # t
        jF                  $ r Y Œ¤w xY w# tJ        $ r}t        d.dd¬«       |d	z  }Y d}~�Œd}~ww xY w)6u   ä¸»çˆ¬å�–é€»è¾‘zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz.SELECT page_url FROM gov_raw WHERE site_name=?r   u   å·²æœ‰ u    æ�¡ç‰¡ä¸¹æ±Ÿè®°å½•Tr   é   u   æ— æ³•èŽ·å�–åˆ—è¡¨æ•°æ�®u   å…± u    æ�¡ / u    é¡µ, çˆ¬å�– u    é¡µu   [ç¬¬ ú/u    é¡µ] r
   )Úendr   u	   æ— æ•°æ�®r)   r\   z&nbsp;ú ÚsubTitleÚpublishedTimeStré
   Né   ÚcontentHtmlÚcontentr.   r1   éd   u    <p>è¯¦æƒ…å†…å®¹è§�é™„ä»¶ï¼š</p>
u)   

<hr>
<p><strong>é™„ä»¶ï¼š</strong></p>
z<[^>]+>z\s+i,  z÷INSERT OR IGNORE INTO gov_raw
                    (site_name, source_url, page_url, title, publish_date,
                     summary, content, status, category, group_name, attachments)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)iô  Úactivez'SELECT id FROM gov_raw WHERE page_url=?zLINSERT INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)éÈ   Úxú+u    æ�¡ (ç´¯è®¡ ú)g      à?u   
å®Œæˆ�! æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ )(r    ÚSessionr   Úupdater"   Úsqlite3ÚconnectÚDB_PATHÚexecuteÚsetÚ	SITE_NAMEÚaddr'   r?   r,   Úcloser   ÚminÚranger!   r   r9   Úreplacer   rR   rc   r   r@   r   r   r   ÚCATEGORYÚGROUPÚrowcountÚfetchoneÚIntegrityErrorÚcommitr&   ÚtimeÚsleep)Ú	max_pagesÚsÚdbÚexistingÚcurÚrowÚfirst_itemsr   Útotal_pagesÚpages_to_fetchÚ	total_newÚ
total_skipÚtotal_errorr(   ÚitemsÚpage_newr]   r)   rF   r\   Úpublish_dateÚdsrN   ÚattsrL   ÚsummaryÚatt_mdÚridr+   s                                r   Úcrawlrž   ‘   sË  € ä×ÑÓ€AØ‡I�I×Ñ”WÔä	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+ä‹u€HØ
�*‰*ÐEÌ	À|Ó
T€CØò ˆØ�‰�S˜‘VÕðô 
ˆG”C˜“M�?Ð"5Ð
6¸dÕCä# A›Ñ€K�Ø�‚zÜÐ(°Õ5Ø
�‰Œ
Øàœ9Ñ$ qÑ(¬YÑ6€KÙ4=”S˜ KÔ0À;€Nä	ˆD���w˜{˜m¨=¸Ð8HÈÐ
MÐUYÕZà€IØ€JØ€Kä�a˜¨!Ñ+Ó,ó QˆÜ��d�V˜1˜^Ð,¨FÐ3¸À4ÕHØ# qšy‘¬j¸Ó.>¸qÑ.AˆÙÜ�+ TÕ*ØàˆØó D	!ˆDØ—(‘(˜5 "Ó%ˆCÙØÜœx¨Ó-ˆHØ˜8Ñ#Ø˜a‘�
Øà—X‘X˜gÓ&Ò,¨"×5Ñ5°hÀÓD×JÑJÓLˆEÙØŸ™ *Ó-Ò3°×<Ñ<¸XÀsÓK×QÑQÓS�ÙØ˜a‘�
ØàˆLØ—‘Ð,¨bÓ1ˆBÙ”c˜"“g ’mØ! # 2˜w�ô   Ó$ˆDñ œ3˜tŸz™z›|Ó,¨rÒ1Ø—x‘x ¨rÓ2ÒS°d·h±h¸yÈ"Ó6MÒSÐQS�Ø—z‘z“|�ô % TÓ*ˆDÙÙ[_œ3œ}¨T°=ÓA×JÑJÐQUÐJÓVÔWÐef�Ø˜c’>Ø>¸t¸fÐE‘DàÐKÈDÈ6ÐRÑR�Dä% dÓ+ˆDÜ—f‘f˜Z¨¨dÓ3ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGØˆFð!Ø—j‘jð "@ô ˜x¨°5¸¸#°;ÀØ˜D˜S�M 4¨´8¼UÀFðBó�ð —<‘< !Ò#ØŸ*™*Ð%NÐQYÐP[Ó\×eÑeÓg�CÙØ! !™f˜ð!ØŸJ™JÐ'uØ(+¨U°4°C¨[¼)ÀWÈTÈcÀ]Ð'SôUð —L‘L Ô*Ø—I‘I”KØ ‘N�IØ ‘M‘Hà !‘O�JùðCD	!ôL 	��(�˜=¨¨°1Ð5¸TÕBà�.Ô Ü�J‰J�sŽOðcQðf ‡H�H„JÜ	Ð˜i˜[¨	°*°¸YÀ{ÀmÐ
TÐ\`ÕaØÐøô'  '×5Ñ5ò !Ù ð!ûô ò !Ü˜ ¨$Õ/Ø˜qÑ –ûð!ús=   ÍA&Q;Î3 Q"Ï1Q;Ñ"Q8Ñ5Q;Ñ7Q8Ñ8Q;Ñ;	R"ÒRÒR"Ú__main__z--max-pages)ÚtypeÚdefault)rŠ   )N)%Ú__doc__ÚsysÚosr   rˆ   rw   Úargparser   Úurllib.parser   r    Úbs4r   ÚwarningsÚfilterwarningsr9   r   r   r|   r‚   rƒ   ry   r"   r   r,   rR   rA   rc   rž   Ú__name__ÚArgumentParserÚparserÚadd_argumentr%   Ú
parse_argsÚargsrŠ   © r   r   ú<module>r±      sæ   ðñ÷ ,× +× +Ý Ý  Û Ý ã Ø €× Ñ ˜Ô !à€ØˆJÐ>Ð
?€Ø€	Ø&€	Ø€Ø€Ø
€ð DØ�Ð>Ð?ñ€òòò 0òfò	/ótðn ˆzÒØ$ˆX×$Ñ$Ó&€FØ
×Ñ˜¨C¸ÐÔ>Ø×ÑÓ€DÙ	�D—N‘NÖ#ð	 r   