Ë
    ¡Š£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ZddlZddl	m
Z
 ddlmZ dZedz   ZdZdZd	Zd
dddœZg d¢Zh d£Zd„ Zd„ Z e«        d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)uõ   
ç¦�å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯è¯„å®¡æ‰¹å…¬ç¤º çˆ¬è™«
CMS: TRSï¼ˆæ‹“å°”æ€�ï¼‰+ Avalon.js åŠ¨é�™ç»“å�ˆ
åˆ—è¡¨: é�™æ€�HTMLå�«å…¨éƒ¨æ–‡ç« é“¾æŽ¥ï¼ˆ105æ�¡/é¡µï¼Œå�•é¡µå…¨é‡�ï¼‰
è¯¦æƒ…: div.article_content > div.TRS_Editor (éƒ¨åˆ†åµŒå¥—<html><body>)
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.fuzhou.gov.cnz/zgfzzt/shbj/xxgk/spgs/z/root/search.dbu+   ç¦�å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯è¯„å®¡æ‰¹å…¬ç¤ºu   ç¦�å»ºzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Language)z183.250.188.86z117.27.88.101z218.106.155.152>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr1   ÚoutÚwalks     €€€ú!/root/gov_crawler/crawl_fuzhou.pyr?   zbody_text.<locals>.walk0   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r5   z\n{3,}ú

)ÚreÚbs4r1   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr1   r>   r?   s      @@@r@   Ú	body_textrK   (   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrA   c                  óH   ‡— t         j                  Šdˆfd„	} | t         _        y )Nc           	      óz   •— | dk(  rt         D ]  }	  ‰||||||«      c S   ‰| |||||«      S # t        $ r Y Œ,w xY w)Nzwww.fuzhou.gov.cn)Ú
FUZHOU_IPSÚ	Exception)ÚhostÚportÚfamilyÚtypeÚprotoÚflagsÚipÚoriginal_getaddrinfos          €r@   Úpatched_getaddrinfoz'_patch_dns.<locals>.patched_getaddrinfoF   s`   ø€ ØÐ&Ò&Ü ò �ðÙ/°°D¸&À$ÈÈuÓUÒUðñ
 $ D¨$°¸¸eÀUÓKÐKøô !ò Ùðús   ‘.®	:¹:)r   r   r   r   )ÚsocketÚgetaddrinfo)rX   rW   s    @r@   Ú
_patch_dnsr[   C   s   ø€ Ü!×-Ñ-ÐõLð -„FÕrA   c                  ó€   — t        j                  t        d¬«      } | j                  d«       | j                  d«       | S )Né<   )ÚtimeoutzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r@   Úinit_dbrd   U   s1   € Ü�?‰?œ7¨BÔ/€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€KrA   c                 óþ   — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry t        |j                  d«      S # t        $ r(}t        d|› �t        j                  ¬«       Y d }~y d }~ww xY w)Né   )Úheadersr^   zutf-8éÈ   zhtml.parserz  [ERROR] fetch: )Úfile)ÚrequestsÚgetÚHEADERSÚencodingÚstatus_coder   ÚtextrO   ÚprintÚsysÚstderr)ÚurlÚrÚes      r@   Úget_souprv   \   si   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØÜ˜QŸV™V ]Ó3Ð3øÜò ÜÐ! ! Ð%¬C¯J©JÕ7Üûðús   ‚2A µA Á	A<ÁA7Á7A<c                 óæ  ‡	— g }| j                  dt        j                  d«      ¬«      D �]C  }|j                  d«      D �]+  }|j                  dd¬«      }|sŒ|d   j	                  «       }t        j
                  d	|«      sŒD|j                  d
