Ë
    V_Šj/  ã                   óÐ   — 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ZdZdZdZd	Zd
ZdZdddœZg d¢Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uø   
å®œåŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å…¶ä»–ä¸»åŠ¨å…¬å¼€å†…å®¹ çˆ¬è™«
CMS: TRS (TRS_UEDITOR)
List: /xxgk/bmptlj/bm/sthjj/fdzdgknr/qtzdgknr_18348/ 
Pagination: index.shtml (P1), index_{N-1}.shtml (PN, N>=2)
Detail: /2026MM/tYYYYMMDD_XXXXXXX.shtml
æ¯�é¡µ20æ�¡
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu1   å®œåŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¶ä»–ä¸»åŠ¨å…¬å¼€å†…å®¹u   å…¶ä»–ä¸»åŠ¨å…¬å¼€å†…å®¹u   æ¹–åŒ—zhttp://www.ych.gov.cnz-/xxgk/bmptlj/bm/sthjj/fdzdgknr/qtzdgknr_18348é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Language)
u   ã€�æ‰“å�°æœ¬é¡µã€‘u   ã€�å…³é—­çª—å�£ã€‘u   æ‰“å�°æœ¬é¡µu   å…³é—­çª—å�£u   è½¬è½½åˆ†äº«ï¼šu   æµ�è§ˆé‡�ï¼šu   ç›¸å…³é™„ä»¶ï¼šu   ç›¸å…³ç¨¿ä»¶ï¼šu   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€u	   é™„ä»¶ï¼šc                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      ú$/root/gov_crawler/crawl_ych_sthjj.pyÚtable_to_mdr   &   s   € äˆu‹:Ðó    c                 óê  — g }| j                   D �]Ñ  }t        |t        «      r%|j                  «       }|sŒ'|j	                  |«       Œ9|j
                  dk(  rƒ|j                  dd«      j                  «       }|j                  d¬«      }|r:|r8|j                  d«      st        ||«      n|}|j	                  d|› d|› d	�«       Œ¶|sŒ¹|j	                  |«       ŒË|j
                  d
