Ë
    Æq«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 ddl	m	Z	m
Z
 ddlmZ ddlZ ej                  «       Zej#                  dedd¬«       ej'                  «       Zej*                  Z ej.                  d	d
«      ZdZdZ e	j6                  «        e
d¬«      z
  j9                  d«      ZdZdddddœZ ej@                  «       Z!e!jD                  jG                  e«       ddl$Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)e*dk(  r e)«        yy)u˜   æ°´åŸŽåŒºäººæ°‘æ”¿åºœç½‘ â€” é€šçŸ¥å…¬å‘Šçˆ¬è™«
http://www.shuicheng.gov.cn/newsite/zwdt/tzgg/
Custom CMS, index_N.html åˆ†é¡µ, 8æ�¡/é¡µ, 37é¡µ ~291æ�¡
é    N)ÚBeautifulSoup)ÚdatetimeÚ	timedelta)Úurljoinz--pagesu#   é™�åˆ¶é¡µæ•°(0=ä¸�é™�,ç”¨MAX_PAGES))ÚtypeÚdefaultÚhelpÚ	SEARCH_DBz/root/search.dbz.http://www.shuicheng.gov.cn/newsite/zwdt/tzgg/u%   æ°´åŸŽåŒºäººæ°‘æ”¿åºœç½‘-é€šçŸ¥å…¬å‘ŠiG  )Údaysz%Y-%m-%dé(   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36zhttp://www.shuicheng.gov.cn/z?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ÚRefererÚAcceptzAccept-Languagec                 óv  ‡— | s| S | D �cg c]  }t        |t        «      sŒ|‘Œ }}t        |«      t        | «      k7  r| S t        «       g }}| D ])  }||vsŒ|j	                  |«       |j                  |«       Œ+ |D �‡cg c]&  Št        ‰«      dk\  rt        ˆfd„|D «       «      s‰‘Œ( }}|r|S |S c c}w c c}w )us  å‰”é™¤ã€Œå®¹å™¨æ®µã€�ï¼šåŽŸ find_all(['p','div']) å�Œæ—¶æ”¶ä¸‹å®¹å™¨ <div> å’Œå®ƒå†…éƒ¨çš„ <p>ï¼Œ
    å¯¼è‡´å�Œä¸€å†…å®¹å‡ºçŽ°ä¸¤æ¬¡ï¼ˆå®¹å™¨é‚£ä»½å¾€å¾€è¿˜è¢« get_text(strip=True) æ‹�å¹³ï¼‰ã€‚
    åˆ¤æ�®ï¼šæŸ�æ®µæ–‡æœ¬è¢«åˆ—è¡¨å†…å�¦ä¸€æ®µå®Œå…¨åŒ…å�« â†’ å®ƒæ˜¯å®¹å™¨æ®µ â†’ å‰”é™¤ã€‚
    ä¿�æŠ¤ï¼šè‹¥å‰”é™¤å�Žä¸ºç©ºï¼Œåˆ™åŽŸæ ·è¿”å›žï¼ˆä¸�å†’åˆ ç©ºçš„é£Žé™©ï¼‰ã€‚
    r   c              3   ó:   •K  — | ]  }|‰uxr |xr |‰v –— Œ y ­w)N© )Ú.0ÚbÚas     €ú$/root/gov_crawler/crawl_shuicheng.pyú	<genexpr>z(_drop_container_parts.<locals>.<genexpr>6   s&   øè ø€ Ò(SÈ¨°!¨Ò)D¸Ò)D¸aÀ1¸fÓ)DÑ(Sùs   ƒ)Ú