«      xs |j                  d¬«      xs d}|j	                  «       }t        j                  dd|«      j	                  «       }|rt        |«      dk  rŒ³t        t        |«      Š	t        j                  dd‰	«      Š	|j                  d«      }|r|j                  d¬«      nd}t        ˆ	fd„|D «       «      r�Œ|j                  |‰	|dœ«       �Œ. �ŒF |S )u@   ä»Žé¡µé�¢æ��å�–æ‰€æœ‰æ–‡ç« é“¾æŽ¥ï¼ˆé�™æ€�HTMLå�«å…¨éƒ¨æ�¡ç›®ï¼‰r   Úlist_base_date_01©Úclass_r   ÚaT©Úhrefr}   zt\d{8}_\d+\.htm$Útitle©rG   r0   u   ^[\s\xa0Â·\u00b7]+é   z\.\./+Úspanc              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)rs   N© )Ú.0ÚitemÚfull_urls     €r@   ú	<genexpr>z%extract_list_items.<locals>.<genexpr>~   s   øè ø€ ÒA°4�t˜E‘{ hÕ.ÑAùs   ƒ)r~   rs   Údate)Úfind_allrC   ÚcompileÚfindrG   Úsearchrk   Úget_textrF   Úlenr   ÚLIST_URLÚanyr8   )
ÚsoupÚitemsr   r   r{   r}   r~   r�   Úpub_dater†   s
            @r@   Úextract_list_itemsr”   h   sD  ø€ à€EØ�}‰}˜U¬2¯:©:Ð6JÓ+Kˆ}ÓLó RˆØ—,‘,˜tÓ$ó 	RˆBØ—‘˜ $�Ó'ˆAÙØØ�V‘9—?‘?Ó$ˆDÜ—9‘9Ð0°$Ô7ØØ—E‘E˜'“NÒB a§j¡j°t jÓ&<ÒBÀˆEØ—K‘K“MˆEÜ—F‘FÐ0°"°eÓ<×BÑBÓDˆEÙœC ›J¨šNØÜœx¨Ó.ˆHÜ—v‘v˜i¨¨XÓ6ˆHà—7‘7˜6“?ˆDÙ48�t—}‘}¨4�}Ô0¸bˆHäÓA¸5ÔAÖAØ—‘ u°XÀxÑPÖQò'	RðRð* €LrA   c                 ó  — | j                  dddi¬«      }|r'|j                  d«      r|d   j                  «       dd S | j                  dd	¬
«      }|r7t        j                  d|j                  «       «      }|r|j                  d«      S y)u   ä»Žè¯¦æƒ…é¡µæ��å�–å�‘å¸ƒæ—¶é—´Úmetar3   ÚPubDate©ÚattrsÚcontentNé
   r�   Úarticle_timery   z(\d{4}-\d{1,2}-\d{1,2})é   r0   )r‹   rk   rG   rC   rŒ   r�   Úgroup)r‘   ÚmÚspÚm2s       r@   Úextract_dater¢   ƒ   s�   € à�	‰	�& ¨Ð 3ˆ	Ó4€AÙˆQ�U‰U�9ÔØ�‰|×!Ñ!Ó# C RÐ(Ð(Ø	�‰�6 .ˆÓ	1€BÙ	Ü�Y‰YÐ1°2·;±;³=ÓAˆÙØ—8‘8˜A“;ÐØrA   c                 óÐ   — | j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       S | j                  dd¬«      }|r|j                  d	¬