k(  rh|j                  dd«      }|sŒï|j                  dd«      }	|j                  d«      st        ||«      n|}
|j	                  |	r	d|	› d|
› d	�nd|
› d	�«       �ŒB|j
                  dv r*|j                  dd¬«      }|s�Œg|j	                  |«       �Œz|j
                  dk(  r|j	                  d«       �Œœt        |d«      s�Œª|j                  dd¬«      }|s�ŒÁ|j	                  |«       �ŒÔ dj                  |«      S )z&Render a <p> preserving <a> and <img>.ÚaÚhrefÚ T©ÚstripÚhttpú[ú](ú)ÚimgÚsrcÚaltú![ú![]()ÚbÚstrongÚspanÚfontÚemú Úbrú
Úget_text)ÚcontentsÚ
isinstancer   r   ÚappendÚnameÚgetr%   Ú
startswithr   ÚhasattrÚjoin)Úp_tagÚ
detail_urlÚpartsÚelemÚtr   ÚtextÚfullr   r   Úfull_srcs              r   Úrender_paragraphr6   *   s¬  € à€EØ—‘ó  ˆÜ�dœCÔ Ø—
‘
“ˆAÚØ—‘˜Q•Ø�Y‰Y˜#ÒØ—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,ˆDÙ™Ø8<¿¹ÈÔ8O”w˜z¨4Ô0ÐUY�Ø—‘˜q   b¨¨¨aÐ0Õ1ÚØ—‘˜TÕ"Ø�Y‰Y˜%ÒØ—(‘(˜5 "Ó%ˆCÚØ—h‘h˜u bÓ)�Ø;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTØ�Y‰YÐ?Ñ?Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–Ø�Y‰Y˜$ÒØ�L‰L˜ÖÜ�T˜:Ö&Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–ð9 ð: �8‰8�E‹?Ðr   c           	      ó†  ‡— g }t        «       }| j                  D �]Ê  }|j                  €Œ|j                  j                  «       }|dk(  r!t	        ||«      }|sŒ?|j                  |«       ŒQ|dk(  rA|j                  d¬«      }t        |«      dk  rŒwt        |«      }|sŒ…|j                  |«       Œ—|dk(  r�|j                  dd«      }	|	sŒ±t        |«      |vsŒ¿|j                  t        |«      «       |j                  d	d«      }
|	j                  d
«      st        ||	«      n|	}|j                  |
r	d|
› d|› d�nd|› d�«       �Œ,|dv �rR|j                  g d¢d¬«      D �]7  }t        |«      |v rŒ|j                  t        |«      «       |j                  dk(  r7|j                  dd¬«      }|sŒQt	        ||«      }|sŒ`|j                  |«       Œr|j                  dk(  rA|j                  d¬«      }t        |«      dk  rŒ¢t        |«      }|sŒ°|j                  |«       ŒÂ|j                  dk(  sŒÒ|j                  dd«      }	|	sŒç|j                  d	d«      }
|	j                  d
«      st        ||	«      n|	}|j                  |
r	d|
› d|› d�nd|› d�«       �Œ: �Œƒ|dv s�Œ‰|j                  dd¬«      D ],  }|j                  dd¬«      }|sŒ|j                  d|z   «       Œ. �ŒÍ g }|D ]C  Št        ˆfd„t         D «       «      rŒt#        j$                  d‰«      rŒ3|j                  ‰«       ŒE dj'                  |«      S )zEExtract content: paragraphs + tables + images via recursive find_all.Úpr   Tr   é   r   r   r   r   r   r   r   r   r   )ÚdivÚsectionÚarticle)r8   r   r   )Ú	recursiver"   )ÚulÚolÚliFz- c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0Úskr8   s     €r   ú	<genexpr>z"extract_content.<locals>.<genexpr>‘   s   øè ø€ Ò,˜2ˆr�QŒwÑ,ùs   ƒu   ^(æ�¥æº�|å�‘å¸ƒæ—¥æœŸ)[ï¼š:]\s*z

)ÚsetÚchildrenr)   Úlowerr6   r(   r%   Úlenr   r*   ÚidÚaddr+   r   Úfind_allÚanyÚ
SKIP_TEXTSÚreÚmatchr-   )Úcontent_divr/   r0   Ú	processedÚchildÚtnÚtxtÚall_textÚmdr   r   r5   ÚsubÚrenderedr@   Úfilteredr8   s                   @r   Úextract_contentr[   M   s  ø€ à€EÜ“€Ià×%Ñ%ó :-ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆà�Š9Ü" 5¨*Ó5ˆCÚØ—‘˜SÕ!à�7Š]Ø—~‘~¨D�~Ó1ˆHÜ�8‹}˜rÒ!ØÜ˜UÓ#ˆBÚØ—‘˜RÕ à�5Š[Ø—)‘)˜E 2Ó&ˆCÚ”r˜%“y¨	Ò1Ø—‘œb ›iÔ(Ø—i‘i  rÓ*�Ø;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTàÐ0Ò0à—~‘~Ò&;Àt�~ÓLó ]�Ü�c“7˜iÑ'ØØ—‘œb ›gÔ&Ø—8‘8˜s’?àŸ,™, s°$˜,Ó7�CÙØ Ü/°°ZÓ@�HÚØŸ™ XÕ.Ø—X‘X Ò(Ø"Ÿ|™|°$˜|Ó7�HÜ˜8“} rÒ)Ø Ü$ SÓ)�BÚØŸ™ RÕ(Ø—X‘X Ó&ØŸ'™' %¨Ó,�CÚØ!Ÿg™g e¨RÓ0˜ØCFÇ>Á>ÐRXÔCY¤7¨:°sÔ#;Ð_b˜ØŸ™Á r¨#¨¨b°°
¸!Ñ%<È4ÐPXÈzÐYZÐI[Ö\ò1]ð4 �<ÓØ—n‘n T°U�nÓ;ò -�Ø—k‘k #¨T�kÓ2�ÚØ—L‘L ¨¡Õ,ò-ðo:-ðz €HØò ˆÜÓ,¤Ô,Ô,ØÜ�8‰8Ð6¸Ô:ØØ�‰˜Õðð �;‰;�xÓ Ð r   c                 óú  — g }t        «       }| j                  dd¬«      D ]Ø  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  d¬«      xs& |j                  d«      d	   j                  d
«      d   }||vsŒ´|j                  |«       |j                  ||dœ«       ŒÚ |S )Nr   T©r   r   z&\.(pdf|doc|docx|xls|xlsx|rar|zip|txt)$ú/r   r   éÿÿÿÿú?r   )r)   Úurl)rF   rL   rO   ÚsearchÚIr+   ÚBASE_URLÚlstripr%   ÚsplitrK   r(   )ÚsoupÚattsÚseenr   r   r)   s         r   Úextract_attachmentsrj   œ   sÝ   € Ø€DÜ‹5€DØ�]‰]˜3 Tˆ]Ó*ò 
9ˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKØ�‰˜sÔ#Ü $‘‘Ø—_‘_ VÔ,Ü #‘~¨¯©°CÓ(8Ñ8�Ø—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ˜4ÒØ—‘˜”Ø—‘ T°$Ñ7Õ8ð
9ð €Kr   c                 óÂ  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        |d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }|sJ|j                  d«      }|r7|j                  d¬«      }t        j                  dd|«      j                  «       }|s|}d}	|j                  dddi¬	«      }
|
r'|
j                  d
«      r|
d
   j                  «       d d }	|j                  dd¬«      }|s|j                  dd¬«      }|s/|j                  d«      D ]  }|j                  dd¬«      }|sŒ|} n t        |«      }|rt        || «      }nd}t        |j                  «       «      dk  r$d| › d|› d�}|r|D ]  }|d|d   › d|d   › d�z  }Œ ||	||fS # t
        $ r}d d d g fcY d }~S d }~ww xY w)Né   ©ÚheadersÚtimeoutúutf-8úhtml.parserr   Úmetar)   ÚArticleTitle)ÚattrsÚcontentÚtitleTr   u,   \s*-\s*å®œåŸŽå¸‚äººæ°‘æ”¿åºœé—¨æˆ·ç½‘ç«™\s*$ÚPubDateé
   r:   ÚTRS_UEDITOR©Úclass_Úviewr8   z<p><a href="z">z</a></p>u   

é™„ä»¶ï¼š[r   ra   r   )Úrequestsr*   ÚHEADERSÚencodingr3   Ú	Exceptionr   Úfindr   r%   rO   rX   rL   rj   r[   rI   )ra   Ú
list_titleÚrÚhtmlÚerg   rv   ÚmtÚttagÚdate_strrW   rQ   r8   ÚinnerÚattachmentsru   r   s                    r   Úfetch_detailr‹   ¯   s  € ð$Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆô ˜˜}Ó-€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�y‰y˜Ó!ˆÙØ—M‘M¨�MÓ-ˆEÜ—F‘FÐJÈBÐPUÓV×\Ñ\Ó^ˆEÙØˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆð —)‘)˜E¨-�)Ó8€KÙØ—i‘i ¨f�iÓ5ˆáØ—‘˜sÓ#ò 	ˆAØ—F‘F˜5¨�FÓ0ˆEÚØ#�Ùð		ô & dÓ+€KáÜ! +¨sÓ3‰àˆô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆÙØ ò E�Ø˜^¨A¨f©I¨;°b¸¸5¹¸
À!ÐDÑD‘ðEð �(˜G [Ð0Ð0øôe ò $Ø�T˜4 Ð#Õ#ûð$ús   ‚/G Ç	GÇGÇGÇGc                 ó6  — | dk(  rt         › t        › d�}nt         › t        › d| dz
  › d�}	 t        j                  |t        d¬«      }d|_        t        |j                  d«      }g }|j                  dd¬«      }|sg S |j                  dd¬«      D ]Ü  }|j                  dd¬«      }|sŒ|d   }	|	sŒ!|j                  dd«      xs |j                  d¬«      }
|
rt        |
«      dk  rŒX|	j                  d«      r
t         |	z   }n-|	j                  d«      r|	}nt        t         › t        › d�|	«      }|j                  dd¬«      }|r|j                  d¬«      nd}|j!                  |
||f«       ŒÞ |S # t        $ r}t        d| › d	|› �«       g cY d
}~S d
}~ww xY w)z)Extract articles from page N (1-indexed).é   r^   z/index_z.shtmlrl   rm   rp   ú  Page z error: Nrq   r>   Údoc_listrz   r@   Úoddr   Tr]   r   rv   r   r   r   r   r   Údate)rd   Ú	LIST_PATHr}   r*   r~   r   r€   Úprintr   r3   r�   rL   r%   rI   r+   r   r(   )Úpage_numra   rƒ   r…   rg   Úarticlesr>   r@   r   r   rv   Úfull_urlÚ	date_spanr‘   s                 r   Úextract_list_pager˜   ë   sª  € à�1‚}Ü�
œ9˜+ QÐ'‰ô �
œ9˜+ W¨X¸©\¨N¸&ÐAˆðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ô
 ˜Ÿ™ Ó/€Dà€HØ	�‰�4 
ˆÓ	+€BÙØˆ	à�k‰k˜$ uˆkÓ-ò 1ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆÙØð —‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆÙœ˜E›
 QšØð �?‰?˜3ÔÜ $‘‰HØ�_‰_˜VÔ$Ø‰Hä¤( ¬I¨;°aÐ8¸$Ó?ˆHð —G‘G˜F¨6�GÓ2ˆ	Ù1:ˆy×!Ñ!¨Ð!Ô-Àˆà�‰˜ ¨$Ð/Õ0ð31ð6 €OøôM ò Ü�˜�z ¨!¨Ð-Ô.Ø�	ûðús   ¬#E2 Å2	FÅ;FÆFÆFc                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r   Úinit_dbrŸ   !  s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó:  — |r|d d n|}t        j                  dd|«      j                  «       }|rt        j                  |d¬«      nd}t        d«      D ]Y  }	 | j                  dt        |||j                  «       |||t        |t        f
«      }	| j                  «        |	j                  d	kD  c S  y# t        j                  $ rU}
d
t        |
«      v r|dk  rt        j                   d«       Y d }
~
Œœt#        d|
› �t$        j&                  ¬«       Y d }
~
 yd }
~
ww xY w)NéÈ   z\s+r"   F)Úensure_asciiz[]é   zÕINSERT OR IGNORE INTO gov_raw
                   (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   Úlockedé   z  DB error: )Úfile)rO   rX   r   ÚjsonÚdumpsÚranger�   Ú	SITE_NAMEÚCATEGORYÚGROUPÚcommitÚrowcountrš   ÚOperationalErrorr   ÚtimeÚsleepr“   ÚsysÚstderr)rž   rv   Úpage_urlÚpublish_dateru   rŠ   ÚsummaryÚatt_jsonÚattemptÚcurr…   s              r   Úsave_articlerº   (  sý   € Ù&ˆg�d�s‰m¨E€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€GÙ>IŒt�z‰z˜+°EÕ:Èt€HÜ˜“8ò ˆð	Ø—,‘,ð<ô ˜H h°·±³¸|Ø˜'¤8¨X´uð>ó	ˆCð �K‰KŒMØ—<‘< !Ñ#Ò#ðð" øô ×'Ñ'ò 	Øœ3˜q›6Ñ! g°¢kÜ—
‘
˜1”ÜÜ�L  Ð$¬3¯:©:Õ6Ýûð	ús   ÁAB2Â2DÃ'DÃ1DÄDc            
      óä  — t         } t        t        j                  «      dkD  r	 t	        t        j                  d   «      } t        dt        › d| › �«       t        «       }d}d}t        d| dz   «      D ]Ý  }t        |«      }|st        d|› d�«        n¿|t        |«      z  }|D ]Œ  \  }}}|r|d	k  rŒ|j                  d
|f«      }	|	j                  «       rŒ3t        ||«      \  }
}}}|
xs |}|xs |}|xs	 d|› d|› d�}|xs g }t        ||||||«      r|dz  }t        j                   d«       ŒŽ t        d|› dt        |«      › d|› d�«       Œß |j#                  «        |j%                  «        t        d|› d|› �«       y # t
        $ rb t        j                  d   dv rIt        t        j                  «      dkD  r-	 t	        t        j                  d   «      } n# t
        $ r Y nw xY wY �Œ®w xY w)Nr�   )z--max-pagesr¥   z	Scraping z, max pages: r   rŽ   z: 0 articles (end)z
2020-01-01z)SELECT id FROM gov_raw WHERE page_url = ?r   r   r   g333333Ó?z: z found, z new so farz
Done! Total found: z, New: )Ú	MAX_PAGESrI   r²   ÚargvÚintÚ
ValueErrorr“   rª   rŸ   r©   r˜   r�   Úfetchoner‹   rº   r°   r±   r­   Úclose)Ú	max_pagesrž   Ú	total_newÚtotal_foundÚpnr•   rv   r´   r‘   r¹   Ú	det_titleÚdet_dateÚdet_contentÚdet_attsÚfinal_titleÚ
final_dateÚfinal_contentÚ
final_attss                     r   ÚmainrÎ   B  s   € Ü€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
ˆI”i�[ ¨i¨[Ð
9Ô:ä‹9€DØ€IØ€Kä�A�y 1‘}Ó%ò MˆÜ$ RÓ(ˆÙÜ�G˜B˜4Ð1Ð2Ô3Ùà”s˜8“}Ñ$ˆà%-ò 	Ñ!ˆE�8˜TÙ˜˜|Ò+Øà—,‘,ÐJÈXÈKÓXˆCØ�|‰|Œ~Øä9EÀhÐPUÓ9VÑ6ˆI�x ¨hØ#Ò, uˆKØ!Ò) TˆJØ'ÒI¨Q¨{¨m¸2¸h¸ZÀqÐ+IˆMØ!š RˆJä˜D +¨x¸À]ÐT^Ô_Ø˜Q‘�	ä�J‰J�s�Oð#	ô& 	�˜�t˜2œc (›m˜_¨H°Y°K¸{ÐKÕLð7Mð: 	‡K�K„MØ‡J�J„LÜ	Ð! + ¨g°i°[Ð
AÕBøô[ ò 	Ü�x‰x˜‰{Ð.Ñ.Ü”s—x‘x“= 1Ò$ðÜ$'¬¯©°©Ó$4™	øÜ%ò Ùðýð	ús5   ¤F Æ:G/Æ?GÇG/Ç	G(Ç%G/Ç'G(Ç(G/Ç.G/Ú__main__)r   )Ú__doc__r}   rO   r§   rš   r°   r²   Úbs4r   Úurllib.parser   rœ   rª   r«   r¬   rd   r’   r¼   r~   rN   r   r6   r[   rj   r‹   r˜   rŸ   rº   rÎ   Ú__name__rB   r   r   ú<module>rÔ      s�   ðñ÷ .× -× -Ý Ý  à
€Ø?€	Ø%€Ø€Ø"€Ø;€	Ø€	ð DØ'ñ€ò
€
òò òFJ!ò^ó&71òx1òlòò42Cðj ˆzÒÙ…Fð r   