Ë
    a„jq&  ã                   ó0  — 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Z ej$                  d ej&                   ej
                  «       dz
  «      «      ZdddœZg d¢Zdd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zedk(  r e«        yy)uö  
åº”åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - ä¸šåŠ¡å·¥ä½œ çˆ¬è™« (v2 ä¿®å¤�ç‰ˆ)
CMS: å­�æ„Ÿå¸‚ç»Ÿä¸€å¹³å�°ï¼ˆHanweb/JPAAS htmledit_viewsï¼‰
é—®é¢˜ä¿®å¤�:
  1. åŸŸå��: www.yingcheng.gov.cn å·²ç©ºå£³(984B) â†’ æ”¹ç”¨ zwgk.yingcheng.gov.cn
  2. æ­£æ–‡: åµŒå¥—spanå­—ä½“æ ‡æ³¨è‡´ get_text(' ') ç©ºæ ¼æ±¡æŸ“ â†’ ä¿�å†…éƒ¨HTML+unwrap, é™„ä»¶ç‹¬ç«‹æ®µ
List: /c/ycssthjj/ywgz.jhtml (P1), ywgz_{N}.jhtml (PN, 1-indexed)
Detail: /c/ycssthjj/ywgz/{article_id}.jhtml
æ¯�é¡µ15æ�¡
ç”¨æ³•:
  python3 crawl_yingcheng_ywgz.py --pages=5
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu%   åº”åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-ä¸šåŠ¡å·¥ä½œu   ä¸šåŠ¡å·¥ä½œu   æ¹–åŒ—zhttp://zwgk.yingcheng.gov.cnz/c/ycssthjj/ywgzé   z%Y-%m-%di€š£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   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€u	   é™„ä»¶ï¼šc                 ó*  — t        |«      D ]v  }	 t        j                  | t        d¬«      }d|_        |j
                  dk(  r&t        |j                  «      dkD  r|j                  c S t        j                  d|dz   z  «       Œx y # t        $ r Y Œ)w xY w)Né   )ÚheadersÚtimeoutzutf-8éÈ   iÐ  é   é   )ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚlenÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚiÚrs       ú)/root/gov_crawler/crawl_yingcheng_ywgz.pyÚfetchr   )   s†   € Ü�7‹^ò  ˆð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJØ�}‰} Ò#¬¨A¯F©F«°dÒ(:Ø—v‘v’ô 	�
‰
�1˜˜A™‘;Õð ð øô ò 	Ùð	ús   �ABÂ	BÂBc                 óN   — | sy| j                  d«      r| S t        t        | «      S )NÚ Úhttp)Ú
startswithr   ÚBASE_URL©Úhrefs    r   Úabs_urlr%   6   s&   € ÙØØ‡��vÔØˆÜ”8˜TÓ"Ð"ó    c                 óh   — | j                  ddg«      D ]  }|j                  «        Œ t        | «      S )u   è¡¨æ ¼ä¿�ç•™ä¸º HTMLÚscriptÚstyle)Úfind_allÚ	decomposeÚstr)Ú	table_tagÚts     r   Útable_to_htmlr/   >   s4   € à×Ñ ¨7Ð 3Ó4ò ˆØ	�‰�ðäˆy‹>Ðr&   c                 ó–  ‡— g }| j                  ddg«      D ]  }|j                  «        Œ g }| j                  dd¬«      D ]�  }|j                  dd«      }t        j                  d|t        j
                  «      sŒ;|j                  d¬	«      xs& |j                  d
«      d   j                  d«      d   }|j                  |t        |«      f«       Œ’ | j                  dd¬«      D ]:  }|j                  dd«      }t        j                  d|t        j
                  «      sŒ;Œ< | j                  dd¬«      D ]J  }|j                  dd«      }t        j                  d|t        j
                  «      sŒ;|j                  «        ŒL | j                  d«      D ]h  }|j                  dd«      }	|	rd|	v sd|	v r|j                  «        Œ0t        |	«      }
