Ë
    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  ej                  dd«      Z
dddd	œZd
ZdZdZdZd„ Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uß   
ç¬¬äºŒå¸ˆé“�é—¨å…³å¸‚ - å…¬ç¤ºå…¬å‘Š
https://www.tmg.gov.cn/info/iIndex.jsp?catalog_id=13&cat_id=13&cur_page=1

CMS: æ–°ç–†å…µå›¢ä¿¡æ�¯å…¬å¼€å¹³å�° (å�Œbtnsss)
JSåˆ†é¡µ: pageCount=181, 16æ�¡/é¡µ
catalog_id=13 å…¬ç¤ºå…¬å‘Š
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbzoMozilla/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.9zhttps://www.tmg.gov.cn/)z
User-AgentzAccept-LanguageÚRefererzhttps://www.tmg.gov.cnz>https://www.tmg.gov.cn/info/iIndex.jsp?catalog_id=13&cat_id=13Útmg_tzggé   c                 óä   — t        | d«      }|j                  d«      }g }t        |«      D ]7  \  }}d|z  }|j                  |t	        |«      f«       |j                  |«       Œ9 t	        |«      |fS )z9Replace <table> with placeholders to preserve HTML tablesúhtml.parserÚtablez___TBL_%d___)r   Úfind_allÚ	enumerateÚappendÚstrÚreplace_with)Úhtml_strÚtbl_soupÚtablesÚreplacementsÚiÚtbÚkeys          ú#/root/gov_crawler/crawl_tmg_tzgg.pyÚextract_table_tagsr      sx   € ä˜X }Ó5€HØ×Ñ˜wÓ'€FØ€LÜ˜6Ó"ò ‰ˆˆ2Ø˜qÑ ˆØ×Ñ˜S¤# b£'˜NÔ+Ø
�‰˜Õðô ˆx‹=˜,Ð&Ð&ó    c                 óÐ   — 	 t        j                  | t        d¬«      }||_        |j                  S # t
        $ r+}t        d| ›d|›�t        j                  ¬«       Y d }~y d }~ww xY w)Né   )ÚheadersÚtimeoutz  FETCH ERROR z: ©Úfile)	ÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderr)Úurlr#   ÚrÚes       r   Úfetchr,   &   sO   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆøÜò Ýª©QÐ/´c·j±jÕAÜûðús   ‚.1 ±	A%º!A Á A%c                 ó2  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]Ý  }|j                  dd¬«      }|j                  d«      }|r|r|j                  d	«      sŒ=|d	   j	                  «       }|j                  d
¬«      }t        j                  dd|«      j	                  «       }|rt        |«      dk  rŒ˜|j                  d
¬«      d d }	|j                  d«      r|nt        |z   }
|j                  |
||	dœ«       Œß |S )NÚlxmlÚdivzgk-nr-ty)Úclass_ÚliÚazgk-brÚspanÚhrefT©Ústripu   ^[â€¢Â·\s]+Ú r   é
   Úhttp)r)   ÚtitleÚdate)r   Úfindr   r!   r6   Úget_textÚreÚsubÚlenÚ