«      }|r|S y)u   ä»Žè¯¦æƒ…é¡µæ��å�–æ ‡é¢˜r–   r3   ÚArticleTitler˜   rš   r   Úarticle_titlery   Tr   r0   )r‹   rk   rG   r�   )r‘   rŸ   r   rJ   s       r@   Úextract_titler¦   �   sj   € à�	‰	�& ¨Ð 8ˆ	Ó9€AÙˆQ�U‰U�9ÔØ�‰|×!Ñ!Ó#Ð#Ø
�)‰)�E /ˆ)Ó
2€CÙ
Ø�L‰L˜tˆLÓ$ˆÙØˆHØrA   c                 óâ  — | j                  dd¬«      xs& | j                  dt        j                  d«      ¬«      }|sy|j                  dd¬«      }|r|}n-|j                  d«      }|r|j                  d«      }|r|n|}n|}g }|j                  D �]  }t	        |«      }t        |d	d
«      }	|	dk(  rNt        |«      }
|
sŒ/t        j                  ddt	        |«      j                  «       «      }|j                  |«       Œo|	dk(  r |j                  |j                  «       «       Œ”|	dv r`|j                  d«      }|r)|j                  t	        |«      j                  «       «       ŒÔt        |«      }
|
sŒâ|j                  d|
› d�«       Œø|	dv sŒý|j                  |j                  «       «       �Œ | j                  dd¬«      }|r|j                  t        |«      «       dj                  |«      S )u·   æ��å�–æ­£æ–‡HTMLï¼Œä¿�ç•™è¡¨æ ¼ã€�æ®µè�½ã€�é™„ä»¶

    ç¦�å·žå¸‚ä¸»ç«™ä½¿ç”¨ TRS_Editor å®¹å™¨ï¼Œ
    æ™‹å®‰åŒºåˆ†ç«™ä½¿ç”¨ <html><body> åŒ…è£…ã€‚
    å�Œæ—¶å…¼å®¹ä¸¤ç§�ç»“æž„ã€‚
    r   z1article_content article_content_01 font_family_cnry   Úarticle_contentr0   Ú
TRS_EditorÚhtmlÚbodyr3   Nr   z\s+ú r   )r   r+   z<p>ú</p>)r   r   Úarticle_attachmentrB   )r‹   rC   rŠ   r6   r9   r:   rK   rF   rG   r8   Ú
attach_strrE   )r‘   r   ÚtrsÚ	containerÚhtml_tagÚbody_tagÚpartsÚchildÚ	child_strÚtagro   Ú
inner_htmlÚtblÚattachs                 r@   Úextract_contentr»   �   s»  € ð �9‰9�UÐ#Vˆ9ÓWò CØ�9‰9�U¤2§:¡:Ð.@Ó#Aˆ9ÓBð áØð �(‰(�5 ˆ(Ó
.€CÙ
Ø‰	ð —8‘8˜FÓ#ˆÙØ—}‘} VÓ,ˆHÙ$,™°(‰IàˆIà€Eà×#Ñ#ó ,ˆÜ˜“Jˆ	Ü�e˜V TÓ*ˆà�#Š:Ü˜UÓ#ˆDÚÜŸV™V F¨C´°U³×1AÑ1AÓ1CÓD�
Ø—‘˜ZÕ(Ø�GŠ^Ø�L‰L˜Ÿ™Ó*Õ+ØÐ&Ñ&à—*‘*˜WÓ%ˆCÙØ—‘œS ›XŸ^™^Ó-Õ.ä  Ó'�ÚØ—L‘L 3 t f¨DÐ!1Õ2Ø�LÒ Ø�L‰L˜Ÿ™Ó*Ö+ð+,ð0 �Y‰Y�uÐ%9ˆYÓ:€FÙØ�‰”Z Ó'Ô(à�;‰;�uÓÐrA   c                 óH  — g }| j                  dd¬«      D ]g  }|d   }|j                  d¬«      xs d}|j                  d«      s|j                  d«      rt        t        |«      }|j                  d	|› d
|› d�«       Œi |rddj                  |«      z   dz   S t        | «      S )u   æ ¼å¼�åŒ–é™„ä»¶åŒºåŸŸr{   Tr|   r}   r   u   é™„ä»¶ú/z./z	<a href="z">z</a>u   <p>é™„ä»¶ï¼šu   ï¼›r­   )r‰   r�   Ú
startswithr   ÚBASE_URLr8   rE   r9   )r   Úlinesr{   r}   r3   s        r@   r¯   r¯   Ø   s¦   € à€EØ�\‰\˜# Dˆ\Ó)ò 5ˆØ�‰yˆØ�z‰z ˆzÓ%Ò1¨ˆØ�?‰?˜3Ô 4§?¡?°4Ô#8Üœ8 TÓ*ˆDØ�‰�y   b¨¨¨dÐ3Õ4ð5ñ ;@ˆ>˜EŸJ™J uÓ-Ñ-°Ñ6ÐMÄSÈÃXÐMrA   c                 ó   — |}t         }| j                  d||||t         |t        df«       | j                  «        | j                  d«      j	                  «       d   }| j                  d||t         |r|dd ndf«       | j                  «        |S )	u   ä¿�å­˜åˆ°search.dbz¸
        INSERT OR IGNORE INTO gov_raw
            (title, page_url, source_url, content, site_name, publish_date, group_name, script_name)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    zcrawl_fuzhou.pyzSELECT last_insert_rowid()r   zWINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?, ?, ?, ?)Nrh   r0   )Ú	SITE_NAMErb   ÚGROUPÚcommitÚfetchone)rc   r~   r“   rš   rs   Úpage_urlÚ
source_urlÚrids           r@   Ú
save_to_dbrÉ   ä   s‘   € à€HÜ€Jà‡L�Lð ð �˜: w´	¸8ÄUÐL]Ð	^ô	`ð
 	‡K�K„MØ
�,‰,Ð3Ó
4×
=Ñ
=Ó
?ÀÑ
B€CØ‡L�LÐjØ�uœi¹'¨°°#©ÀrÐJôLà‡K�K„MØ€JrA   c                  óæ  — t        j                  «       } | j                  dt        dd¬«       | j	                  «       }t        dt        › d�«       t        t        «      }|s t        d«       t        j                  d«       t        |«      }t        dt        |«      › d	�«       t        «       }d
}d
}d
}t        |«      D �]  \  }}	|	d   }
|j                  d|
f«      j!                  «       }|r|dz  }Œ5t        d|dz   › dt        |«      › d|	d   d d › d�dd¬«       t        |
«      }|st        d«       |dz  }Œ}|	d   xs t#        |«      }|	j%                  d«      xs t'        |«      }t)        |«      }|r|st        d«       |dz  }ŒÍt+        |||||
«      }|dz  }t        d|› �«       t-        j.                  d«       �Œ |j1                  «        t        dt        › d|› d|› d|› �«       y )Nz--pagesr�   u$   çˆ¬å�–é¡µæ•°ï¼ˆå�•é¡µå·²å�«å…¨é‡�ï¼‰)rS   ÚdefaultÚhelpú[u   ] å¼€å§‹çˆ¬å�–u   [ERROR] æ— æ³•èŽ·å�–åˆ—è¡¨é¡µu     åˆ—è¡¨é¡µèŽ·å�–åˆ° u
    ç¯‡æ–‡ç« r   rs   z'SELECT id FROM gov_raw WHERE page_url=?z  [r½   z] r~   é(   z...r¬   T)ÚendÚflushu   [ERROR èŽ·å�–è¯¦æƒ…]rˆ   u   [è·³è¿‡ æ— æ ‡é¢˜/å†…å®¹]zOK id=z
