Ë
     E¶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Zddl	m
Z
 ddlmZ dZdZdZdZd	Zd
ZdZdZdddœZg d¢ZdddddddœZd„ Zd„ Zd„ Zd„ Zd d„Zd„ Zd„ Zedk(  r e«        yy)!uÏ  
çƒŸå�°å¸‚äººæ°‘æ”¿åºœ - è¡Œæ”¿è®¸å�¯å…¬ç¤º çˆ¬è™« (col43294)
CMS: JCMS (jpaas-publish-server)
List: API /api-gateway/jpaas-publish-server/front/page/build/unit
       paramJson={"pageNo":N,"pageSize":15}
Detail: /col/col43294/art/YYYY/art_XXX.html

2026-08-10 ä¿®å¤�: æ­£æ–‡æ”¹ä¸ºä¿�ç•™å®Œæ•´ HTML (è¡¨æ ¼/é“¾æŽ¥/å›¾ç‰‡åŽŸæ ·ä¿�ç•™),
ä¸�å†�è½¬ markdown (| --- |), ä¸�å†�é‡�å¤�æ��å�– (table å�ªå¤„ç�†ä¸€æ¬¡)ã€‚
é™„ä»¶é“¾æŽ¥å®Œæ•´ä¿�ç•™ (document/download API)ã€‚
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu+   çƒŸå�°å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-è¡Œæ”¿è®¸å�¯å…¬ç¤ºu   è¡Œæ”¿è®¸å�¯å…¬ç¤ºu   å±±ä¸œzhttps://www.yantai.gov.cnzPhttps://www.yantai.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unité   é   zoMozilla/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.9)z
User-AgentzAccept-Language)	u   ã€�æ‰“å�°æœ¬é¡µã€‘u   ã€�å…³é—­çª—å�£ã€‘u   æ‰“å�°æœ¬é¡µu   å…³é—­çª—å�£u   è½¬è½½åˆ†äº«ï¼šu   æµ�è§ˆé‡�ï¼šu   ç›¸å…³é™„ä»¶ï¼šu   ç›¸å…³ç¨¿ä»¶ï¼šu   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€Ú1Ú43294ÚbulidstaticÚcolumnu   å½“å‰�æ �ç›®åˆ—è¡¨Úuo2n7cvvGR8iPKdzxdBuu)ÚwebIdÚpageIdÚ	parseTypeÚpageTypeÚtagIdÚtplSetIdc                 óº   — | s| S | j                  «       } | j                  d«      r| S | j                  d«      rd| z   S | j                  d«      r| S t        || «      S )u"   ç›¸å¯¹/å��è®®ç›¸å¯¹ href è½¬ç»�å¯¹)zhttp://zhttps://z//zhttps:)ú#zjavascript:zmailto:)ÚstripÚ
startswithr   )ÚhrefÚ
detail_urls     ú!/root/gov_crawler/crawl_yantai.pyÚ_absr   0   s\   € áØˆØ�:‰:‹<€DØ‡�Ð.Ô/ØˆØ‡��tÔØ˜$‰ÐØ‡�Ð6Ô7ØˆÜ�:˜tÓ$Ð$ó    c                 óx  ‡— t        j                  dd| «      } t        j                  dd| «      } t        j                  dˆfd„| «      } t        j                  dˆfd„| «      } t        j                  dˆfd	„| «      } t        j                  d
d| «      } t        j                  dd| «      } | j                  «       S )uH   æ¸…æ´—æ­£æ–‡ HTML: åŽ» script/style, href/src è½¬ç»�å¯¹, åŽ»å¤šä½™ç©ºè¡Œz<script[\s\S]*?</script>Ú z<style[\s\S]*?</style>z<a\s+href="([^"]*)"c                 ó@   •— dt        | j                  d«      ‰«      z  S )Nz<a href="%s"é   ©r   Úgroup©Úmr   s    €r   ú<lambda>zclean_html.<locals>.<lambda>B   ó   ø€ °>ÄDÈÏÉÐQRËÐU_ÓD`Ñ3`€ r   z<a\s+href='([^']*)'c                 ó@   •— dt        | j                  d«      ‰«      z  S )Nz<a href='%s'r   r   r!   s    €r   r#   zclean_html.<locals>.<lambda>C   r$   r   z<img[^>]*src="([^"]*)"c                 ó–   •— | j                  d«      j                  | j                  d«      t        | j                  d«      ‰«      «      S )Nr   r   )r    Úreplacer   r!   s    €r   r#   zclean_html.<locals>.<lambda>D   s;   ø€ °a·g±g¸a³j×6HÑ6HÈÏÉÐQRËÔUYÐZ[×ZaÑZaÐbcÓZdÐfpÓUqÓ6r€ r   z\sstyle="[^"]*"z\n{3,}z

)ÚreÚsubr   )Úrawr   s    `r   Ú
clean_htmlr+   >   s™   ø€ ä
�&‰&Ð,¨b°#Ó
6€CÜ
�&‰&Ð*¨B°Ó
4€CÜ
�&‰&Ð'Ó)`ÐbeÓ
f€CÜ
�&‰&Ð'Ó)`ÐbeÓ
f€CÜ
�&‰&Ð*Ó,rÐtwÓ
x€CÜ
�&‰&Ð# R¨Ó
-€CÜ
�&‰&�˜F CÓ
(€CØ�9‰9‹;Ðr   c                 óü  — | €yddl }|j                  | «      }|j                  dt        j                  dt        j                  «      i¬«      D ]  }|j                  «        Œ |j                  dt        j                  dt        j                  «      i¬«      D ]  }|j                  «        Œ |j                  t        j                  d«      ¬	«      D ]%  }|j                  «       }|sŒ|j                  «        Œ' t        |«      }t        ||«      }t        j                  d
d|«      }t        j                  dd|«      }t        D ]2  }t        j                  dt        j                  |«      z   dz   d|«      }Œ4 |S )uJ   æ��å�–æ­£æ–‡: ä¿�ç•™ HTML è¡¨æ ¼/é“¾æŽ¥/å›¾ç‰‡, ä¸�è½¬ markdown, ä¸�é‡�å¤�Nr   r   Úclassz((scan|share|qrcode|print|footer|toolbar)©ÚattrsÚidu3   æ‰“å�°æœ¬é¡µ|å…³é—­çª—å�£|åˆ†äº«åˆ°|æ‰«ç �åœ¨æ‰‹æœº)Ústringz^<div[^>]*>z
</div>\s*$z<[^>]*>[^<]*z[^<]*</[^>]*>)ÚcopyÚfind_allr(   ÚcompileÚIÚ	decomposeÚfind_parentÚstrr+   r)   Ú
SKIP_TEXTSÚescape)	Úcontent_divr   r2   ÚdivÚbadÚnodeÚpÚhtml_strÚsks	            r   Úextract_contentrB   J   sQ  € àÐØãØ
�)‰)�KÓ
 €Cð �|‰| 7¬B¯J©JÐ7bÔdf×dhÑdhÓ,iÐ"jˆ|Ókò ˆØ�‰�ðà�|‰| 4¬¯©Ð4_Ôac×aeÑaeÓ)fÐ"gˆ|Óhò ˆØ�‰�ðð —‘¤B§J¡JÐ/eÓ$f�Ógò ˆØ×ÑÓˆÚØ�K‰K�Mðô
 �3‹x€HÜ˜( JÓ/€Hô �v‰v�n b¨(Ó3€HÜ�v‰v�m R¨Ó2€Hô ò \ˆÜ—6‘6˜/¬B¯I©I°b«MÑ9Ð<LÑLÈbÐRZÓ[‰ð\ð €Or   c                 óJ  — g }t        «       }| j                  dd¬«      D �]  }|d   }d|v r¡d|v r�|j                  d«      s6|j                  d«      r
