Ë
    ]yj£'  ã                   óÆ   — 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 ddl	m
Z
 dZdZdZdZd	Zd
ZdddddœZdZdddddddœZd„ Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uP  
çƒŸå�°å¸‚äººæ°‘æ”¿åºœ - è¡Œæ”¿è®¸å�¯å…¬ç¤ºçˆ¬è™«
CMS: HanWeb/JPAAS (çƒŸå�°å¸‚æ”¿åºœé—¨æˆ·ç½‘ç«™)
åˆ—è¡¨: API /api-gateway/jpaas-publish-server/front/page/build/unit (JSONè¿”å›žHTML)
åˆ†é¡µ: paramJson={pageNo:N,pageSize:15}, å‰�5é¡µ
è¯¦æƒ…: div.text#zoom æ­£æ–‡å†…å®¹ + tableé™„ä»¶
æ ‡é¢˜: a[title] å�–å®Œæ•´æ ‡é¢˜ï¼ˆé�¿å…�çœ�ç•¥å�·ï¼‰
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.yantai.gov.cnzPhttps://www.yantai.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitz/mnt/data/search.dbu   çƒŸå�°å¸‚-è¡Œæ”¿è®¸å�¯å…¬ç¤ºÚhjxxu   å±±ä¸œçƒŸå�°zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z!application/json, text/plain, */*úzh-CN,zh;q=0.9,en;q=0.8zhhttps://www.yantai.gov.cn/col/col43294/index.html?vc_xxgkarea=113706000042603877-1&number=C130107&jh=263)ú
User-AgentÚAcceptúAccept-LanguageÚRefereré   Ú1Ú43294ÚbulidstaticÚcolumnu   å½“å‰�æ �ç›®åˆ—è¡¨Úuo2n7cvvGR8iPKdzxdBuu)ÚwebIdÚpageIdÚ	parseTypeÚpageTypeÚtagIdÚtplSetIdc                 ó>  — | j                  dd«      j                  dd«      j                  «       }t        j                  d|«      }|rU|j	                  d«      › d|j	                  d«      j                  d«      › d|j	                  d«      j                  d«      › �S y)	u/   ä»Žåˆ—è¡¨é¡µçš„æ—¥æœŸæ–‡æœ¬ä¸­æ��å�– YYYY-MM-DDú
Ú ú z'(\d{4})\s*-\s*(\d{1,2})\s*-\s*(\d{1,2})é   ú-é   é   )ÚreplaceÚstripÚreÚsearchÚgroupÚzfill)Údate_strÚcleanedÚmatchs      ú&/root/gov_crawler/crawl_yantai_tzgg.pyÚ
parse_dater)   (   sŠ   € à×Ñ˜t RÓ(×0Ñ0°°bÓ9×?Ñ?ÓA€GÜ�I‰IÐ@À'ÓJ€EÙØ—+‘+˜a“.Ð!  5§;¡;¨q£>×#7Ñ#7¸Ó#:Ð";¸1¸U¿[¹[È»^×=QÑ=QÐRSÓ=TÐ<UÐVÐVØó    c           	      ó"  — t        t        «      }t        j                  | ddœ«      |d<   	 t	        j
                  t        |t        d¬«      }|j                  dk7  rt        d| › d|j                  › �«       g S |j                  «       }|j                  d	«      s#t        d| › d
