Ë
    ¡Š£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ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlZddlmZ ddlZ ej                   «       Zej%                  dedd¬«       ej)                  «       \  ZZdZdZd	Zej4                  dkD  rej4                  nd
ZddddœZh d£Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)uM   Crawler for æ·®å�—å¸‚å¤§é€šåŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š v2 (FIXED encoding)é    N)ÚBeautifulSoupz--pagesu   é™�åˆ¶é¡µæ•°)ÚtypeÚdefaultÚhelpu+   æ·®å�—å¸‚å¤§é€šåŒºäººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šzhttps://www.hndt.gov.cnÚ6787542é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36zUtext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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Úchr5   ÚoutÚwalks     €€€ú"/root/gov_crawler/crawl_hndt_v2.pyrC   zbody_text.<locals>.walk.   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]*r9   ú\n{3,}ú

)ÚreÚbs4r5   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr5   rB   rC   s      @@@rD   Ú	body_textrP   &   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrE   c                 ó`   — t        j                  | t        d¬«      }d|_        |j                  S )u>   GET with forced UTF-8 â€” server omits charset in Content-Typeé   )ÚheadersÚtimeoutúutf-8)ÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚurlÚrs     rD   Úget_pager]   A   s$   € ä�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€MrE   c                 óN  — t        | d«      }g }|j                  dt        j                  d«      ¬«      }|s|S |j	                  dd¬«      D ]Ö  }|j                  d«      }|sŒ|j                  d	d
«      }|sŒ,|j                  dd
«      xs |j                  d¬«      }|j                  dd¬«      }|r|j                  d¬«      nd
}	|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  |||	dœ«       ŒØ |S )Núhtml.parserr   Údoc_list©Úclass_r   F)Ú	recursiveÚaÚhrefr4   ÚtitleT©rL   ÚspanÚdateú/Úhttp)r[   rf   ri   )r   ÚfindrH   ÚcompileÚfind_allrW   Úget_textÚ
startswithÚBASEÚlstripr<   )
ÚhtmlÚsoupÚitemsr   r   rd   re   rf   Ú	date_spanri   s
             rD   Úextract_listrw   H   s  € Ü˜˜}Ó-€DØ€EØ	�‰�4¤§
¡
¨;Ó 7ˆÓ	8€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò BˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆÙØØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ—G‘G˜F¨6�GÓ2ˆ	Ù1:ˆy×!Ñ!¨Ð!Ô-ÀˆØ�?‰?˜3ÔÜ˜$‘;‰DØ—‘ Ô(Ü˜#‘: §¡¨CÓ 0Ñ0ˆDØ�‰˜T¨E¸4Ñ@ÕAðBð €LrE   c                 ó¢  — t        | d«      }d}d}d}g }|j                  dd¬«      }|r|j                  d¬«      }|s)|j                  dd	d
i¬«      }|r|j                  dd«      }|j                  dd¬«      }|r7t	        j
                  d|j                  «       «      }	|	r|	j                  d«      }|sR|j                  dd	di¬«      }|r;|j                  dd«      }
t	        j
                  d|
«      }	|	r|	j                  d«      }|j                  dt	        j                  d«      ¬«      }|s&|j                  dt	        j                  d«      ¬«      }|�rÙ|j                  d«      D ]º  }|j                  dd«      }t	        j
                  d|t        j                  «      sŒ;|j                  d¬«      xs |j                  d«      d   }|j                  d«      st        dz   |j                  d«      z   }|j                  d|› d|› d�«       |j                  ||dœ«       Œ¼ g }|j                   D ]Ä  }t#        |d	«      r0|j$                  d k(  r!|j                  d!t'        |«      z   d!z   «       Œ?t#        |d"«      rEt)        |«      }t	        j*                  d#d$|«      j-                  «       }|sŒ~|j                  |«       Œ�t/        |t&        «      sŒ¡|j-                  «       }|sŒ´|j                  |«       ŒÆ d%j1                  |«      }t	        j*                  d&d%|«      j-                  «       }||||rt3        j4                  |d'¬(«      fS dfS ))Nr_   r4   r   Ú	newstitlera   Trg   Úmetar7   ÚArticleTitle)ÚattrsÚcontentrh   Úspu(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})é   ÚPubDatez(\d{4}-\d{2}-\d{2})r   Úwzconzj-fontContentrd   re   z+\.(doc|docx|pdf|xls|xlsx|zip|rar|txt)(\?|$)rj   éÿÿÿÿrk   ú[z](ú))rf   r[   r!   r9   ro   z\s+ú rG   rF   F©Úensure_ascii)r   rl   ro   rW   rH   ÚsearchÚgrouprm   rn   ÚIÚsplitrp   rq   rr   Úreplace_withr<   r:   Úhasattrr7   r=   rP   rK   rL   r;   rJ   ÚjsonÚdumps)rs   rt   rf   ri   r}   Úattachmentsr   rz   rv   ÚmÚpubÚcontent_divÚa_tagÚahrefÚatextÚtextsÚchildÚtxts                     rD   Úparse_detailrš   `   sø  € Ü˜˜}Ó-€DØ€EØ€DØ€GØ€Kà	�‰�4 ˆÓ	,€BÙ	Ø—‘ $�Ó'ˆÙØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙØ—H‘H˜Y¨Ó+ˆEà—	‘	˜&¨�	Ó.€IÙÜ�I‰IÐAÀ9×CUÑCUÓCWÓXˆÙØ—7‘7˜1“:ˆDÙØ�y‰y˜¨°	Ð':ˆyÓ;ˆÙØ—(‘(˜9 bÓ)ˆCÜ—	‘	Ð0°#Ó6ˆAÙØ—w‘w˜q“z�à—)‘)˜E¬"¯*©*°XÓ*>�)Ó?€KÙØ—i‘i ¬b¯j©jÐ9IÓ.J�iÓKˆÚØ ×)Ñ)¨#Ó.ò 	CˆEØ—I‘I˜f bÓ)ˆEÜ�y‰yÐGÈÔPR×PTÑPTÕUØŸ™¨T˜Ó2ÒJ°e·k±kÀ#Ó6FÀrÑ6J�Ø×'Ñ'¨Ô/Ü  3™J¨¯©°cÓ):Ñ:�EØ×"Ñ" Q u g¨R°¨w°aÐ#8Ô9Ø×"Ñ"¨U¸5Ñ#AÕBð	Cð ˆØ ×)Ñ)ò 	&ˆEÜ�u˜fÔ%¨%¯*©*¸Ò*?Ø—‘˜T¤C¨£JÑ.°Ñ5Õ6Ü˜ 
Ô+Ü Ó&�Ü—f‘f˜V S¨#Ó.×4Ñ4Ó6�ÚØ—L‘L Õ%Ü˜E¤3Õ'Ø—k‘k“m�ÚØ—L‘L Õ%ð	&ð —+‘+˜eÓ$ˆÜ—&‘&˜ F¨GÓ4×:Ñ:Ó<ˆà�$˜ÑP[¤§¡¨KÀeÔ!LÐcÐcÐacÐcÐcrE   c                  ó"	  — g } t        dt        dz   «      D ]œ  }|dk(  r	t        › d�nt        › dt        › d|› �}t	        d|› dt        › d|› �«       	 t        t        |«      «      }|st	        d«        n@t	        d	t        |«      › d
�«       | j                  |«       t        j                  d«       Œž t	        dt        | «      › d
�«       d}d}t        |dd¬«      5 }t        | d«      D ]Í  \  }}	t	        d|› dt        | «      › d|	d   r|	d   d d n|	d   d d › d�dd¬«       	 t        |	d   «      }
t        |
«      \  }}}}|xs |	d   |	d   ||xs |	d   |xs |	d   t        d|dœ}|j!                  t#        j$                  |d¬ «      d!z   «       |dz  }t	        d"«       t        j                  d%«       ŒÏ 	 d d d «       t	        d&|› d'|› d(�«       t        |d)«      5 }t        |«      D ];  \  }}|d*k\  r n1t#        j&                  |«      }t	        d+|dz   › d,|d   d d- › �«       Œ= d d d «       t	        d.«       t)        j*                  g d/¢d¬0«       t        j                  d«       dd l}|j/                  d1«      }|j1                  d2«      j2                  }|j5                  «        |j7                  «        t	        d3|› d
�«       t	        d4«       t)        j*                  d5d6|gddd7d8¬9«      }t	        t        |j8                  «      d:kD  r|j8                  d;d  n|j8                  «       t	        d<«       |j/                  d1«      }|j1                  d=«       |j1                  d>«       |j1                  d?«       |j1                  d@«       |j5                  «        |j7                  «        t)        j*                  g dA¢dd¬B«       t	        dC«       t	        dD|› dE�«       y # t        $ r}t	        d|› �«       Y d }~�Œíd }~ww xY w# t        $ r`}t	        d#|› �«       |j!                  t#        j$                  |	d   |	d   d$|	d   |	d   t        dd$dœd¬ «      d!z   «       |dz  }Y d }~�ŒÊd }~ww xY w# 1 sw Y   �Œ¼xY w# 1 sw Y   �ŒYxY w)FNr   z/zwgk/tzgg/index.htmlz/content/column/z?pageIndex=u   [é¡µç � rj   z] u     â†’ æ— æ•°æ�®ï¼Œå�œæ­¢u     â†’ æ��å�– u    æ�¡u     â†’ å¤±è´¥: g      à?u   
å…± z/tmp/hndt_v2_import.jsonlr   ÚwrU   )rY   rƒ   rf   é(   r[   rR   z...r…   T)ÚendÚflushri   u   é€šçŸ¥å…¬å‘Š)rf   Úpage_urlr}   Úpublish_dateÚsummaryÚ	site_nameÚtagsr�   Fr†   r9   u   âœ“u   âœ— r4   g333333Ó?u   
âœ… JSONL: z (u    æ�¡) â€” ç¡®è®¤å‰�3æ�¡ç¼–ç �:r\   é   z  z. é2   u!   
ðŸ—‘ï¸� åˆ é™¤æ—§ä¹±ç �æ•°æ�®...)Ú	systemctlÚstopÚ
search_app)Úcapture_outputz/mnt/data/search.dbz7DELETE FROM gov_raw WHERE page_url LIKE '%hndt.gov.cn%'u	     åˆ äº† u   
ðŸ“¥ å¯¼å…¥æ–°æ•°æ�®...Úpython3z!/root/gov_crawler/import_jsonl.pyi,  z	/mnt/data)rª   rZ   rT   Úcwdi�  ipþÿÿu   
ðŸ”¨ é‡�å»º FTS...zDELETE FROM gov_searchzDELETE FROM gov_search_v3z4INSERT INTO gov_search(gov_search) VALUES('rebuild')z‚INSERT INTO gov_search_v3(title, site_name, source_url, publish_date) SELECT title, site_name, page_url, publish_date FROM gov_raw)r§   Ústartr©   )rª   rT   u   âœ… æ�œç´¢æœ�åŠ¡å·²é‡�å�¯u   
âœ… å®Œæˆ�ï¼�u    æ�¡ï¼Œç¼–ç �å·²ä¿®å¤�)ÚrangeÚ
PAGE_COUNTrq   Ú	COLUMN_IDÚprintrw   r]   ÚlenÚextendÚ	ExceptionÚtimeÚsleepÚopenÚ	enumeraterš   Ú	SITE_NAMEÚwriterŽ   r�   ÚloadsÚ
subprocessÚrunÚsqlite3ÚconnectÚexecuteÚrowcountÚcommitÚcloseÚstdout)Ú	all_itemsÚpager[   ru   ÚeÚoutput_pathÚcountÚfÚiÚitemrs   rf   ri   r}   r�   ÚrecordÚlineÚrecr¾   ÚdbÚdeletedr\   s                         rD   r   r   œ   s‘  € Ø€Iä�aœ a™Ó(ò ˆØ04¸²	”�Ð+Ñ,Ä$ÀÐGWÔXaÐWbÐbmÐnrÐmsÐ?tˆÜ�˜˜˜a¤
˜|¨2¨c¨UÐ3Ô4ð		Ü ¤¨#£Ó/ˆEÙÜÐ0Ô1ÙÜ�M¤# e£* ¨TÐ2Ô3Ø×Ñ˜UÔ#ô 	�
‰
�3�ðô 
ˆF”3�y“>Ð" $Ð
'Ô(à-€KØ€EÜ	ˆk˜3¨Ô	1ð  °QÜ  ¨AÓ.ò 	‰GˆAˆtÜ�A�a�S˜œ#˜i›.Ð)¨À$ÀwÂ-¨D°©M¸#¸2Ñ,>ÐUYÐZ_ÑU`ÐadÐbdÐUeÐ+fÐfiÐjÐpsÐ{õ  AðÜ  U¡Ó,�Ü4@ÀÓ4FÑ1��t˜W kà"Ò3 d¨7¡mØ $ U¡Ø&Ø$(Ò$8¨D°©LØ$Ò5¨¨W©Ü!*Ø*Ø#.ñ	�ð —‘œŸ
™
 6¸Ô>ÀÑEÔFØ˜‘
�Ü�e”ô �J‰J�s�Oñ?	÷ ôD 
ˆM˜+˜ b¨¨Ð/MÐ
NÔOÜ	ˆk˜3Ó	ð 3 1Ü  “|ò 	3‰GˆAˆtØ�AŠvÙÜ—*‘*˜TÓ"ˆCÜ�B�q˜‘s�e˜2˜c '™l¨3¨BÐ/Ð0Ð1Õ2ð		3÷3ô 
Ð
.Ô/Ü‡N�NÒ6ÀtÕLÜ‡J�Jˆq„MÛØ	�‰Ð.Ó	/€BØ�j‰jÐRÓS×\Ñ\€GØ‡I�I„KØ‡H�H„JÜ	ˆI�g�Y˜dÐ
#Ô$ô 
Ð
%Ô&Ü�‰˜	Ð#FÈÐTØ&*°¸sÈô	U€Aä	œS §¡›]¨SÒ0ˆ!�(‰(�4�5‰/°a·h±hÔ?ô 
Ð
 Ô!Ø	�‰Ð.Ó	/€BØ‡J�JÐ'Ô(Ø‡J�JÐ*Ô+Ø‡J�JÐEÔFØ‡J�Jð Nô Oà‡I�I„KØ‡H�H„Jä‡N�NÒ7ÈÐVXÕYÜ	Ð
%Ô&Ü	ˆO˜E˜7Ð"8Ð
9Õ:øôc ò 	Ü�N 1 #Ð&Ô'Ýûð	ûô8 ò Ü˜˜Q˜C�jÔ!Ø—‘œŸ
™
Ø! '™]Ø $ U¡Ø!Ø$(¨¡LØ# G™}Ü!*Ø*Ø#%ñ	$ð !&ô	'ð *.ñ	.ô 	/ð ˜‘
–ûðú÷' ñ  ú÷F3ñ 3úsd   Á!O&Á5)O&ÃAQ7Ä'A>PÆ%Q7Ç#A
RÏ&	PÏ/PÐPÐ	Q4ÐAQ/Ñ)Q7Ñ/Q4Ñ4Q7Ñ7RÒRÚ__main__)$Ú__doc__ÚsysÚosrH   rŽ   rµ   r¼   ÚpathÚinsertÚdirnameÚabspathÚ__file__rV   rI   r   ÚargparseÚArgumentParserÚ_APÚadd_argumentÚintÚparse_known_argsÚ_ARGSÚ_r¹   rq   r°   Úpagesr¯   rX   r?   rP   r]   rw   rš   r   Ú__name__© rE   rD   ú<module>ræ      sð   ðá Sß *× *× *Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ã Ý ó Ø€h×ÑÓ€Ø × Ñ � ¨a°nÐ Ô EØ×ÑÓ!�€€qà9€	Ø €Ø€	Ø!ŸK™K¨!šOˆU�[Š[°€
ð DØeØ0ñ€ò*€òò6òò09dòx^;ðB ˆzÒÙ…Fð rE   