t        |z   }nt        dz   |j	                  d«      z   }|j                  d¬	«      xs |j                  d
«      d   d d }||vsŒˆ|j                  |«       |j                  ||dœ«       Œ®t        j                  d|t        j                  «      sŒÔ|j                  d«      s6|j                  d«      r
t        |z   }nt        dz   |j	                  d«      z   }|j                  d¬	«      xs& |j                  d«      d   j                  d«      d   }||vs�Œ[|j                  |«       |j                  ||dœ«       �Œ‚ |S )NÚaT©r   r   zdocument/downloadzfileUrl=Úhttpú/©r   ú=éÿÿÿÿé   )ÚnameÚurlz&\.(pdf|doc|docx|xls|xlsx|rar|zip|txt)$ú?r   )Úsetr3   r   ÚBASE_URLÚlstripÚget_textÚsplitÚaddÚappendr(   Úsearchr5   )ÚsoupÚattsÚseenrD   r   rL   s         r   Úextract_attachmentsrZ   k   sq  € Ø€DÜ‹5€DØ�]‰]˜3 Tˆ]Ó*ó 9ˆØ�‰yˆØ $Ñ&¨:¸Ñ+=Ø—?‘? 6Ô*Ø—?‘? 3Ô'Ü# d™?‘Dä# c™>¨D¯K©K¸Ó,<Ñ<�DØ—:‘: D�:Ó)ÒE¨T¯Z©Z¸«_¸RÑ-@ÀÀ"Ð-EˆDØ˜4ÒØ—‘˜”Ø—‘ T°$Ñ7Õ8Ü�Y‰YÐ@À$ÌÏÉÕMØ—?‘? 6Ô*Ø—?‘? 3Ô'Ü# d™?‘Dä# c™>¨D¯K©K¸Ó,<Ñ<�DØ—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ˜4ÓØ—‘˜”Ø—‘ T°$Ñ7Ö8ð+9ð, €Kr   c                 óÀ  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        |d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }|s|}d}	|j                  dddi¬	«      }
|
r'|
j                  d
«      r|
d
   j                  «       d d }	|	s>|j                  dddi¬	«      }|r'|j                  d