isinstanceÚstrÚlenÚsetÚaddÚappendÚany)ÚpartsÚpÚpsÚseenÚuniqr   Úkeeps        ` r   Ú_drop_container_partsr$   #   sÇ   ø€ ñ ØˆØÖ	1�œj¨¬CÕ0Š!Ð	1€BÐ	1Ü
ˆ2ƒw”#�e“*ÒØˆô “˜ˆ$€DØò (ˆØ�DŠ=Ø�H‰H�QŒK˜Ÿ™ Q�ð(ð ÷ V�!Ü˜“F˜b’L¤SÓ(SÈdÔ(SÔ%Sò ð V€Dð Váˆ4Ð!˜TÐ!ùò 
2ùòVs   ŠB1 B1Á>+B6c                 óŽ  — 	 t        j                  t        d¬«      }|j                  «       }|j	                  d| j                  «       ||j                  «       |j                  «       t        f«       |j                  }|j                  «        |j                  «        |S # t        $ r}t        d|› d|› �«       Y d }~yd }~ww xY w)Né<   ©Útimeoutz—
            INSERT OR IGNORE INTO gov_raw 
            (title, publish_date, content, page_url, site_name)
            VALUES (?, ?, ?, ?, ?)
        u   [ERROR] å†™å…¥å¤±è´¥ z: r   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚstripÚ	SITE_NAMEÚrowcountÚcommitÚcloseÚ	ExceptionÚprint)ÚtitleÚdate_strÚcontentÚpage_urlÚconnÚcÚaffectedÚes           r   Ú
store_itemr=   :   s¢   € ðÜ�‰œw°Ô3ˆØ�K‰K‹MˆØ	�	‰	ð ð �k‰k‹m˜X w§}¡}£¸¿¹Ó8HÌ)ÐTô		Vð
 —:‘:ˆØ�‰ŒØ�
‰
ŒØˆøÜò ÜÐ% h Z¨r°!°Ð5Ô6Üûðús   ‚BB  Â 	CÂ)B?Â?Cc                 ó\  — t        | d«      }g }|j                  d¬«      }|s|dfS |j                  d«      }|D ]í  }|j                  d«      }|sŒ|j                  dd«      }d	|vrŒ.|j	                  d
¬«      }	|	rt        |	«      dk  rŒQd}
|j                  dd¬«      }|r7t        j                  d|j	                  «       «      }|r|j                  d«      }
|j                  d«      r|}n'|j                  d«      rd|z   }nt        t        |«      }|j                  |	|
|f«       Œï |d
fS )Núhtml.parserz	news-list©Úclass_FÚlir   ÚhrefÚ ÚtzggT©r.   é   ÚspanÚflú(\d{4}-\d{1,2}-\d{1,2})é   Úhttpú/úhttp://www.shuicheng.gov.cn)r   ÚfindÚfind_allÚgetÚget_textr   ÚreÚsearchÚgroupÚ
startswithr   ÚBASE_URLr   )ÚhtmlÚpage_numÚsoupÚitemsÚ	news_listÚli_tagsrB   Úa_tagrC   r5   r6   Ú	date_spanÚ
date_matchr8   s                 r   Úparse_list_pagera   K   s6  € Ü˜˜}Ó-€DØ€EØ—	‘	 �	Ó-€IÙØ�eˆ|ÐØ× Ñ  Ó&€GØò 2ˆØ—‘˜“ˆÙØØ�y‰y˜ Ó$ˆØ˜ÑØØ—‘ T�Ó*ˆÙœ˜E›
 QšØØˆØ—G‘G˜F¨4�GÓ0ˆ	ÙÜŸ™Ð#=¸y×?QÑ?QÓ?SÓTˆJÙØ%×+Ñ+¨AÓ.�Ø�?‰?˜6Ô"Ø‰HØ�_‰_˜SÔ!Ø4°tÑ;‰Häœx¨Ó.ˆHØ�‰�e˜X xÐ0Õ1ð-2ð. �$ˆ;Ðó    c                 óD  — t        | d«      }|j                  d«      }|s=|j                  d«      }|r't        j                  dd|j                  d¬«      «      nd}n|j                  d¬«      }d}|j                  d	«      }|r7t        j                  d
|j                  «       «      }|r|j                  d«      }|j                  d¬«      xs |j                  d¬«      }|s|j                  d¬«      }d}	|�r6t        t        |«      d«      }
|
j                  dd¬«      D ]B  }|d   }|j                  d«      rt        ||«      |d<   Œ)|j                  d«      sŒ;d|z   |d<   ŒD |
j                  dd¬«      D ]B  }|d   }|j                  d«      r	d|z   |d<   Œ"|j                  d«      sŒ4t        ||«      |d<   ŒD g }|
j                  g d¢«      D ](  }|j                  d¬«      }|sŒ|j                  |«       Œ* t        |«      }|rdj                  |«      n|
j                  dd¬«      }	g }|j                  dd¬«      D ]¼  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d¬«      }|j                  d«      s|j                  d«      r#|j                  d«      rt        ||«      nd|z   }n |j                  d«      r|}nt        ||«      }|j                  d|› d |› d!�«       Œ¾ |r|	d"dj                  |«      z   z  }	|||	fS )#Nr?   zdiv.detailsHead h1.titler5   u#   ^æ°´åŸŽåŒºäººæ°‘æ”¿åºœç½‘-\s*\S+\s+rD   TrF   úN/Az div.detailsHead p.attribute spanrJ   rK   ÚTRS_UEDITORr@   Útrs_editor_viewÚdetailsMainr   )rC   rC   z./rM   rN   Úimg)Úsrcri   )r   ÚdivÚtdz

ú
)Ú	separatorr.   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|caj)$rL   ú[z](ú)u   

---
é™„ä»¶ï¼š
)r   Ú
select_onerO   rS   ÚsubrR   rT   rU   r   rP   rV   r   r   r$   ÚjoinÚI)rX   r8   rZ   Ú	title_tagr5   r6   r_   r`   Úcontent_divr7   Úsoup_cr   rC   rh   ri   ÚparasÚtagÚtextÚattachmentsÚfull_urls                       r   Úparse_detail_pager|   k   s  € Ü˜˜}Ó-€Dð —‘Ð :Ó;€IÙØ—I‘I˜gÓ&ˆ	Ùfo”—‘Ð=¸rÀ9×CUÑCUÐ\`ÐCUÓCaÔbÐuz‰à×"Ñ"¨Ð"Ó.ˆð €HØ—‘Ð BÓC€IÙÜ—Y‘YÐ9¸9×;MÑ;MÓ;OÓPˆ
ÙØ!×'Ñ'¨Ó*ˆHð —)‘) =�)Ó1ÒX°T·Y±YÐFW°YÓ5X€KÙØ—i‘i }�iÓ5ˆà€GÚäœs ;Ó/°Ó?ˆØ—‘ ¨4�Ó0ò 	AˆAØ�V‘9ˆDØ�‰˜tÔ$Ü# H¨dÓ3��&’	Ø—‘ Õ%Ø9¸DÑ@��&’	ð	Að —?‘? 5¨d�?Ó3ò 	4ˆCØ�e‘*ˆCØ�~‰~˜cÔ"Ø:¸SÑ@��E’
Ø—‘ Õ%Ü$ X¨sÓ3��E’
ð	4ð ˆØ—?‘?Ò#5Ó6ò 	#ˆCØ—<‘< d�<Ó+ˆDÚØ—‘˜TÕ"ð	#ô & eÓ,ˆÙ(-�&—+‘+˜eÔ$°6·?±?ÈTÐY]°?Ó3^ˆð €KØ�]‰]˜3 Tˆ]Ó*ò 
8ˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKØ—:‘: D�:Ó)ˆDØ�‰˜tÔ$¨¯©¸Ô(<Ø6:·o±oÀdÔ6Kœ7 8¨TÔ2ÐQnÐquÑQu‘Ø—‘ Ô(Ø‘ä" 8¨TÓ2�Ø×Ñ  4 &¨¨8¨*°AÐ6Õ7ð
8ñ ØÐ)¨D¯I©I°kÓ,BÑBÑBˆà�(˜GÐ#Ð#rb   c            	      óZ  — t        dt        › �«       t        dt        › dt        › �«       d} d}	 t	        j
                  t        d¬«      }t        d„ |j                  d	t        f«      j                  «       D «       «      }|j                  «        t        dt        |«      › d�«       t        dkD  rt        t        t        «      nt        }t        |«      D �]ª  }|r �n¥|dk(  rt         nd|› d�}t        d|dz   › d|› �«       	 t"        j%                  |d¬«      }d|_        |j,                  dk7  rt        d|j,                  › d�«        �n6t/        |j0                  |dz   «      \  }	}
|
st        d«        �n
t        dt        |	«      › d�«       |	D ]ê  \  }}}|r|t        k  rt        d|› d�«       d} Œã||v rt        d|d d › d �«       Œ<t)        j*                  d!«       	 t"        j%                  |d¬«      }d|_        |j,                  dk7  rŒ€t3        |j0                  |«      \  }}}|r|d#k7  r|n|}|xs |}t5        ||||«      }|dkD  r| dz  } t        d$|d d% › d&|› d'�«       ŒÙt        d|d d › d �«       Œì �Œ­ t        d(«       t        d)| › �«       y # t        $ r#}t        d
|› �«       t        «       }Y d }~�Œ5d }~ww xY w# t        $ r.}t        d|› �«       t)        j*                  d«       Y d }~�Œ)d }~ww xY w# t        $ r}t        d"|› �«       Y d }~�Œ�d }~ww xY w)*Nu   [INFO] å¼€å§‹çˆ¬å�–: u   [INFO] é˜ˆå€¼: u   , æœ€å¤§é¡µæ•°: r   Fr&   r'   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   Nr   )r   Úrs     r   r   zmain.<locals>.<genexpr>·   s   è ø€ ò X �q˜•tñ Xùs   ‚z.SELECT page_url FROM gov_raw WHERE site_name=?u!   [WARN] è¯»å�–å·²å…¥åº“URLå¤±è´¥: u   [INFO] å·²å…¥åº“ u%    æ�¡URLï¼Œé‡�å¤�çš„ç›´æŽ¥è·³è¿‡è¯¦æƒ…z4http://www.shuicheng.gov.cn/newsite/zwdt/tzgg/index_z.htmlu   
[PAGE] ç¬¬rK   u   é¡µ: é   zutf-8u   [ERROR] è¯·æ±‚å¤±è´¥: éÈ   z[WARN] HTTP u   , å�œæ­¢u   [INFO] æ— news-list, å�œæ­¢z[INFO] u    æ�¡z[STOP] u    è¶…å‡º3å¹´é˜ˆå€¼Tu     [-] å·²å­˜åœ¨: é   z...g333333Ó?u   [ERROR] è¯¦æƒ…é¡µè¯·æ±‚å¤±è´¥: rd   z  [+] r   z... (ro   u   
=== å®Œæˆ� ===u   æ–°å¢ž: )r4   r/   Ú	THRESHOLDÚ	MAX_PAGESr)   r*   r+   r   r-   Úfetchallr2   r3   r   Ú_MAX_PAGES_ARGÚminÚrangerW   ÚsessionrQ   ÚencodingÚtimeÚsleepÚstatus_codera   ry   r|   r=   )Ú	total_newÚ
stop_crawlÚ_cxÚexistingr<   Ú	_page_caprY   r8   r   r[   Úhas_datar5   r6   Ú
detail_urlÚrdÚdetail_titleÚdetail_dater7   Úfinal_titleÚ
final_dater;   s                        r   Úmainrš   ®   s:  € Ü	Ð!¤) Ð
-Ô.Ü	ˆOœI˜;Ð&6´y°kÐ
BÔCà€IØ€JðÜ�o‰oœg¨rÔ2ˆÜñ X S§[¡[Ø<¼y¸ló&LßLTÉHËJôXó Xˆà�	‰	Œô 
Ðœc (›m˜_Ð,QÐ
RÔSä2@À1Ò2D””Iœ~Ô.Ì)€IÜ˜)Ó$ó 7AˆÙÚà'¨1š}•8Ð4hÐiqÐhrÐrwÐ2xˆÜ�˜X a™Z˜L¨¨h¨ZÐ8Ô9ð	Ü—‘˜H¨b�Ó1ˆAØ ˆAŒJð �=‰=˜CÒÜ�L §¡ ¨xÐ8Ô9Úä)¨!¯&©&°(¸Q±,Ó?‰ˆˆxÙÜÐ/Ô0Úä�œ˜E›
�| 4Ð(Ô)à+0ò 	AÑ'ˆE�8˜ZÙ˜H¤yÒ0Ü˜ ˜zÐ):Ð;Ô<Ø!�
Ùà˜XÑ%ÜÐ)¨%°°¨*¨°SÐ9Ô:ØÜ�J‰J�sŒOðÜ—[‘[ °R�[Ó8�Ø%�”ð
 �~‰~ Ò$Øä1BÀ2Ç7Á7ÈJÓ1WÑ.ˆL˜+ wÙ*6¸<È5Ò;P™,ÐV[ˆKØ$Ò0¨ˆJä! +¨z¸7ÀJÓOˆHØ˜!Š|Ø˜Q‘�	Ü˜˜{¨3¨BÐ/Ð0°°j°\ÀÐCÕDäÐ)¨+°c°rÐ*:Ð);¸3Ð?Õ@ò;	Að57Aôr 
ÐÔÜ	ˆH�Y�KÐ
 Õ!øôA ò ÜÐ1°!°Ð5Ô6Ü“5Žûðûô  ò 	ÜÐ*¨1¨#Ð.Ô/Ü�J‰J�qŒMÝûð	ûô: ò ÜÐ7¸°sÐ;Ô<ÝûðúsH   ±A J ÄKÇ'LÊ	KÊ(KËKË	LË#L Ì LÌ	L*ÌL%Ì%L*Ú__main__)+Ú__doc__ÚosÚsysrS   Újsonr‹   ÚrequestsÚbs4r   r   r   Úurllib.parser   ÚargparseÚ_APÚArgumentParserÚ
_AP_PARSERÚadd_argumentÚintÚ
parse_argsÚ_AP_ARGSÚpagesr†   Úgetenvr+   rW   r/   ÚnowÚstrftimerƒ   r„   ÚHEADERSÚSessionr‰   ÚheadersÚupdater)   r$   r=   ra   r|   rš   Ú__name__r   rb   r   ú<module>r´      s  ðñ÷ × Ó Û Ý ß (Ý  ã ØˆS×ÑÓ!€
Ø 
× Ñ ˜	¨°QÐ=bÐ Ô cØ× Ñ Ó"€Ø—‘€à
ˆ"�)‰)�KÐ!2Ó
3€Ø;€Ø3€	ØˆX�\‰\‹^™i¨UÔ3Ñ3×=Ñ=¸jÓI€	Ø€	ð DØ-ØOØ0ñ	€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ Û ò"ò.ò"ò@A$òFL"ð\ ˆzÒÙ…Fð rb   