Ë
    b}j¶%  ã                   óT  — 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 ej                  j                  dd«       ddlmZ ddlZdZd„ Zd	Zd
dddœZdZ ej0                  «       Zej4                  j7                  e«       d„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)u6  å…´ä»�å¸‚äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šçˆ¬è™«

TRS CMS (æ‹“å°”æ€�)
åˆ—è¡¨: /xwzx/tzgg/index.html (327é¡µ, ~4896æ�¡, 2013~2026)
      ç¬¬Né¡µ: index_{N-1}.html (createPageHTML(327,0,"index","html",4896))
è¯¦æƒ…: /xwzx/tzgg/YYYYMM/tYYYYMMDD_XXXXX.html
å†…å®¹: font#Zoom > div.trs_editor_view > p
æ—¥æœŸ: meta PubDate
é    N)ÚBeautifulSoup)Úurljoinz/root/gov_crawler)Úpush_to_searchdbz/root/search.dbc                  óÊ   — 	 t        j                  t        d¬«      } | j                  d«       | j                  d«       | S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   ©ÚtimeoutzPRAGMA busy_timeout=30000zPRAGMA journal_mode=WALz  WARN DB connect: )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚ	ExceptionÚprint)ÚconnÚes     ú$/root/gov_crawler/crawl_gzxr_tzgg.pyÚget_db_connectionr      sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttps://www.gzxr.gov.cnzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageõ   å…´ä»�å¸‚-é€šçŸ¥å…¬å‘Šc                 óV   — t         j                  | d¬«      }d|_        |j                  S )Né   r   zutf-8)ÚsessÚgetÚencodingÚtext)ÚurlÚresps     r   Ú
fetch_pager   7   s%   € Ü�8‰8�C ˆ8Ó$€DØ€D„MØ�9‰9Ðó    c                 óæ  — t        | d«      }g }|j                  d«      }|s|S |j                  dd¬«      D ]·  }|j                  dd¬«      }|sŒ|j	                  d	d
«      }d|vrŒ0|j	                  dd
«      xs |j                  d¬«      }|sŒY|j                  d«      r|nt        t        |«      }|j                  d«      }	|	r|	j                  d¬«      nd
}
|j                  |||
dœ«       Œ¹ |S )u   è§£æž�åˆ—è¡¨é¡µúhtml.parserzdiv.right_list dl dd ulÚliF©Ú	recursiveÚaT©Úhrefr'   Ú ÚtzggÚtitle©ÚstripÚhttpÚi)r*   r   Úpub_date)
r   Ú
select_oneÚfind_allÚfindr   Úget_textÚ
startswithr   ÚBASE_URLÚappend)ÚhtmlÚsoupÚitemsÚulr"   r%   r'   r*   Ú
detail_urlÚi_tagr/   s              r   Ú
parse_listr=   =   sþ   € ä˜˜}Ó-€DØ€Eà	�‰Ð2Ó	3€BÙØˆà�k‰k˜$¨%ˆkÓ0ò ˆØ�G‰G�C˜dˆGÓ#ˆÙØà�u‰u�V˜RÓ ˆØ˜ÑØð —‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆÙØà!Ÿ_™_¨VÔ4‘T¼'Ä(ÈDÓ:Qˆ
ð —‘˜“ˆÙ16�5—>‘>¨�>Ô-¸Bˆà�‰ØØØ ñ
õ 	ð)ð4 €Lr   c           
      ó‚  — | d   }	 t        |«      }t	        |d«      }|j                  d	«      }|r|j                  d