startswithÚDOMAINr   )ÚhtmlÚitemsÚsoupÚgkr1   r2   Úspr4   r:   r;   Úfull_urls              r   Úparse_list_itemsrI   0   s  € Ø€EÜ˜˜vÓ&€DØ	�‰�5 ˆÓ	,€BÙØˆØ�k‰k˜$Óò ˆØ�G‰G�C ˆGÓ(ˆØ�W‰W�V‹_ˆÙ™ !§%¡%¨¤-ØØ�‰y�‰Ó ˆØ—
‘
 �
Ó&ˆä—‘�~ r¨5Ó1×7Ñ7Ó9ˆÙœ˜E›
 QšØØ�{‰{ ˆ{Ó& s¨Ð+ˆØŸ?™?¨6Ô2‘4¼À¹ˆØ�‰ØØØñ
õ 	ðð$ €Lr   c                 óÈ	  — t        | «      }|sddg |fS t        |d«      }|}|j                  dddi¬«      }|r4|j                  dd«      j	                  «       r|d   j	                  «       }n)|j                  d«      }|r|j                  d	¬
«      }|r|}d}|j                  dddi¬«      }	|	r\|	j                  dd«      j	                  «       r<t        j                  d|	d   «      }
|
r!|
j                  d«      j                  dd«      }|sd|j                  d«      }|rQt        j                  dt        |«      t        j                  «      }
|
r!|
j                  d«      j                  dd«      }|s9t        j                  d|«      }
|
r!|
j                  d«      j                  dd«      }|j                  d«      }d}g }|�r)|j                  dd	¬«      D ]­  }|d   j	                  «       }t        j                  d|t        j                  «      sŒ<|j                  d	¬
«      xs |j                  d«      d   }|j!                  d«      r|nt"        |z   }|j%                  ||dœ«       d|›d|›d�}|j'                  |«       Œ¯ t        |«      }t)        |«      \  }}t        |d«      }|j                  dd g«      D ]  }|j+                  «        Œ |j                  g d!¢«      D ]  }|j-                  «        Œ |j                  d"«      D ]$  }|j/                  d#d$«       |j-                  «        Œ& |j                  d%«      D ]$  }|j/                  d#d&«       |j-                  «        Œ& |j                  d'«      D ]  }|j'                  d&«       Œ |j                  dd(¬)«      }t        j0                  d*d$|«      j	                  «       }|D ]  \  }}|j                  |d$|z   d$z   «      }Œ |sÈ|j                  dd	¬«      D ]²  }|d   j	                  «       j3                  «       }t        j                  d+|t        j                  «      sŒJ|j                  d	¬
«      xs |j                  d«      d   }|d   j	                  «       }|j!                  d«      s	t"        |z   }|j%                  ||dœ«       Œ´ |rt5        |j	                  «       «      d,k  r	d-| ›d.|›d/�}||||fS )0Nr7   r.   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentz
div.con-ttTr5   ÚPubDatez(\d{4}[-/]\d{2}[-/]\d{2})é   ú/ú-zdiv.file-tableu1   å�‘å¸ƒæ—¥æœŸ.*?<td[^>]*>(\d{4}[-/]\d{2}[-/]\d{2})z'(\d{4}[-/]\d{2}[-/]\d{2})\s*\d{2}:\d{2}z
div.con-nrr2   )r4   r4   z+\.(docx?|pdf|pptx?|xlsx?|jpg|png|gif)($|\?)éÿÿÿÿr9   )r)   rL   ú[z](ú)r	   ÚscriptÚstyle)r3   ÚfontÚbÚstrongr   ÚemÚuÚpr   z