|j                  dd«      xs d}|j                  d|
› d|› d�«       Œj | j                  ddg«      D ]Æ  }|j                  d«      rŒ|j                  g d¢«      D ]  }|j                  «        Œ |j                  dd¬«      }|sŒSdj                  d„ |j                  D «       «      }|j                  «       r-t        j                   dd|«      }|j                  d|› d �«       Œ²|j                  d|› d �«       ŒÈ | j                  d«      D ];  }t#        |j                  d¬	«      «      d!k\  sŒ"|j                  t%        |«      «       Œ= t'        «       }|D ]6  \  }}|sŒ	||vsŒ|j)                  |«       |j                  d|› d|› d�«       Œ8 g }|D ]C  Št+        ˆfd"„t,        D «       «      rŒt        j.                  d#‰«      rŒ3|j                  ‰«       ŒE d$j                  |«      S )%uZ   æ­£æ–‡: p/pre ä¿�å†…éƒ¨HTML(span unwrap), tableä¿�ç•™, é™„ä»¶ç‹¬ç«‹æ®µ, å›¾ç‰‡æŸ¥çœ‹é“¾æŽ¥r(   r)   ÚaTr#   r$   r   z1\.(pdf|doc|docx|xls|xlsx|rar|zip|txt|wps|et|dwg)$©Ústripú/éÿÿÿÿú?r   ÚimgÚsrcÚicon_ÚfileTypeImagesÚaltu   æŸ¥çœ‹å›¾ç‰‡ú<p><a href="ú">ú</a></p>ÚpÚpreÚtable)ÚspanÚbÚstrongÚfontÚemr   ÚuÚs)Ú	separatorr3   c              3   ór   K  — | ]/  }t        |d d«      dv st        |t        «      sŒ#t        |«      –— Œ1 y­w)ÚnameN)r1   Úbr)ÚgetattrÚ
isinstancer,   )Ú.0Úcs     r   ú	<genexpr>z extract_block.<locals>.<genexpr>p   s1   è ø€ Òu 1´w¸qÀ&È$Ó7OÐS^Ñ7^ÔblÐmnÔpsÕbtœ˜AŸÑuùs   ‚$7§7ú\s+ú z<p>z</p>é
   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )rO   Úskr?   s     €r   rQ   z extract_block.<locals>.<genexpr>…   s   øè ø€ Ò,˜2ˆr�QŒwÑ,ùs   ƒu"   ^<p>(æ�¥æº�|å�‘å¸ƒæ—¥æœŸ)[ï¼š:]\s*z

)r*   r+   r   ÚreÚsearchÚIÚget_textÚsplitÚappendr%   Úreplace_withÚfind_parentÚunwrapÚjoinÚcontentsr3   Úsubr   r/   ÚsetÚaddÚanyÚ
SKIP_TEXTSÚmatch)Úcontent_divÚ
detail_urlÚpartsrH   Úattach_linksr1   r$   r   r7   r8   Úfullr;   ÚelÚtagÚtxtÚinnerrA   Úseenr   Úfilteredr?   s                       @r   Úextract_blockrt   E   s”  ø€ à€EØ×!Ñ! 8¨WÐ"5Ó6ò ˆØ	�‰�ðð €LØ×!Ñ! #¨DÐ!Ó1ò 7ˆØ�u‰u�V˜RÓ ˆÜ�9‰9ÐIÈ4ÔQS×QUÑQUÕVØ—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ×Ñ ¤w¨t£}Ð 5Õ6ð	7ð ×!Ñ! #¨DÐ!Ó1ò ˆØ�u‰u�V˜RÓ ˆÜ�9‰9ÐIÈ4ÔQS×QUÑQUÕVØðð ×!Ñ! #¨DÐ!Ó1ò ˆØ�u‰u�V˜RÓ ˆÜ�9‰9ÐIÈ4ÔQS×QUÑQUÕVØ�K‰K�Mðð
 ×#Ñ# EÓ*ò ?ˆØ�g‰g�e˜RÓ ˆÙ�g ‘nÐ(8¸CÑ(?Ø�M‰MŒOØÜ�s‹|ˆØ�g‰g�e˜RÓ Ò2 NˆØ×Ñ˜<¨ v¨R°¨u°HÐ=Õ>ð?ð ×"Ñ" C¨ <Ó0ò *ˆØ�>‰>˜'Ô"Øà—;‘;ÒSÓTò 	ˆCØ�J‰J�Lð	à�k‰k B¨dˆkÓ3ˆÙØà—‘Ñu¨¯©ÔuÓuˆØ�;‰;Œ=Ü—F‘F˜6 3¨Ó.ˆEØ�L‰L˜3˜u˜g TÐ*Õ+à�L‰L˜3˜s˜e 4˜Õ)ð*ð" ×%Ñ% gÓ.ò /ˆÜˆu�~‰~ Dˆ~Ó)Ó*¨bÓ0Ø�L‰Lœ uÓ-Õ.ð/ô
 ‹5€DØ!ò ?‰	ˆˆcÚ�3˜d’?Ø�H‰H�SŒMØ�L‰L˜<¨ u¨B¨t¨f°HÐ=Õ>ð?ð €HØò ˆÜÓ,¤Ô,Ô,ØÜ�8‰8Ð9¸1Ô=ØØ�‰˜Õðð �;‰;�xÓ Ð r&   c                 ó¾  — t        | «      }|syt        |d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j	                  «       }|s:|j                  d	d
