Ë
    ¡Š£jv   ã                   óÆ   — 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
dddœZdZh 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ã   
å’¸å®�é«˜æ–°åŒº-é€šçŸ¥å…¬å‘Š çˆ¬è™«
ç«™ç‚¹: gxq.xianning.gov.cn
æ �ç›®: /zwgk/fdzdgknr/tzgg/
CMS: TRS (TRS_Documents + page_fgw.js åˆ†é¡µ)
åˆ—è¡¨: é�™æ€�HTML, æ¯�é¡µ20æ�¡, index_N.shtml åˆ†é¡µ
è¯¦æƒ…: div.con.m15 æ­£æ–‡å®¹å™¨
é    N)ÚBeautifulSoup)Úurljoinzhttp://gxq.xianning.gov.cnz/zwgk/fdzdgknr/tzgg/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é   >)   Ú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Úchr2   ÚoutÚwalks     €€€ú+/root/gov_crawler/crawl_xianninggxq_tzgg.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]*r6   z\n{3,}ú

)ÚreÚbs4r2   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr2   r?   r@   s      @@@rA   Ú	body_textrL   (   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrB   c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    rA   Úinit_dbrS   C   s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€KrB   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é   )ÚheadersÚtimeoutzutf-8éÈ   zhtml.parserz  [ERROR] fetch: )Úfile)ÚrequestsÚgetÚHEADERSÚencodingÚstatus_coder   ÚtextÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚrÚes      rA   Úget_souprg   J   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«      D �]Z  }|j                  d«      }d}|D ]%  }|j                  dd¬«      }|sŒd|d   v sŒ!|d	z  }Œ' |d
k  rŒG|D �]  }|j                  dd¬«      }|sŒ|d   j                  «       }|j                  d«      xs |j	                  d¬«      xs d}|j                  «       }|rt        |«      dk  rŒwd|vrŒ||j                  d«      r|nt        t        t        z   |«      Š|j	                  dd¬«      }	d}
t        j                  d|	«      }|r|j                  d	«      }
t        ˆfd„|D «       «      rŒù|j                  |‰|
dœ«       �Œ  |S  |S )u   æ��å�–æ–‡ç« åˆ—è¡¨r   r   r   ÚaT)Úhrefz/tzgg/rj   é   r   Útitle)rH   r1   é   Úhttpú ú(\d{4}-\d{1,2}-\d{1,2})c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)rd   N© )Ú.0ÚitemÚfull_urls     €rA   ú	<genexpr>z%extract_list_items.<locals>.<genexpr>u   s   øè ø€ ÒA°4�t˜E‘{ hÕ.ÑAùs   ƒ)rl   rd   Údate)Úfind_allÚfindrH   r[   Úget_textÚlenÚ
startswithr   ÚBASE_URLÚ	LIST_PATHrD   ÚsearchÚgroupÚanyr9   )ÚsoupÚitemsr   ÚlisÚ
tzgg_countr   ri   rj   rl   Úli_textrw   Úmru   s               @rA   Úextract_list_itemsrˆ   V   s�  ø€ à€EØ�m‰m˜DÓ!ó ˆØ�k‰k˜$Óˆàˆ
Øò 	 ˆBØ—‘˜ $�Ó'ˆAÚ�X  6¡Ò*Ø˜a‘‘
ð	 ð ˜Š>ØØó 	NˆBØ—‘˜ $�Ó'ˆAÙØØ�V‘9—?‘?Ó$ˆDØ—E‘E˜'“NÒB a§j¡j°t jÓ&<ÒBÀˆEØ—K‘K“MˆEÙœC ›J¨šNØØ˜tÑ#ØØ#Ÿ™¨vÔ6‘t¼GÄHÌyÑDXÐZ^Ó<_ˆHà—k‘k #¨T�kÓ2ˆGØˆDÜ—	‘	Ð4°gÓ>ˆAÙØ—w‘w˜q“z�ÜÓA¸5ÔAÕAØ—‘ u°XÀtÑLÖMð'	Nð( 	Ø€Lð?ð> €LrB   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   ä»Žè¯¦æƒ…é¡µæ��å�–æ—¥æœŸÚmetar4   ÚPubDate)ÚattrsÚcontentNé
   r   z	xxgk-info©Úclass_rp   rk   r1   )ry   r[   rH   rD   r   rz   r€   )r‚   r‡   ÚinfoÚm2s       rA   Úextract_dater“   {   s�   € à�	‰	�& ¨Ð 3ˆ	Ó4€AÙˆQ�U‰U�9ÔØ�‰|×!Ñ!Ó# C RÐ(Ð(à�9‰9�U ;ˆ9Ó/€DÙÜ�Y‰YÐ1°4·=±=³?ÓCˆÙØ—8‘8˜A“;ÐØrB   c                 ó˜  — | j                  dd¬«      }|syg }|j                  D �]  }t        |dd«      }t        |«      }|dk(  rEt	        |«      }|sŒ/t        j                  dd	|j                  «       «      }|j                  |«       Œf|d
k(  r |j                  |j                  «       «       Œ‹|dv r`|j                  d
«      }|r)|j                  t        |«      j                  «       «       ŒËt	        |«      }|sŒÙ|j                  d|› d�«       Œï|dv sŒô|j                  |j                  «       «       �Œ dj                  |«      S )u   æ��å�–æ­£æ–‡HTMLr   zcon m15r�   r1   r4   Nr   z\s+ro   r   )r   r,   z<p>z</p>)r   r   rC   )
ry   r7   r;   r:   rL   rD   rG   rH   r9   rF   )	r‚   ÚconÚpartsÚchildÚtagÚ	child_strr_   Ú
inner_htmlÚtbls	            rA   Úextract_contentrœ   ‰   s  € à
�)‰)�E )ˆ)Ó
,€CÙØà€EØ—‘ó ,ˆÜ�e˜V TÓ*ˆÜ˜“Jˆ	à�#Š:Ü˜UÓ#ˆDÚÜŸV™V F¨C°·±Ó1BÓC�
Ø—‘˜ZÕ(Ø�GŠ^Ø�L‰L˜Ÿ™Ó*Õ+ØÐ&Ñ&Ø—*‘*˜WÓ%ˆCÙØ—‘œS ›XŸ^™^Ó-Õ.ä  Ó'�ÚØ—L‘L 3 t f¨DÐ!1Õ2Ø�LÒ Ø�L‰L˜Ÿ™Ó*Ö+ð),ð, �;‰;�uÓÐrB   c                 ó  — | j                  d||t        |t        |t        df«       | j                  «        | j                  d«      j	                  «       d   }| j                  d||t        |r|d d ndf«       | j                  «        |S )Nz¸
        INSERT OR IGNORE INTO gov_raw
            (title, page_url, source_url, content, site_name, publish_date, group_name, script_name)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    zcrawl_xianninggxq_tzgg.pyzSELECT last_insert_rowid()r   zWINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?, ?, ?, ?)rX   r1   )rQ   Ú	SITE_NAMEÚGROUPÚcommitÚfetchone)rR   rl   Úpub_dater�   rd   Úrids         rA   Ú
save_to_dbr¤   ©   s‡   € Ø‡L�Lð ð �”i ¬)°X¼uÐFaÐ	bô	dð
 	‡K�K„MØ
�,‰,Ð3Ó
4×
=Ñ
=Ó
?ÀÑ
B€CØ‡L�LÐjØ�uœi¹'¨°°#©ÀrÐJôLà‡K�K„MØ€JrB   c                  ó’  — t        j                  «       } | j                  dt        t        d¬«       | j                  «       }t        dt        › d|j                  › �«       t        «       }d}d}d}t        d|j                  dz   «      D �]�  }|dk(  rt        t        z   }nt        t        z   d|› d	�z   }t        d
|› d|› d�«       t        |«      }|st        d|› d�«       |dz  }Œ_t        |«      }	|	st        d|› d�«        �nt        dt        |	«      › d�«       t!        |	«      D ]ì  \  }
}|d   }|j#                  d|f«      j%                  «       }|r|dz  }Œ4t        d|› d|
dz   › d|d   d d › d�dd¬«       t        |«      }|st        d«       |dz  }Œs|d   }|j'                  d«      xs t)        |«      }t+        |«      }|r|st        d «       |dz  }Œ¶t-        |||||«      }|dz  }t        d!|› �«       t/        j0                  d«       Œî �Œ’ |j3                  «        t        d"t        › d#|› d$|› d%|› �«       y )&Nz--pagesu   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpú[u   ] å¼€å§‹çˆ¬å�–ï¼Œpages=r   rk   Úindex_z.shtmlu	     --- ç¬¬u   é¡µ: z ---u     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µu     [WARN] ç¬¬u!   é¡µæ— æ–‡ç« ï¼Œå�¯èƒ½å·²åˆ°å°¾é¡µu     èŽ·å�–åˆ° u
    ç¯‡æ–‡ç« rd   z'SELECT id FROM gov_raw WHERE page_url=?z  [ú-z] rl   é(   z...ro   T)ÚendÚflushu   [ERROR èŽ·å�–è¯¦æƒ…]rw   u   [è·³è¿‡ æ— å†…å®¹]zOK id=z
[u   ] å®Œæˆ�: +u    è·³è¿‡u    é”™è¯¯)ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚ
parse_argsra   rž   ÚpagesrS   Úranger}   r~   rg   rˆ   r{   Ú	enumeraterQ   r¡   r[   r“   rœ   r¤   ÚtimeÚsleepÚclose)ÚparserÚargsrR   Ú	new_countÚ
skip_countÚ	err_countÚpagerd   r‚   rƒ   Úidxrt   ÚexistsÚdetail_souprl   r¢   r�   r£   s                     rA   r   r   ·   si  € Ü×$Ñ$Ó&€FØ
×Ñ˜	¬´YÀ^ÐÔTØ×ÑÓ€Dä	ˆAŒiˆ[Ð/°·
±
¨|Ð
<Ô=ä‹9€DØ€IØ€JØ€Iä�a˜Ÿ™ a™Ó(ó 0ˆØ�1Š9ÜœYÑ&‰CäœYÑ&¨6°$°°vÐ)>Ñ>ˆCä�	˜$˜˜u S E¨Ð.Ô/Ü˜‹}ˆÙÜÐ-¨d¨V°3Ð7Ô8Ø˜‰NˆIØä" 4Ó(ˆÙÜ�L  Ð&GÐHÔIÚä�œS ›Z˜L¨
Ð3Ô4ä" 5Ó)ò 	‰IˆC�Ø�u‘+ˆCØ—\‘\Ð"KÈcÈVÓT×]Ñ]Ó_ˆFÙØ˜a‘�
Øä�C˜�v˜Q˜s 1™u˜g R¨¨W©°c°rÐ(:Ð';¸3Ð?ÀSÐPTÕUä" 3›-ˆKÙÜÐ,Ô-Ø˜Q‘�	Øà˜‘MˆEØ—x‘x Ó'ÒD¬<¸Ó+DˆHÜ% kÓ2ˆGá¡ÜÐ*Ô+Ø˜a‘�
Øä˜T 5¨(°G¸SÓAˆCØ˜‰NˆIÜ�F˜3˜%�.Ô!ä�J‰J�q�Mò9	ð)0ðd 	‡J�J„LÜ	ˆC”	ˆ{˜+ i [°¸
°|À7È9È+Ð
VÕWrB   Ú__main__)Ú__doc__rD   rb   r¸   rZ   rN   r¯   rE   r   Úurllib.parser   r}   r~   rP   rž   rŸ   r\   r³   r<   rL   rS   rg   rˆ   r“   rœ   r¤   r   Ú__name__rr   rB   rA   ú<module>rÈ      s•   ðñ÷ 2× 1× 1Ý Ý  à'€Ø"€	Ø
€Ø*€	Ø€ð DØZØ0ñ€ð
 €	ò*€òò6ò	ò"òJòò@ò?XðD ˆzÒÙ…Fð rB   