Ë
    ¡Š£jœ(  ã                   ó  — 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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ej                   «      dkD  r2ej                   d   j#                  «       r eej                   d   «      ndZe� ed ee«      z   «       dZdZdZdZerend	Zd
diZh d£Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"dk(  r e!«        yy)é    N)ÚBeautifulSoupé   z[AutoPg] max_pages=u+   æ·®å�—å¸‚å¤§é€šåŒºäººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šzwww.hndt.gov.cnzhttps://www.hndt.gov.cnÚ6787542é*   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36>)   Ú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_hndt.pyr@   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]*r6   ú\n{3,}ú

)ÚreÚbs4r2   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr2   r?   r@   s      @@@rA   Ú	body_textrM   %   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrB   c                 ó`   — t        j                  | t        d¬«      }d|_        |j                  S )up   GET with forced UTF-8 decoding â€” server omits charset in Content-Type, so requests auto-detects wrong encodingé
   )ÚheadersÚtimeoutúutf-8)ÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚurlÚrs     rA   Úhttp_getrZ   @   s$   € ä�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€MrB   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Úhrefr1   ÚtitleT©rI   ÚspanÚdateú/Úhttp)rX   rc   rf   )r   ÚfindrE   ÚcompileÚfind_allrT   Úget_textÚ
startswithÚBASEÚlstripr9   )
ÚhtmlÚsoupÚitemsr   r   ra   rb   rc   Ú	date_spanrf   s
             rA   Úextract_listrt   G   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ð €LrB   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\   r1   r   Ú	newstitler^   Trd   Úmetar4   ÚArticleTitle)ÚattrsÚcontentre   Úspu(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   ÚPubDatez(\d{4}-\d{2}-\d{2})r   Úwzconzj-fontContentra   rb   z+\.(doc|docx|pdf|xls|xlsx|zip|rar|txt)(\?|$)rg   éÿÿÿÿrh   ú[z](ú))rc   rX   r   r6   rl   z\s+ú rD   rC   F©Úensure_ascii)r   ri   rl   rT   rE   ÚsearchÚgrouprj   rk   ÚIÚsplitrm   rn   ro   Úreplace_withr9   r7   Úhasattrr4   r:   rM   rH   rI   r8   rG   ÚjsonÚdumps)rp   rq   rc   rf   rz   Úattachmentsr   rw   rs   ÚmÚpubÚcontent_divÚa_tagÚahrefÚatextÚtextsÚchildÚtxts                     rA   Ú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ÐcrB   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 l}|j                  d«      }t        «       }	 |j                  dt         f«      }	|	j#                  «       D ]  }
|j%                  |
d   «       Œ 	 |j'                  «        t        | «      }| D �cg c]  }|d   |vsŒ|‘Œ } }t	        dt        |«      › dt        | «      › d�«       | st	        d«       y d}d}t)        |dd¬«      5 }t+        | d«      D ]Å  \  }}|d   }|d   r|d   d d n|}t	        d|› dt        | «      › d|› d�dd ¬!«       	 t        |«      }t-        |«      \  }}}}|xs |d   }|xs |d"   }|||||t         d#|d$œ}|j/                  t1        j2                  |d%¬&«      d'z   «       |dz  }t	        d(«       t        j                  d+«       ŒÇ 	 d d d «       t	        d,|› d-|› d.�«       t	        d/«       dd l}dd l}d0}t7        j8                  g d1¢d ¬2«       |j                  |«      }|j                  d3«      j:                  }|j=                  «        |j'                  «        t	        d4|› d5�«       t	        d6«       d7}t7        j8                  d8||gd d d9d:¬;«      }t	        t        |j>                  «      d<kD  r|j>                  d=d  n|j>                  «       |j@                  dk7  rt	        d>|jB                  d?d  › �«       t	        d@«       |j                  |«      }|j                  dA«       |j                  dB«       |j                  dC«       |j                  dD«       |j=                  «        |j'                  «        t7        j8                  g dE¢d dF¬G«       t	        dH«       t	        dI|› dJ�«       y # t        $ r}t	        d|› �«       Y d }~�Œld }~ww xY w#  Y �Œ^xY wc c}w # t        $ r_}t	        d)|› �«       |d   |d*|d"   |d   t         d#d*d$œ}|j/                  t1        j2                  |d%¬&«      d'z   «       |dz  }Y d }~�Œ•d }~ww xY w# 1 sw Y   �Œ‡xY w)KNr   z/zwgk/tzgg/index.htmlz/content/column/z?pageIndex=u   [é¡µç � rg   z] u     â†’ æ— æ•°æ�®ï¼Œå�œæ­¢u     â†’ æ��å�– u    æ�¡u     â†’ å¤±è´¥: g      à?u   
å…± u    æ�¡åˆ—è¡¨æ•°æ�®r   z/root/search.dbz.SELECT page_url FROM gov_raw WHERE site_name=?rX   z  DB already: z records, to fetch: z itemsz&  All already in DB - nothing to fetchz/tmp/hndt_output_v2.jsonlÚwrR   )rV   rc   é(   r   z...r�   T)ÚendÚflushrf   u   é€šçŸ¥å…¬å‘Š)rc   Úpage_urlrz   Úpublish_dateÚsummaryÚ	site_nameÚtagsrŒ   Fr‚   r6   u   âœ“u   âœ— r1   g333333Ó?u   
âœ… JSONL: z (u    æ�¡)u   
ðŸ—‘ï¸� åˆ é™¤æ—§æ•°æ�®...z/mnt/data/search.db)Ú	systemctlÚstopÚ
search_app)Úcapture_outputz7DELETE FROM gov_raw WHERE page_url LIKE '%hndt.gov.cn%'u     åˆ é™¤äº† u    æ�¡é”™è¯¯æ•°æ�®u   
ðŸ“¥ å¯¼å…¥...z!/root/gov_crawler/import_jsonl.pyÚpython3éd   z	/mnt/data)r¤   rW   rQ   Úcwdi�  ipþÿÿu   âš ï¸� å¯¼å…¥å¼‚å¸¸: iÔþÿÿ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£   rO   )r¤   rQ   u   âœ… æ�œç´¢æœ�åŠ¡å·²é‡�å�¯u   
âœ… å®Œæˆ�ï¼�é‡�æ–°å¯¼å…¥ u    æ�¡ï¼ˆç¼–ç �å·²ä¿®å¤�ï¼‰)"ÚrangeÚMIN_PGrn   Ú	COLUMN_IDÚprintrZ   rt   ÚlenÚextendÚ	ExceptionÚtimeÚsleepÚsqlite3ÚconnectÚsetÚexecuteÚ	SITE_NAMEÚfetchallÚaddÚcloseÚopenÚ	enumerater–   ÚwriterŠ   r‹   ÚosÚ
subprocessÚrunÚrowcountÚcommitÚstdoutÚ
returncodeÚstderr)Ú	all_itemsÚpagerX   rp   rr   Úer²   ÚdbÚexisting_urlsÚcurÚrowÚbeforeÚitÚoutput_pathÚcountÚfÚiÚitemÚshort_titlerc   rf   rz   rŒ   Úrecordr½   Údb_pathÚdeletedÚimport_scriptrY   s                                rA   r   r   ›   sû  € Ø€Iä�aœ !™Ó$ò ˆØ�1Š9Ü�FÐ/Ð0‰Cä�FÐ*¬9¨+°[ÀÀÐGˆCÜ�˜˜˜a¤˜x r¨#¨Ð/Ô0ð
	Ü˜C“=ˆDÜ  Ó&ˆEÙÜÐ0Ô1ÙÜ�M¤# e£* ¨TÐ2Ô3Ø×Ñ˜UÔ#ô 	�
‰
�3�ð#ô& 
ˆF”3�y“>Ð"Ð"2Ð
3Ô4ó Ø	�‰Ð*Ó	+€BÜ“E€MðØ�j‰jÐIÌIÈ<ÓXˆØ—<‘<“>ò 	&ˆCØ×Ñ˜c !™fÕ%ñ	&ð ‡H�H„JÜ�‹^€FØ'ÖJ˜¨2¨e©9¸MÒ+I’ÐJ€IÐJÜ	ˆNœ3˜}Ó-Ð.Ð.BÄ3ÀyÃ>ÐBRÐRXÐ
YÔZÙÜÐ6Ô7Øð .€KØ€EÜ	ˆk˜3¨Ô	1ð %°QÜ  ¨AÓ.ò $	‰GˆAˆtØ�u‘+ˆCØ04°W²˜$˜w™-¨¨Ñ,À3ˆKÜ�A�a�S˜œ#˜i›.Ð)¨¨K¨=¸Ð<À#ÈTÕRðÜ “}�Ü4@ÀÓ4FÑ1��t˜W kØÒ.  g¡�ØÒ+˜t F™|�à"Ø #Ø&Ø$(Ø$Ü!*Ø*Ø#.ñ	�ð —‘œŸ
™
 6¸Ô>ÀÑEÔFØ˜‘
�Ü�e”ô �J‰J�s�OñI$	÷%ôN 
ˆM˜+˜ b¨¨¨uÐ
5Ô6ô 
Ð
(Ô)ßØ#€Gä‡N�NÒ6ÀtÕLØ	�‰˜Ó	!€BØ�j‰jÐRÓS×\Ñ\€GØ‡I�I„KØ‡H�H„JÜ	ˆL˜˜	Ð!1Ð
2Ô3ô 
Ð
ÔØ7€MÜ�‰˜	 =°+Ð>Ø&*°¸sÈô	U€Aä	œS §¡›]¨SÒ0ˆ!�(‰(�4�5‰/°a·h±hÔ?Ø‡|�|�qÒÜÐ% a§h¡h¨t¨u oÐ%6Ð7Ô8ô 
Ð
 Ô!Ø	�‰˜Ó	!€BØ‡J�JÐ'Ô(Ø‡J�JÐ*Ô+Ø‡J�JÐEÔFà‡J�Jð Nô Oà‡I�I„KØ‡H�H„Jô ‡N�NÒ7ÈÐVXÕYÜ	Ð
%Ô&Ü	Ð(¨¨Ð/HÐ
IÕJøôU ò 	Ü�N 1 #Ð&Ô'Ýûð	ûðÚüò KøôB ò Ü˜˜Q˜C�jÔ!à! '™]Ø #Ø!Ø$(¨¡LØ# G™}Ü!*Ø*Ø#%ñ	�ð —‘œŸ
™
 6¸Ô>ÀÑEÔFØ˜‘
–ûðú÷/%ñ %úsp   Á#Q%Á8)Q%Ã0A R
 ÅRÅRÆ'ATÇ0A5RÉ%TÑ%	RÑ.RÒRÒ
RÒ	S?Ò AS:Ó4TÓ:S?Ó?TÔTÚ__main__)#r½   ÚsysrE   rŠ   r°   r¾   ÚpathÚinsertÚdirnameÚabspathÚ__file__rS   rF   r   Ú_SYSr­   ÚargvÚisdigitÚintÚ_MAX_PGr¬   r:   r¶   ÚDOMAINrn   r«   rª   rU   r<   rM   rZ   rt   r–   r   Ú__name__© rB   rA   ú<module>rç      sû   ðã 	Ø Wß *× *× *Ø ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ã Ý ã Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/ð :€	Ø	€Ø €Ø€	Ù‰ €àÐWÐ
X€ò*€òò6òò09dòx{Kð| ˆzÒÙ…Fð rB   