[u   ] å®Œæˆ�: +u    è·³è¿‡u    é”™è¯¯)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsrp   rÂ   rv   r�   rq   Úexitr”   rŽ   rd   Ú	enumeraterb   rÅ   r¦   rk   r¢   r»   rÉ   ÚtimeÚsleepÚclose)ÚparserÚargsr‘   r’   rc   Ú	new_countÚ
skip_countÚ	err_countÚidxr…   rs   ÚexistsÚdetail_soupr~   r“   rš   rÈ   s                    r@   r   r   ö   sð  € Ü×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐ=cÐÔdØ×ÑÓ€Dä	ˆAŒiˆ[˜Ð
'Ô(ä”HÓ€DÙÜÐ-Ô.Ü�‰�Œä˜tÓ$€EÜ	Ð!¤# e£* ¨ZÐ
8Ô9ä‹9€DØ€IØ€JØ€Iä˜uÓ%ó ‰	ˆˆTØ�5‰kˆà—‘ÐGÈ#ÈÓP×YÑYÓ[ˆÙØ˜!‰OˆJØä��C˜‘E�7˜!œC ›J˜< r¨$¨w©-¸¸Ð*<Ð)=¸SÐAÀsÐRVÕWä˜s“mˆÙÜÐ(Ô)Ø˜‰NˆIØà�W‘Ò;¤¨{Ó!;ˆØ—8‘8˜FÓ#Ò@¤|°KÓ'@ˆÜ! +Ó.ˆá™GÜÐ-Ô.Ø˜!‰OˆJØä˜˜u h°¸Ó=ˆØ�Q‰ˆ	Ü��s�eˆnÔä�
‰
�1Žð;ð> 	‡J�J„LÜ	ˆC”	ˆ{˜+ i [°¸
°|À7È9È+Ð
VÕWrA   Ú__main__)!Ú__doc__rC   rq   ÚjsonrØ   rj   r_   rÑ   rY   rD   r   Úurllib.parser   r¿   r�   ra   rÂ   rÃ   rl   rN   r;   rK   r[   rd   rv   r”   r¢   r¦   r»   r¯   rÉ   r   Ú__name__rƒ   rA   r@   ú<module>rè      s¶   ðñ÷ @× ?× ?× ?Ý Ý  à&€ØÐ/Ñ/€Ø
€Ø9€	Ø€ð DØZØ0ñ€ò D€
ò*€òò6-ñ „òò	òò6
ò
ò8òv	Nòò$4Xðn ˆzÒÙ…Fð rA   