r/   ú
ÚbrF)Ú	separatorr6   z\n{3,}z'\.(docx?|pdf|pptx?|xlsx?|zip|rar)($|\?)é   z<p><a href="z">z</a></p>)r,   r   r<   r!   r6   Ú
select_oner=   r>   ÚsearchÚgroupÚreplacer   ÚDOTALLr   Ú
IGNORECASEÚsplitrA   rB   r   r   r   Ú	decomposeÚunwrapÚinsertr?   Úlowerr@   )r)   Útitle_from_listrC   rE   Ú
full_titleÚ
meta_titleÚcon_ttÚtÚpub_dateÚmeta_pubÚmÚ
file_tableÚbodyÚcontent_htmlÚattachmentsÚa_tagÚhÚfnameÚ
attach_urlÚmd_linkÚ	body_htmlÚtable_markersÚ	body_soupÚtagr^   Údr`   r   Útbl_htmls                                r   Úget_contentr…   K   s”  € Ü�‹:€DÙØ�2�r˜?Ð*Ð*ä˜˜vÓ&€Dð !€JØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n Y°Ó3×9Ñ9Ô;Ø 	Ñ*×0Ñ0Ó2‰
à—‘ Ó.ˆÙØ—‘ d�Ó+ˆAÙØ�
ð €HØ�y‰y˜¨°	Ð':ˆyÓ;€HÙ�H—L‘L ¨BÓ/×5Ñ5Ô7Ü�I‰IÐ2°H¸YÑ4GÓHˆÙØ—w‘w˜q“z×)Ñ)¨#¨sÓ3ˆHÙØ—_‘_Ð%5Ó6ˆ
ÙÜ—	‘	ÐNÔPSÐT^ÓP_Ôac×ajÑajÓkˆAÙØŸ7™7 1›:×-Ñ-¨c°3Ó7�ÙÜ�I‰IÐ@À$ÓGˆÙØ—w‘w˜q“z×)Ñ)¨#¨sÓ3ˆHð �?‰?˜<Ó(€DØ€LØ€Kâà—]‘] 3¨T�]Ó2ò 	,ˆEØ�f‘×#Ñ#Ó%ˆAÜ�y‰yÐGÈÌBÏMÉMÕZØŸ™¨T˜Ó2ÒF°a·g±g¸c³lÀ2Ñ6F�Ø"#§,¡,¨vÔ"6™Q¼FÀQ¹J�
Ø×"Ñ"¨:¸uÑ#EÕFÚ(-ªzÐ:�Ø×"Ñ" 7Õ+ð	,ô ˜“Iˆ	Ü#5°iÓ#@Ñ ˆ	�=ä! )¨]Ó;ˆ	Ø×%Ñ% x°Ð&9Ó:ò 	ˆCØ�M‰M�Oð	à×%Ñ%Ò&UÓVò 	ˆCØ�J‰J�Lð	à×#Ñ# CÓ(ò 	ˆAØ�H‰H�Q˜ÔØ�H‰H�Jð	ð ×#Ñ# EÓ*ò 	ˆAØ�H‰H�Q˜ÔØ�H‰H�Jð	ð ×$Ñ$ TÓ*ò 	"ˆBØ�O‰O˜DÕ!ð	"ð !×)Ñ)°B¸eÐ)ÓDˆÜ—v‘v˜i¨°Ó>×DÑDÓFˆà*ò 	Q‰MˆC�Ø'×/Ñ/°°V¸hÑ5FÈÑ5OÓP‰Lð	Qñ Ø—]‘] 3¨T�]Ó2ò 	GˆEØ�f‘×#Ñ#Ó%×+Ñ+Ó-ˆAÜ�y‰yÐCÀQÌÏÉÕVØŸ™¨T˜Ó2ÒF°a·g±g¸c³lÀ2Ñ6F�Ø" 6™]×0Ñ0Ó2�
Ø!×,Ñ,¨VÔ4Ü!'¨*Ñ!4�JØ×"Ñ"¨:¸uÑ#EÕFð	Gñ œ3˜|×1Ñ1Ó3Ó4°rÒ9øÚ7:ºJÐGˆà˜ ;°
Ð:Ð:r   c                  ó<  — dd l } | j                  «       }|j                  dt        dd¬«       |j	                  «       }dd l}|j                  t        «      }|j                  d«       |j                  d«       |j                  «       }|j                  dt        f«       |j                  «       d   }|dkD  }|j                  dkD  r|j                  n	|rdnt        }t        d	t        |||fz  t        j                   ¬
«       d}	t#        d|dz   «      D �]  }
|
dk(  rt$        nt$        d|
z  z   }t'        |«      }|st        d|
z  t        j                   ¬
«       ŒGt)        |«      }|s!t        d|
z  t        j                   ¬
«        �n¡t        d|
t+        |«      fz  t        j                   ¬
«       |D �]Z  }|j                  d|d   t        f«       |j                  «       rŒ0t-        |d   |d   «      \  }}}}|j/                  «       rt+        |j/                  «       «      dk  r"t        d|d d z  t        j                   ¬
«       Œ•|d   xs |}	 |j                  dt        |d   |d d ||d d |d   dt1        j2                  |d¬«      f«       |j4                  }|d d j7                  dd«      }|j                  d||d d t        |d d f«       |	dz  }	t        d|d d |t+        |«      t+        |«      fz  t        j                   ¬
«       �Œ] t;        j<                  d!«       �Œ |j?                  «        |jA                  «        t        d"|	z  t        j                   ¬
«       y # t8        $ r)}t        d |z  t        j                   ¬
«       Y d }~�Œâd }~ww xY w)#Nr   z--pageszNumber of pages to crawl)ÚtypeÚdefaultÚhelpzPRAGMA journal_mode=WALzPRAGMA busy_timeout=30000z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?rQ   u7   ç«™ç‚¹ %s: å·²æœ‰ %d æ�¡, incremental=%s, çˆ¬å�– %d é¡µr   z&cur_page=%du     ç¬¬%dé¡µ èŽ·å�–å¤±è´¥u     ç¬¬%dé¡µ æ— æ�¡ç›®u     ç¬¬%dé¡µ: %d æ�¡z7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?r)   r:   rb   u       ! è·³è¿‡ç©ºæ­£æ–‡: %sé2   r;   z˜INSERT INTO gov_raw (site_name, page_url, title, content, publish_date, source_url, status, attachments)
                       VALUES (?,?,?,?,?,?,?,?)iô  ÚsyncedF)Úensure_asciiéÈ   r_   ú zJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z     + %s (%s) body:%dB attach:%du       ! å…¥åº“å¤±è´¥: %sg333333Ó?u   
å®Œæˆ�! æ–°å¢ž %d æ�¡)!ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚsqlite3Úconnectr   ÚexecuteÚcursorÚ	SITE_NAMEÚfetchoneÚpagesÚ	MAX_PAGESr&   r'   r(   ÚrangeÚLIST_URLr,   rI   r@   r…   r6   ÚjsonÚdumpsÚ	lastrowidrf   r%   ÚtimeÚsleepÚcommitÚclose)r�   ÚparserÚargsr”   ÚconnÚcÚexistingÚincrementalÚ	max_pagesÚall_newÚpgÚpage_urlrC   rD   ÚitrO   rs   ry   ro   r;   Únew_idÚsummaryr+   s                          r   Úmainr²   ©   s^  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐ=WÐÔXØ×ÑÓ€DãØ�?‰?œ9Ó%€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ø�‰‹€Aà‡I�IÐ>ÄÀÔMØ�z‰z‹|˜A‰€HØ˜Q‘,€Kà"Ÿj™j¨1šn�—
’
¹±1Ì€IÜ	Ð
CÄyÐRZÐ\gÐirÐFsÑ
sÔz}÷  {Eñ  {Eõ  Fà€GÜ�A�y 1‘}Ó%ó +ˆØ! Qšw•8¬H°~ÈÑ7JÑ,JˆÜ�X‹ˆÙÜÐ+¨bÑ0´s·z±zÕBØä  Ó&ˆÙÜÐ(¨2Ñ-´C·J±JÕ?ÚÜÐ" b¬#¨e«*Ð%5Ñ5¼C¿J¹JÕGàó 	EˆBØ�I‰IÐOÐRTÐUZÑR[Ô]fÐQgÔhØ�z‰zŒ|Øä9DÀRÈÁYÐPRÐSZÑP[Ó9\Ñ6ˆG�X˜{¨JØ—=‘=”?¤c¨'¯-©-«/Ó&:¸RÒ&?ÜÐ1°J¸sÀ°OÑCÌ#Ï*É*ÕUØØ�f‘:Ò) ˆDðEØ—	‘	ð3ä  5¡	¨:°d°sÐ+;¸WÀdÈ3ÈBÀiØ˜‘Y ¬$¯*©*°[ÈuÔ*UðWôð Ÿ™�à! $ 3˜-×/Ñ/°°cÓ:�Ø—	‘	Ø`Ø˜Z¨¨Ð-¬y¸'À$À3¸-ÐHôð ˜1‘�ÜÐ8¸JÀsÈ¸OÈTÔSVÐW^ÓS_ÔadÐepÓaqÐ;rÑrÔy|÷  zDñ  zD÷  Eð5	Eô< 	�
‰
�3ŽðW+ðZ 	‡K�K„MØ‡J�J„LÜ	Ð
# gÑ
-´C·J±JÖ?øô ò EÜÐ.°Ñ2¼¿¹×DÓDûðEús   ÉB<M)Í)	NÍ2NÎNÚ__main__)zutf-8)Ú__doc__r'   Úosr>   r¡   rž   r    Úbs4r   Úgetenvr   r"   rB   r�   r˜   r›   r   r,   rI   r…   r²   Ú__name__© r   r   ú<module>rº      s†   ðñ÷ )× (× (Ý àˆB�I‰I�kÐ#8Ó9€	ð DØ'Ø(ñ€ð
 
"€ØK€Ø€	Ø€	ò	'óòò6[;ò|C@ðL ˆzÒÙ…Fð r   