«      r|d
   j                  «       d d }	|j                  dd¬«      }|s|j                  dd
¬«      }|s|j                  dd¬«      }t        |«      }|rt        || «      }nd}t        |j                  «       «      dk  r$d| › d|› d�}|r|D ]  }|d|d   › d|d   › d�z  }Œ ||	||fS # t
        $ r}d d d g fcY d }~S d }~ww xY w)Né   ©ÚheadersÚtimeoutzutf-8úhtml.parserr   ÚmetarL   ÚArticleTitler.   ÚcontentÚh1TrH   ÚPubDateé
   ÚMakeTimer<   Útext)Úclass_Úmainz<p><a href="z">z</a></p>rM   )ÚrequestsÚgetÚHEADERSÚencodingrh   Ú	Exceptionr   Úfindr   rR   rZ   rB   Úlen)rM   Ú
list_titleÚrÚhtmlÚerW   ÚtitleÚmtrd   Údate_strÚmdÚmt2r;   Úattachmentsrc   rD   s                   r   Úfetch_detailr|   ‡   s  € ð$Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆô ˜˜}Ó-€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEÙØˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆÙØ�i‰i˜ v¨zÐ&:ˆiÓ;ˆÙ�3—7‘7˜9Ô%Ø˜9‘~×+Ñ+Ó-¨c¨rÐ2ˆHð —)‘)˜E¨&�)Ó1€KÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i ¨f�iÓ5ˆä% dÓ+€KáÜ! +¨sÓ3‰àˆä
ˆ7�=‰=‹?Ó˜bÒ à    R¨ w¨hÐ7ˆÙØ ò J�Ø˜\¨!¨E©(¨°2°a¸±i°[ÀÐIÑI‘ðJð �(˜G [Ð0Ð0øôa ò $Ø�T˜4 Ð#Õ#ûð$ús   ‚/G Ç	GÇGÇGÇGc                 óB  — t        t        «      }t        j                  |t        dœd¬«      |d<   t
        j                  j                  |«      }t        dz   |z   }	 | j                  |t        d¬«      }|j                  «       }g }d}		 |j                  di «      j                  dd«      xs d}	|	sg S t        |	d«      }