¬«      n| d   }|j                  dddi¬«      }d}|r=|j                  d«      r,t        j                  d|d   «      }	|	r|	j                  d«      }|s| j                  dd«      }|j                  dd¬«      }
d}|
�rõg }|
j                  g d¢d
¬«      D �]â  }|j                  dk(  �r2|j                  d«      rŒ&|j                  d«      rŒ8g }|j                  D �]˜  }t        |t        «      r8|j!                  «       }|sŒ'|j#                  t%        j&                  |«      «       ŒL|j                  dk(  r|j#                  d«       Œm|j                  dk(  ra|j                  dd«      }|j                  dd«      xs d}|sŒ§|j#                  dt)        ||«      ›d t%        j&                  |«      ›d!�«       ŒÝ|j                  d"k(  re|j                  d#d«      }|j                  d
¬«      }|s�Œ|s�Œt)        ||«      }|j#                  d$|›d%t%        j&                  |«      ›d&�«       �ŒQ|j                  d'v s�Œa|j#                  t%        j&                  |j                  d(d
¬«      «      d(z   «       �Œ› dj+                  |«      }t        j,                  d)d(|«      j!                  «       }t        j,                  d*d|«      }|s�Œ3|j#                  |«       �ŒF|j                  dk(  r|j#                  t        |«      «       �Œq|j                  dk(  s�Œ‚|j                  dd«      }|j                  dd«      xs d}|s�Œ®|j#                  d+t)        ||«      ›d t%        j&                  |«      ›d,�«       �Œå g }d-}|D ]z  }t        j,                  d.d|«      }t/        |«      dk(  xr t        j0                  d/|«      du}|r$|r|d0xx   |z  cc<   n|j#                  |«       d
}Œh|j#                  |«       d-}Œ| |}g }|D ][  }|j3                  d1«      s"|j3                  d2«      s|j3                  d3«      r|j#                  |«       ŒH|j#                  d4|z  «       Œ] d5j+                  |«      }g }|
r¸|
j                  d"d
¬6«      D ]¢  }|j                  d#d«      }|j                  d
¬«      } |sŒ*| sŒ-t        j                  d7|t        j4                  «      sŒS|j3                  d8«      st)        ||«      }|j#                  | |d9œ«       |d:|›d%t%        j&                  | «      ›d;�z  }Œ¤ ||||fS # t        $ r4}t        d|› d|› �«       | d   | j                  dd«      dg fcY d}~S d}~ww xY w)<u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r*   r/   r(   Nr!   Úh2Tr+   ÚmetaÚnameÚPubDate)ÚattrsÚcontentz(\d{4}-\d{2}-\d{2})é   ÚfontÚZoom)Úid)ÚpÚtableÚimgr#   rI   rJ   Úbrz<br/>rK   ÚsrcÚaltz
<img src="z" alt="z"/>r%   r'   z	<a href="z" target="_blank">z</a>)ÚspanÚstrongÚbÚemú z[ \t]+z +<br/>z<p><img src="z"/></p>Fz<[^>]+>z[\u4e00-\u9fff]éÿÿÿÿz<tablez<pz<imgz	<p>%s</p>z

r&   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r-   )rA   r   z