|j                  dd«      › �«       g S |d   d   }t        |d«      }g }|j                  d«      D ]ä  }|j                  d«      }|sŒ|j                  d«      xs dj                  «       }	|	s|j                  d¬«      }	|	j                  dd«      j                  dd«      j                  «       }	|j                  dd«      }
t!        t"        |
«      }|j                  d«      }|r|j                  «       nd}t%        |«      }|j'                  |	||dœ«       Œæ t        d| › dt)        |«      › d�«       |S # t*        $ r}t        d| › d|› �«       g cY d}~S d}~ww xY w) u!   è°ƒç”¨åˆ—è¡¨APIèŽ·å�–ä¸€é¡µæ•°æ�®é   )ÚpageNoÚpageSizeÚ	paramJsoné   )ÚparamsÚheadersÚtimeoutéÈ   u	   åˆ—è¡¨é¡µz HTTP Úsuccessu    APIå¤±è´¥: Úmessager   ÚdataÚhtmlúhtml.parserzli.bt-main-r-ul-liÚaÚtitleT©r    z&middot;õ   Â·z&nbsp;r   ÚhrefÚspan)r;   ÚurlÚdateu   : è§£æž�åˆ° õ    æ�¡u	    å¼‚å¸¸: N)ÚdictÚ
QUERY_DATAÚjsonÚdumpsÚrequestsÚgetÚLIST_APIÚHEADERSÚstatus_codeÚprintr   ÚselectÚfindr    Úget_textr   r   ÚBASE_URLr)   ÚappendÚlenÚ	Exception)Úpagenor1   Úrespr7   r8   ÚsoupÚitemsÚliÚa_tagr;   r>   r@   r?   r%   Úpub_dateÚes                   r(   Úget_list_pager\   1   sì  € ä”*Ó€FÜŸ*™*°ÀBÑ%GÓH€Fˆ;ÑðÜ�|‰|œH¨V¼WÈbÔQˆØ×Ñ˜sÒ"Ü�I˜f˜X V¨D×,<Ñ,<Ð+=Ð>Ô?ØˆIØ�y‰y‹{ˆØ�x‰x˜	Ô"Ü�I˜f˜X \°$·(±(¸9ÀRÓ2HÐ1IÐJÔKØˆIØ�F‰|˜FÑ#ˆÜ˜T =Ó1ˆØˆØ—+‘+Ð2Ó3ò 	IˆBØ—G‘G˜C“LˆEÙØØ—Y‘Y˜wÓ'Ò-¨2×4Ñ4Ó6ˆEÙØŸ™¨T˜Ó2�Ø—M‘M *¨dÓ3×;Ñ;¸HÀcÓJ×PÑPÓRˆEØ—9‘9˜V RÓ(ˆDÜœ( DÓ)ˆCØ—7‘7˜6“?ˆDÙ*.�t—}‘}”°BˆHÜ! (Ó+ˆHØ�L‰L 5°¸hÑGÕHð	Iô 	�	˜&˜ ¬c°%«j¨\¸Ð>Ô?ØˆøÜò Ü�	˜&˜ ¨1¨#Ð.Ô/Ø�	ûðús,   ¬AG( Á9AG( Â=D*G( Ç(	HÇ1H	ÈHÈ	Hc                 ó°  — 	 t        j                  | t        d   dddœd¬«      }|j
                  dk7  ry
t        |j                  d«      }d}|j                  d«      }|r|j                  d¬«      }|s;|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|j                  ddd¬«      }|s|j                  dd¬«      }|s|j                  dd¬«      }g }d}	|�rZ|j                  dd¬«      D ]§  }
|
d   }|j                  d«      st        t        |«      n|}||
d<   t        j                   d |t        j"                  «      sd!|v sŒZ|
j                  d¬«      xs& |j%                  d"«      d#   j%                  d$«      d%   }|j'                  ||d&œ«       Œ© |j                  d'd¬(«      D ]-  }|d)   }|j                  d*«      st        t        |«      n||d)<   Œ/ |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        j0                  d0d|	«      }	t        j0                  d1d|	«      }	t        j0                  d2d|	«      }	t        j0                  d3d4|	«      }	|	j                  «       }	|	r1t3        t        j0                  d5d|	«      j                  «       «      d6k  r(d7| › d8|xs d9› d:�}	|r|D ]  }
|	d7|
d;   › d8|
d   › d:�z  }	Œ d}t        j                   d<|j                  «      }|r|j5                  d=«      }|s6t        j                   d>|j                  «      }|r|j5                  d=«      d	d? }||	|t7        j8                  |d@¬A«      fS # t        $ r}t	        d| › d|› �«       Y d	}~y
d	}~ww xY w)BuH   æŠ“å�–è¯¦æƒ…é¡µï¼Œæ��å�–æ­£æ–‡+é™„ä»¶ (ä¿�ç•™ HTML è¡¨æ ¼/é“¾æŽ¥/å›¾ç‰‡)r   z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8r   )r   r   r	   r0   )r2   r3   u     è¯·æ±‚å¤±è´¥ z: N)r   r   r   r4   r9   r   Úh1Tr<   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚdivÚtextÚzoom)Úclass_Úid)rh   )rg   r:   )r>   r>   Úhttpz*\.(pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps)$zdocument/downloadú/éÿÿÿÿú?r   )r`   r@   Úimg)Úsrcrn   )ri   zdata:Úclassz((scan|share|qrcode|print|toolbar|bshare)rh   u3   æ‰“å�°æœ¬é¡µ|å…³é—­çª—å�£|æ‰«ç �åœ¨æ‰‹æœº|åˆ†äº«åˆ°)Ústringz<script[\s\S]*?</script>z<style[\s\S]*?</style>z\sstyle="[^"]*"z\n{3,}z

z<[^>]+>é   z<p><a href="z">u   åŽŸæ–‡z</a></p>r@   u&   æ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})r   z&<meta name="PubDate" content="([^"]*)"é
   F)Úensure_ascii)rG   rH   rJ   rS   rL   rK   r   re   rN   rO   r    Úfind_allÚ
startswithr   rP   r!   r"   ÚIÚsplitrQ   ÚcompileÚ	decomposeÚfind_parentÚstrÚsubrR   r#   rE   rF   )r@   rU   r[   rV   r;   r^   Úmtrf   Úattachmentsrc   r:   r>   Úfull_urlÚa_textrm   rn   ÚbadÚnodeÚpr%   Ú
date_matchÚmt2s                         r(   Úextract_contentr†   V   s   € ðÜ�|‰|˜CÜ! ,Ñ/ØWØ8ñ*
ð ô	ˆð ×Ñ˜3ÒØÜ˜Ÿ™ MÓ2€Dà€EØ	�‰�4‹€BÙ	Ø—‘ $�Ó'ˆÙØ�Y‰Y�v f¨nÐ%=ˆYÓ>ˆÙ�"—&‘&˜Ô#Ø�y‘M×'Ñ'Ó)ˆEà�9‰9�U 6¨fˆ9Ó5€DÙØ�y‰y˜ 6ˆyÓ*ˆÙØ�y‰y˜ vˆyÓ.ˆà€KØ€Gâà—‘˜s¨�Ó.ò 	FˆAØ�V‘9ˆDØ6:·o±oÀfÔ6M”wœx¨Ô.ÐSWˆHØ ˆAˆf‰IÜ�y‰yÐFÈÌbÏdÉdÔSÐWjÐnrÒWrØŸ™¨$˜Ó/ÒT°4·:±:¸c³?À2Ñ3F×3LÑ3LÈSÓ3QÐRSÑ3T�Ø×"Ñ"¨F¸8Ñ#DÕEð	Fð —=‘= ¨D�=Ó1ò 	bˆCØ�e‘*ˆCØ7:·~±~ÐFWÔ7Xœ¤¨3Ô/Ð^aˆC�ŠJð	bð
 —=‘=¨´·±Ð<gÔik×imÑimÓ1nÐ'o�=Ópò 	ˆCØ�M‰M�Oð	à—=‘=¨¬b¯j©jÐ9dÔfh×fjÑfjÓ.kÐ'l�=Ómò 	ˆCØ�M‰M�Oð	à—M‘M¬¯©Ð4jÓ)k�MÓlò 	ˆDØ× Ñ Ó"ˆAÚØ—‘•ð	ô �d“)ˆÜ—&‘&Ð4°b¸'ÓBˆÜ—&‘&Ð2°B¸Ó@ˆÜ—&‘&Ð+¨R°Ó9ˆÜ—&‘&˜ F¨GÓ4ˆØ—-‘-“/ˆá”cœ"Ÿ&™& ¨R°Ó9×?Ñ?ÓAÓBÀRÒGØ    R¨Ò(9°Ð':¸(ÐCˆÙØ ò J�Ø˜\¨!¨E©(¨°2°a¸±i°[ÀÐIÑI‘ðJð €HÜ—‘ÐDÀdÇiÁiÓP€JÙØ×#Ñ# AÓ&ˆÙÜ�i‰iÐAÀ4Ç9Á9ÓMˆÙØ—y‘y “| C RÐ(ˆHà�'˜8¤T§Z¡Z°È%Ô%PÐPÐPøôS ò Ü� ˜u B q cÐ*Ô+Üûðús   ‚#P1 Ð1	QÐ:QÑQc                 ó  — d}d}t        j                  dt        dt        z  gddd¬«      }t	        «       }|j
                  dk(  rL|j                  j                  «       r2t	        |j                  j                  «       j                  d«      «      }g }| D �]  }|d   }||v r|d	z  }Œ|d
   j                  dd«      }|j                  dd«      xs dj                  dd«      }	|j                  dd«      }
|
rt        |
j                  dd«      «      nd}|j                  dd«      xs dj                  dd«      }|	r|	dd ndj                  dd«      }|j                  dt        |||
|	|t        t        |f	z  «       |j                  d|›dt        ›d|›d�«       |d	z  }|j                  |«       �Œ |rÑdj!                  |«      }t        j                  dt        g|ddd¬«      }|j
                  dk7  r‘t#        d|j$                  dd › �«       dj!                  |ddd…   «      }t        j                  dt        g|ddd¬«      }|j
                  dk(  rt#        d|› d�«       ||fS t#        d|j$                  dd › �«       d}||fS )u>   é€šè¿‡sqlite3 CLIæ‰¹é‡�å…¥åº“ (é�¿å…�Python sqlite3 WALæ�Ÿå��)r   Úsqlite3z1SELECT page_url FROM gov_raw WHERE site_name='%s'Té<   )Úcapture_outputre   r3   r   r@   r   r;   ú'z''rc   r   rA   r   r~   Nr4   z²INSERT INTO gov_raw (site_name, title, page_url, publish_date, content, date_rank, category, group_name, attachments) VALUES ('%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s');zXINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (last_insert_rowid(), 'z', 'z');éx   )ÚinputrŠ   re   r3   u     å†™å…¥å¤±è´¥: r   u     FTSè·³è¿‡ï¼Œä»…å†™å…¥gov_raw u   æ�¡u     gov_rawä¹Ÿå†™å…¥å¤±è´¥: )Ú
subprocessÚrunÚDB_PATHÚ	SITE_NAMEÚsetÚ
returncodeÚstdoutr    rw   r   rH   ÚintrQ   ÚCATEGORYÚGROUPÚaddÚjoinrL   Ústderr)rW   Ú	new_countÚ
skip_countÚresultÚexistingÚbatchÚitemr@   ÚtÚcÚdÚdrr:   ÚsÚsqlÚrÚraw_sqlÚr2s                     r(   Úpush_to_searchdbrª   «   s�  € à€IØ€Jä�^‰^Ø	”GÐPÔS\Ñ\Ð]Ø $°ô€Fô ‹u€HØ×Ñ˜AÒ &§-¡-×"5Ñ"5Ô"7Ü�v—}‘}×*Ñ*Ó,×2Ñ2°4Ó8Ó9ˆà€EØó ˆØ�5‰kˆØ�(‰?Ø˜!‰OˆJØà�‰M×!Ñ! # tÓ,ˆØ�X‰X�i Ó$Ò*¨×3Ñ3°C¸Ó>ˆØ�H‰H�V˜RÓ ˆÙ()ŒS�—‘˜3 Ó#Ô$¨qˆØ�X‰X�m RÓ(Ò.¨B×7Ñ7¸¸TÓBˆÙˆQˆt�‰W˜r×*Ñ*¨3°Ó5ˆà�‰ðKä˜!˜S ! Q¨¬H´e¸QÐ?ñ@ô	
ð
 	�Šò –)šQð ô	
ð
 	�Q‰ˆ	Ø�‰�SÖð1ñ4 Ø�i‰i˜ÓˆÜ�N‰N˜I¤wÐ/°sÈ4ÐVZÐdgÔhˆØ�<‰<˜1ÒÜÐ$ Q§X¡X¨d¨s ^Ð$4Ð5Ô6à—i‘i ¡c¨ c¡
Ó+ˆGÜ—‘ ¬GÐ 4¸GÐTXÐ_cÐmpÔqˆBØ�}‰} Ò!ÜÐ7¸	°{À#ÐFÔGð
 �jÐ Ð ô Ð2°2·9±9¸T¸c°?Ð2CÐDÔEØ�	à�jÐ Ð r*   c                  óD  — dd l } | j                  d¬«      }|j                  dt        t        d¬«       |j                  ddd	¬
«       |j                  «       }t        |j                  t        «      }t        d|› d�«       g }t        d|dz   «      D ]�  }t        |«      }|st        d|› d�«        no|D ]h  }t        d|d   d d › d�«       t        |d   «      \  }}	}
}|r||d<   |	|d<   |
r|
|d<   ||d<   |j                  |«       t        j                  d«       Œj Œ� t        dt        |«      › d�«       |j                   s"|r t#        |«      \  }}t        d|› d|› �«       y |j                   r-t        d«       |d d D ]  }t        d|d   › d|d   › �«       Œ y y ) Nr   u"   çƒŸå�°å¸‚-è¡Œæ”¿è®¸å�¯å…¬ç¤ºçˆ¬è™«)Údescriptionz--pagesu   æŠ“å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz	--dry-runÚ
store_trueu   ä»…æµ‹è¯•ä¸�å†™å…¥DB)Úactionr¯   u.   å¼€å§‹çˆ¬å�–çƒŸå�°å¸‚è¡Œæ”¿è®¸å�¯å…¬ç¤ºï¼Œå…± u    é¡µ...r   u   ç¬¬u   é¡µæ— æ•°æ�®ï¼Œå�œæ­¢u
     è¯¦æƒ…: r;   é2   z...r@   rc   rA   r~   u   
å…±é‡‡é›† rB   u   å…¥åº“å®Œæˆ�: æ–°å¢ž u	   , è·³è¿‡ u"   dry-runæ¨¡å¼�ï¼Œæœªå†™å…¥æ•°æ�®åº“r   z  [z] )ÚargparseÚArgumentParserÚadd_argumentr•   Ú	MAX_PAGESÚ
parse_argsÚminÚpagesrL   Úranger\   r†   rQ   ÚtimeÚsleeprR   Údry_runrª   )r³   ÚparserÚargsr¹   Ú	all_itemsÚpagerW   r    r;   rc   r%   r~   r›   rœ   s                 r(   ÚmainrÂ   ä   sË  € ÛØ×$Ñ$Ð1UÐ$ÓV€FØ
×Ñ˜	¬´YÀ^ÐÔTØ
×Ñ˜¨LÐ?UÐÔVØ×ÑÓ€Dä�—
‘
œIÓ&€EÜ	Ð:¸5¸'ÀÐ
IÔJà€IÜ�a˜ ™Ó#ò ˆÜ˜dÓ#ˆÙÜ�C˜�vÐ2Ð3Ô4ÙØò 
	ˆDÜ�J˜t G™}¨S¨bÐ1Ð2°#Ð6Ô7Ü4CÀDÈÁKÓ4PÑ1ˆE�7˜H kÙØ %��W‘Ø%ˆD�‰OÙØ'��V‘Ø"-ˆD�ÑØ×Ñ˜TÔ"Ü�J‰J�q�Mñ
	ðô" 
ˆLœ˜Y›Ð(¨Ð
-Ô.à�<Š<™IÜ 0°Ó ;Ñˆ	�:ÜÐ% i [°	¸*¸ÐFÕGØ	�ŠÜÐ2Ô3Ø˜b˜q�Mò 	9ˆDÜ�C˜˜V™�~ R¨¨W© Ð7Õ8ñ	9ð 
r*   Ú__main__)r   )Ú__doc__r!   ÚsysrE   r»   rG   rŽ   Úbs4r   Úurllib.parser   rP   rI   r�   r‘   r–   r—   rJ   r¶   rD   r)   r\   r†   rª   rÂ   Ú__name__© r*   r(   ú<module>rÊ      s¢   ðñ÷ 1× 0× 0Ý Ý  à&€Ø]€Ø
€Ø*€	Ø€Ø€ð DØ1Ø0Øyñ	€ð €	àØØØØ!Ø'ñ€
òó"òJQQòj6!òr$9ðN ˆzÒÙ…Fð r*   