|
j                  dd
¬«      D �]  }|d   }d|vrd|vrŒ|j                  dd«      xs |j                  d
¬«      }|sŒ;t!        j"                  dd|«      j%                  «       }|j'                  d«      st)        t*        |«      n|}d}|j-                  d«      }|ra|j/                  d«      }|rNt!        j"                  dd|j                  «       «      }t!        j0                  d|«      }|r|j3                  d«      }|j5                  |||dœ«       �Œ |S # t        $ r}t        d|› d	|› �d
¬«       g cY d }~S d }~ww xY w# t        $ r Y �Œmw xY w)N)ÚpageNoÚpageSizeF©Úensure_asciiÚ	paramJsonrN   rK   r]   z  [ERR] list page ú: T©Úflushr   Údatart   r`   rD   rE   r   Úart_z/art/rv   rH   ú\s+ú rF   ÚliÚspanz(\d{4}-\d{1,2}-\d{1,2})r   )rv   rM   Údate)ÚdictÚ
API_PARAMSÚjsonÚdumpsÚPER_PAGEÚurllibÚparseÚ	urlencodeÚLIST_APIrl   rm   ro   Úprintr   r3   rR   r(   r)   r   r   r   rP   r7   rp   rV   r    rU   )ÚsessionÚpageÚparamsÚqsrM   rs   r†   ru   ÚitemsÚ	html_textrW   rD   r   rv   Úfullrx   rŠ   ÚspÚtxtr"   s                       r   Ú
fetch_listr    ¿   s  € Ü”*Ó€FÜŸ*™*°Ä(Ñ%KÐZ_Ô`€Fˆ;ÑÜ	�‰×	Ñ	 Ó	'€BÜ
�S‰.˜2Ñ
€CðØ�K‰K˜¤W°bˆKÓ9ˆØ�v‰v‹xˆð €EØ€IðØ—H‘H˜V RÓ(×,Ñ,¨V°RÓ8Ò>¸Bˆ	ñ Øˆ	Ü˜ MÓ2€DØ�]‰]˜3 Tˆ]Ó*ó FˆØ�‰yˆØ˜Ñ '°Ñ"5ØØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆÙØÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆØ.2¯o©o¸fÔ.EŒw”x Ô&È4ˆàˆØ�]‰]˜4Ó ˆÙØ—‘˜“ˆBÙÜ—f‘f˜V R¨¯©«Ó7�Ü—I‘IÐ8¸#Ó>�ÙØ Ÿw™w q›z�HØ�‰˜u¨T¸8ÑDÖEð'Fð( €LøôA ò ÜÐ" 4 &¨¨1¨#Ð.°dÕ;Ø�	ûðûô ò Úðús0   Á(G& Â
&H Ç&	HÇ/H	ÈHÈ	HÈ	HÈHc                  óR  — t         } t        j                  dd  D ]M  }|j                  d«      rt	        |j                  d«      d   «      } Œ2|j                  «       sŒCt	        |«      } ŒO t        dt        › d| › �d¬«       t        j                  «       }g }t        «       }t        d| dz   «      D ]ž  }t        ||«      }d}|D ]4  }|d	   |v rŒ|j                  |d	   «       |j                  |«       |dz  }Œ6 t        d
|› dt!        |«      › d|› dt!        |«      › �d¬«       |st        d|› d�d¬«        nt#        j$                  d«       Œ  t        dt!        |«      › d�d¬«       g }	t'        |«      D �]	  \  }
}t)        |d	   |j+                  dd«      «      \  }}}}|s|d   }|s|j+                  dd«      }|rt-        j.                  dd|«      n|}t-        j.                  dd|«      j1                  «       d d }|	j                  t        |d	   |d	   ||||t2        |rt5        j6                  |d¬«      nddœ	«       |
dz   dz  dk(  rt        d|
dz   › dt!        |«      › �d¬«       t#        j$                  d «       �Œ t        j8                  j;                  dd!«       	 dd"lm} t        d#t!        |	«      › d$�d¬«        ||	t        ¬%«       tA        d&„ |	D «       «      }t        d't!        |	«      › d(|› �d¬«       y # tB        $ r}t        d)|› �d¬«       Y d }~y d }~ww xY w)*Nr   z--pages=rI   z[YANTAI] SITE=z max_pages=Tr„   r   rM   z  Page rƒ   u   æ�¡(æ–°u   ) ç´¯è®¡z  [END] page z emptyg      à?u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...rv   r   rŒ   z<[^>]+>r‰   rˆ   i,  Fr€   )	Ú	site_nameÚ
source_urlrM   rv   Úpublish_daterc   ÚsummaryÚcategoryr{   rf   z	  detail rG   g333333Ó?z/root/gov_crawler)Úpush_to_searchdbz
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)rc   r   r   N)rl   r   )Ú.0rs   s     r   ú	<genexpr>zmain.<locals>.<genexpr>%  s)   è ø€ ÒO˜!¨q¯u©u°YÓ/?Ò/EÀ2×.LÑ.LÕ.N”AÑOùs   ‚(2«2z  DONE. pushed=u    ç©ºæ­£æ–‡=z  [ERR] push: )"Ú	MAX_PAGESÚsysÚargvr   ÚintrS   Úisdigitr–   Ú	SITE_NAMErk   ÚSessionrO   Úranger    rT   rU   rq   ÚtimeÚsleepÚ	enumerater|   rl   r(   r)   r   ÚCATEGORYr�   r�   ÚpathÚinsertÚcrawler_libr§   Úsumro   )Ú	max_pagesrD   r—   Ú	all_itemsrY   Úpgr›   Ú	new_countÚitÚresultsÚirv   rx   rc   r{   r¥   r§   Úemptyru   s                      r   rj   rj   ê   s  € Ü€IÜ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü˜AŸG™G C›L¨™OÓ,‰IØ�Y‰Y�[Ü˜A›‰Ið	ô 
ˆNœ9˜+ [°°Ð
<ÀDÕIÜ×ÑÓ €Gà€IÜ‹5€DÜ�A�y 1‘}Ó%ò ˆÜ˜7 BÓ'ˆØˆ	Øò 	ˆBØ�%‰y˜DÑ ØØ�H‰H�R˜‘YÔØ×Ñ˜RÔ Ø˜‰N‰Ið	ô 	�˜�t˜2œc %›j˜\¨°°¸8ÄCÈ	ÃNÐCSÐTÐ\`ÕaÙÜ�M "  VÐ,°DÕ9ÙÜ�
‰
�3�ðô 
ˆNœ3˜y›>Ð*Ð*<Ð
=ÀTÕJØ€GÜ˜9Ó%ó ‰ˆˆ2Ü0<¸RÀ¹YÈÏÉÈwÐXZÓH[Ó0\Ñ-ˆˆx˜ +ÙØ�w‘KˆEÙØ—v‘v˜f bÓ)ˆHÙ6=”"—&‘&˜ S¨'Ô2À5ˆÜ—&‘&˜  gÓ.×4Ñ4Ó6°t¸Ð<ˆØ�‰Ü"Ø˜U™)Ø�e‘9ØØ$ØØÜ ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ

ô 
	ð �‰E�R‰<˜1ÒÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4¸DÕAÜ�
‰
�3Žð+ô0 ‡H�H‡O�O�AÐ*Ô+ð0Ý0Ü�
œ3˜w›<˜.Ð(=Ð>ÀdÕKÙ˜¬iÕ8ÜÑO˜wÔOÓOˆÜ�¤ G£˜~¨[¸¸Ð@ÈÖMøÜò 0Ü�˜q˜cÐ"¨$×/Ò/ûð0ús   Ê&AL Ì	L&ÌL!Ì!L&Ú__main__)r   )Ú__doc__rk   r(   r�   Úsqlite3r´   r­   Úurllib.parser’   Úbs4r   r   ÚDB_PATHr±   r·   ÚGROUPrP   r•   r¬   r‘   rm   r9   rŽ   r   r+   rB   rZ   r|   r    rj   Ú__name__© r   r   ú<module>rÍ      s³   ðñ
÷ <× ;× ;Ó ;Ý Ý  à
€Ø9€	Ø€Ø€Ø&€Ø]€Ø€	Ø€ð DØ'ñ€ò
€
ð ØØØØ!Ø'ñ€
ò%ò	òòBó851òp(òV>0ðB ˆzÒÙ…Fð r   