<p><a href="z</a></p>)r   r   r   r   r   r2   r3   ÚreÚsearchÚgroupr1   rA   Úfind_parentÚchildrenÚ
isinstanceÚstrr,   r6   Úhtml_libÚescaper   ÚjoinÚsubÚlenÚmatchr4   ÚI)!Úitemr   r7   r   r8   r?   r*   r@   r/   ÚmÚ	font_zoomrD   ÚpartsÚelemÚfragsÚchildÚtrM   rN   Úa_hrefÚa_textÚ	full_hrefÚtxtÚmergedÚlast_singlerI   Ú_plainÚ	is_singleÚfinalÚattachmentsr%   r'   r   s!                                    r   Úfetch_detailru   c   s"  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð 
�‰�4‹€BÙ')ˆB�K‰K˜dˆKÔ#¨t°G©}€Eð �9‰9�V F¨IÐ#6ˆ9Ó7€DØ€HÙ�—‘˜Ô#Ü�I‰IÐ,¨d°9©oÓ>ˆÙØ—w‘w˜q“zˆHáØ—8‘8˜J¨Ó+ˆð
 —	‘	˜& V�	Ó,€IØ€GÚØˆØ×&Ñ&Ò'<ÈÐ&ÓMó &	pˆDØ�y‰y˜CÓØ—9‘9˜S”>ØØ×#Ñ# GÔ,ØØ�Ø!Ÿ]™]ó ]�EÜ! %¬Ô-Ø!ŸK™K›M˜ÚØ!ŸL™L¬¯©¸Ó);Õ<ØŸ™ tÒ+ØŸ™ WÕ-ØŸ™ uÒ,Ø#Ÿi™i¨¨rÓ2˜Ø#Ÿi™i¨¨rÓ2Ò8°b˜ÚØ!ŸLšLÄwÈsÐTWÕGXÔZb×ZiÑZiÐjmÕZnÐ)oÕpØŸ™ sÒ*Ø!&§¡¨6°2Ó!6˜Ø!&§¡°d Ó!;˜Û!£fÜ(/°°VÓ(<˜IØ!ŸLšLÒR[Ô]e×]lÑ]lÐmsÕ]tÐ)uÖvØŸ™Ð'DÓDØŸ™¤X§_¡_°U·^±^ÀCÈt°^Ó5TÓ%UÐX[Ñ%[Ö\ð']ð( —g‘g˜e“n�Ü—f‘f˜Y¨¨SÓ1×7Ñ7Ó9�Ü—f‘f˜Z¨°#Ó6�ÛØ—L‘L Ö%Ø—‘˜gÒ%Ø—‘œS ›YÖ'Ø—‘˜eÔ#Ø—h‘h˜u bÓ)�Ø—h‘h˜u bÓ)Ò/¨R�ÛØ—L’LÄgÈcÐSVÕFWÔYa×YhÑYhÐilÕYmÐ!nÖoðM&	pðP ˆØˆØò 	$ˆAÜ—V‘V˜J¨¨AÓ.ˆFÜ˜F› qÑ(Ò]¬R¯X©XÐ6HÈ&Ó-QÐY]Ð-]ˆIÙÙØ˜2“J !‘O”Jà—M‘M !Ô$Ø"‘à—‘˜aÔ Ø#‘ð	$ð ˆàˆØò 	.ˆAØ�|‰|˜HÔ%¨¯©°dÔ);¸q¿|¹|ÈFÔ?SØ—‘˜Q•à—‘˜[¨1™_Õ-ð		.ð
 —+‘+˜eÓ$ˆð €KÙØ×#Ñ# C¨dÐ#Ó3ò 	lˆAØ—5‘5˜ Ó$ˆDØ—:‘: D�:Ó)ˆDÚš¤§¡Ð+PÐRVÔXZ×X\ÑX\Õ!]Ø—‘ vÔ.Ü" 3¨Ó-�DØ×"Ñ"¨D¸Ñ#>Ô?ÙÊtÔU]×UdÑUdÐeiÕUjÐkÑk‘ð	lð �(˜G [Ð0Ð0øôQ ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡V Ö	V>Ö
)V9Ö3V>Ö9V>c                  ó  — t        j                  d¬«      } | j                  dt        dd¬«       | j	                  «       }|j
                  dkD  r|j
                  nd}g }t        d|dz   «      D ]–  }|dk(  r
t        › d	�}nt        › d
|dz
  › d�}t        d|› d|› d�«       	 t        |«      }t        |«      }|st        d«        n@t        dt        |«      › d�«       |j                  |«       t        j                  d«       Œ˜ t        dt        |«      › d�«       g }	t!        |«      D ]Å  \  }
}t        d|
dz   › dt        |«      › d|d   d d › d�«       t#        |«      \  }}}}|s|d   }t%        j&                  dd|«      j)                  «       }|r|d d nd}|d   |d   ||||t*        |rt-        j.                  |d¬«      ndd œ}|	j1                  |«       t        j                  d!«       ŒÇ t        d"t        |	«      › d#�«       t3        |	t*        «       t5        «       }|rw	 |j7                  d$t*        f«      }|j9                  «       d   }|j7                  d%t*        f«      }|j9                  «       d   }t        d&|› d'|› d(�«       |j;                  «        t        d*«       y # t        $ r}t        d|› �«       Y d }~ �ŒÂd }~ww xY w# t        $ r}t        d)|› �«       Y d }~Œ^d }~ww xY w# |j;                  «        w xY w)+Nr   )Údescriptionz--pagesr   u   é¡µæ•°ï¼Œ0=å…¨é‡�327é¡µ)ÚtypeÚdefaultÚhelpiG  rE   z/xwzx/tzgg/index.htmlz/xwzx/tzgg/index_z.htmlzPage ú/z...z  empty, stopz  found z itemsz  WARN: g333333Ó?z
Total list: z  [z] r*   é(   z\s+rS   iô  r(   r   F)Úensure_ascii)r   Ú
source_urlr*   rD   Úsummaryr/   Ú	site_namert   gš™™™™™É?z
Inserting z records...z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?zDB: z rows (FTS: z rows)z  WARN DB query: ÚDONE)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚpagesÚranger5   r   r   r=   r`   Úextendr   ÚtimeÚsleepÚ	enumerateru   rU   r_   r,   Ú	SITE_NAMEÚjsonÚdumpsr6   r   r   r   ÚfetchoneÚclose)ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpager   r7   r9   r   Úrecordsr.   rc   r*   r/   rD   rt   r   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                         r   Úmainrœ   Ô   s
  € Ü×$Ñ$Ð1IÔJ€FØ
×Ñ˜	¬°QÐ=VÐÔWØ×ÑÓ€Dà"Ÿj™j¨1šn�—
’
°#€IØ€Iä�a˜ Q™Ó'ò ˆØ�1Š9Ü�JÐ3Ð4‰Cä�JÐ/°°Q±¨x°uÐ=ˆCä��d�V˜1˜Y˜K sÐ+Ô,ð
	Ü˜c“?ˆDÜ˜tÓ$ˆEÙÜ˜Ô'ÙÜ�HœS ›Z˜L¨Ð/Ô0Ø×Ñ˜UÔ#ô 	�
‰
�3�ð%ô( 
ˆNœ3˜y›>Ð*¨&Ð
1Ô2ð €GÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDÜ0<¸TÓ0BÑ-ˆˆx˜ +áØ˜‘MˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙ#*�'˜$˜3‘-°ˆð ˜‘;Ø˜u™+ØØØØ Ü"ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ˆð 	�‰�vÔÜ�
‰
�3�ð)ô. 
ˆLœ˜W›˜ kÐ
2Ô3Ü�WœiÔ(ô Ó€DÙð	Ø—\‘\Ø@Ä9À,óˆFð Ÿ™Ó)¨!Ñ,ˆIØ—\‘\ØCÄiÀ\óˆFð Ÿ™Ó)¨!Ñ,ˆIÜ�D˜˜ <°	¨{¸&ÐAÔBð �J‰JŒLä	ˆ&…Møôk ò 	Ü�H˜Q˜C�.Ô!Þûð	ûô` ò 	+ÜÐ% a SÐ)×*Ñ*ûð	+ûð �J‰J�LúsI   Â"#J+Ã)J+È)A&K Ê+	KÊ4K	Ë	KË	K2ËK-Ë(K5 Ë-K2Ë2K5 Ë5LÚ__main__)!Ú__doc__ÚrequestsrU   ÚsysrŽ   rŠ   Úosr‚   r7   r\   Úbs4r   Úurllib.parser   ÚpathÚinsertÚcrawler_libr   r
   r   r   r5   ÚHEADERSr�   ÚSessionr   ÚheadersÚupdater   r=   ru   rœ   Ú__name__© r   r   ú<module>r­      s½   ðñó Û 	Û 
Û Û Û 	Û Û Ý Ý  à ‡�‡��Ð&Ô 'Ý (Û à
€òð %€ð DØOØ0ñ€ð %€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òò#òLn1òbLð^ ˆzÒÙ…Fð r   