¬«      }|r%|j                  d«      }|r|j                  d¬«      }|s|}|sJ|j                  d«      }|r7|j                  d¬«      }t        j                  dd|«      j	                  «       }d}	|j                  dddi¬«      }
|
r'|
j                  d«      r|
d   j	                  «       d d }	|	s)t        j                  d|«      }|r|j                  d«      }	|j                  dd¬«      }|s|j                  d	d¬«      }|s|j                  d	d¬«      }|s|j                  d	d¬«      }d}|rt        || «      }t        |j	                  «       «      dk  rd| › d|xs |› d�}||	|fS )N)NNNúhtml.parserr   ÚmetarK   ÚArticleTitle)ÚattrsÚcontentÚdivú
news-title©Úclass_Úh2Tr2   Útitleu#   \s*-\s*åº”åŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€\s*$ÚPubDaterT   u)   å�‘å¸ƒæ—¥æœŸ[ï¼š:](\d{4}-\d{1,2}-\d{1,2})r   ÚarticleÚhtmledit_viewsÚjs_contentBox)Úidznews-boxé   r<   r=   r>   )r   r   Úfindr   r3   r[   rX   rc   rY   Úgrouprt   r   )r   Ú
list_titleÚhtmlÚsoupr€   ÚmtÚntr   ÚttagÚdate_strÚmdÚdmri   rz   s                 r   Úfetch_detailr’   Ž   sã  € Ü�‹:€DÙØÜ˜˜}Ó-€Dà€EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�u \ˆYÓ2ˆÙØ—‘˜“ˆBÙØŸ™¨$˜Ó/�ÙØˆÙØ�y‰y˜Ó!ˆÙØ—M‘M¨�MÓ-ˆEÜ—F‘FÐAÀ2ÀuÓM×SÑSÓUˆEà€HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆÙÜ�Y‰YÐCÀTÓJˆÙØ—x‘x “{ˆHà—)‘)˜IÐ.>�)Ó?€KÙØ—i‘i Ð.>�iÓ?ˆÙØ—i‘i ¨/�iÓ:ˆÙØ—i‘i ¨j�iÓ9ˆà€GÙÜ ¨SÓ1ˆô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨Ò(;°Ð'<¸HÐEˆà�(˜GÐ#Ð#r&   c                 ó¸  — | dk(  rt         › t        › d�}nt         › t        › d| › d�}t        |«      }|st        d| › d�«       g S t	        |d«      }g }|j                  dd¬	«      D ]ð  }|j                  dd
¬	«      }|sŒ|j                  dd¬	«      }|sŒ/|j                  d«      D ]¬  }|j                  dd¬	«      }	|	sŒ|	j                  dd«      }
|
sŒ.|	j                  dd«      xs |	j                  d¬«      }|rt        |«      dk  rŒet        |
«      }|j                  dd¬	«      }|r|j                  d¬«      nd}|j                  |||f«       Œ®  |S  |S )Nr   z.jhtmlÚ_ú  Page z fetch failrv   r{   Úcardr}   z	card-bodyÚulz	news-listÚlir1   r|   r$   r   r€   Tr2   r   rB   z	news-time)r"   Ú	LIST_PATHr   Úprintr   r*   r‡   r   r[   r   r%   r]   )Úpage_numr   rŠ   r‹   Úarticlesr–   Úbodyr—   r˜   r1   r$   r€   Úfull_urlÚ	date_spanÚdates                  r   Úextract_list_pager¡   Â   sz  € Ø�1‚}Ü�
œ9˜+ VÐ,‰ä�
œ9˜+ Q x j°Ð7ˆä�‹:€DÙÜ�˜�z Ð-Ô.Øˆ	ä˜˜}Ó-€DØ€HØ—‘˜e¨F�Ó3ò ˆØ�y‰y˜ {ˆyÓ3ˆÙØØ�Y‰Y�t KˆYÓ0ˆÙØØ—+‘+˜dÓ#ò 	5ˆBØ—‘˜ L�Ó1ˆAÙØØ—5‘5˜ Ó$ˆDÙØØ—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEÙœC ›J¨šNØÜ˜t“}ˆHØŸ™ ¨{˜Ó;ˆIÙ5>�9×%Ñ%¨DÐ%Ô1ÀBˆDØ�O‰O˜U H¨dÐ3Õ4ð	5ð 	Ø€Oð-ð, €Or&   c                  ón  — t         } t        j                  dd  }ddj                  |«      v r>t	        t        j                  ddj                  |«      «      j                  d«      «      } n#|r!|d   j                  «       rt	        |d   «      } t        dt        › d| › �d¬	«       t        j                  t        «      }|j                  d
«       |j                  d«       dx}}t        d| dz   «      D �]N  }t!        |«      }|st        d|› d�d¬	«        �n-|t#        |«      z  }|D ]÷  \  }}}	|	r
|	t$        k  rŒ|j                  d|f«      }
|
j'                  «       rŒ7t)        ||«      \  }}}|xs |}|xs |	}|xs	 d|› d|› d�}t        j*                  dd|d d «      j-                  «       }	 |j                  dt        |||j-                  «       |||t.        t0        df
«      }
|j3                  «        |
j4                  dkD  r|dz  }t;        j<                  d«       Œù t        d|› dt#        |«      › d|› d�d¬	«       �ŒQ |j3                  «        |j?                  «        t        d|› d|› �d¬	«       y # t        j6                  $ r(}t        d|› �t        j8                  ¬«       Y d }~Œ¤d }~ww xY w)Nr   z--pages=rS   z--pages=(\d+)r   z	Scraping z, max pages: T)ÚflushzPRAGMA journal_mode=WALzPRAGMA busy_timeout=15000r•   z: 0 articles (end)z)SELECT id FROM gov_raw WHERE page_url = ?r<   r=   r>   rR   r
   zÝINSERT OR IGNORE INTO gov_raw
                       (site_name, source_url, page_url, title, publish_date, summary, content, category, group_name, script_name)
                       VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)zcrawl_yingcheng_ywgz.pyz  DB error: )Úfileg333333Ó?z: z found, z new so farz
Done! Total found: z, New: ) Ú	MAX_PAGESÚsysÚargvra   ÚintrX   rY   rˆ   Úisdigitrš   Ú	SITE_NAMEÚsqlite3ÚconnectÚDB_PATHÚexecuter   r¡   r   ÚCUTOFFÚfetchoner’   rc   r3   ÚCATEGORYÚGROUPÚcommitÚrowcountÚOperationalErrorÚstderrr   r   Úclose)Ú	max_pagesÚargsÚconnÚ	total_newÚtotal_foundÚpnrœ   r€   Úpage_urlr    ÚcurÚ	det_titleÚdet_dateÚdet_contentÚfinal_titleÚ
final_dateÚfinal_contentÚsummaryÚes                      r   ÚmainrÈ   è   s˜  € Ü€IÜ�8‰8�A�Bˆ<€DØ�S—X‘X˜d“^Ñ#ÜœŸ	™	Ð"2°C·H±H¸T³NÓC×IÑIÈ!ÓLÓM‰	Ù	�$�q‘'—/‘/Ô#Ü˜˜Q™“Lˆ	ä	ˆI”i�[ ¨i¨[Ð
9ÀÕFä�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-ØÐ€I�ä�A�y 1‘}Ó%ó YˆÜ$ RÓ(ˆÙÜ�G˜B˜4Ð1Ð2¸$Õ?ÚØ”s˜8“}Ñ$ˆØ%-ò 	Ñ!ˆE�8˜TÙ˜œvšØØ—,‘,ÐJÈXÈKÓXˆCØ�|‰|Œ~ØÜ/;¸HÀeÓ/LÑ,ˆI�x Ø#Ò, uˆKØ!Ò) TˆJØ'Ò[¨\¸(¸À2ÀkÀ]ÐRZÐ+[ˆMÜ—f‘f˜V S¨-¸¸Ð*=Ó>×DÑDÓFˆGð;Ø—l‘lð@ô  ¨(°K×4EÑ4EÓ4GÈØ˜m¬X´uÐ>WðYó	�ð —‘”Ø—<‘< !Ò#Ø ‘N�Iô �J‰J�s�Oð1	ô2 	�˜�t˜2œc (›m˜_¨H°Y°K¸{ÐKÐSW×Xð?YðB 	‡K�K„MØ‡J�J„LÜ	Ð! + ¨g°i°[Ð
AÈÖNøô ×+Ñ+ò ;Ü˜ Q CÐ(¬s¯z©z×:Ò:ûð;ús   Æ1AI9É9J4ÊJ/Ê/J4Ú__main__)é   )r   )Ú__doc__r   rX   Újsonr«   r   r¦   Úbs4r   Úurllib.parser   r­   rª   r±   r²   r"   r™   r¥   ÚstrftimeÚ	localtimer¯   r   rg   r   r%   r/   rt   r’   r¡   rÈ   Ú__name__rV   r&   r   ú<module>rÒ      s¼   ðñ÷ .× -× -Ý Ý  à
€Ø3€	Ø€Ø€Ø)€Ø€	Ø€	Ø
ˆ$�-‰-˜
 N D§N¡N°9°4·9±9³;ÀÑ3LÓ$MÓ
N€ð DØ'ñ€ò
€
ó
ò#òòF!óR1$òh#òL2Oðj ˆzÒÙ…Fð r&   