Ë
    9JŠjZ  ã                   óÎ   — 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mZ ddlm	Z	 dZ
e
dz   ZdZdZd	xZZd
diZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r ej2                   e«       «       yy)u  
æ´‹æµ¦ç»�æµŽå¼€å�‘åŒº - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
CMS: UCAP (ç»Ÿä¸€æ�œç´¢å¹³å�°)
WAF: æ— 
åˆ—è¡¨: /common/search/b22e1388d017400e9218980187b93732?sort=publishedTime&_isAgg=false&_pageSize=12&_template=yangpu&_channelName=&page={n}
åˆ†é¡µ: 12æ�¡/é¡µ, 682é¡µ
è¯¦æƒ…: /yangpu/0400/{YYYYMM}/{uuid}.shtml
è¯¦æƒ…æ ‡é¢˜: <title> (åŽ»æŽ‰ "_å…¬ç¤ºå…¬å‘Š_æ´‹æµ¦ç»�æµŽå¼€å�‘åŒº" å�Žç¼€)
è¯¦æƒ…æ­£æ–‡: div.con_cen > ucapcontent > p
è¯¦æƒ…æ—¥æœŸ: å�‘å¸ƒæ—¥æœŸï¼šYYYY-MM-DD

ç”¨æ³•:
  python3 crawl_yangpu_gg.py
  python3 crawl_yangpu_gg.py --pages 10
é    N)ÚBeautifulSoup)Úurljoinzhttps://yangpu.hainan.gov.cnzƒ/common/search/b22e1388d017400e9218980187b93732?sort=publishedTime&_isAgg=false&_pageSize=12&_template=yangpu&_channelName=&page=%dz/root/search.dbu"   æ´‹æµ¦ç»�æµŽå¼€å�‘åŒº-å…¬ç¤ºå…¬å‘Šu   å…¬ç¤ºå…¬å‘Šz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é
   é   c                 óB  — t        d«      D ]7  }	 t        j                  | t        t        ¬«      }d|_        |j                  c S  y # t        $ rN}|dk(  r*t        d|dz   | |fz  t        j                  ¬«       Y d }~ yt        j                  d«       Y d }~Œ�d }~ww xY w)	Né   )ÚheadersÚtimeoutzutf-8é   u%     [WARN] èŽ·å�–å¤±è´¥ (%d/3): %s - %sé   ©ÚfileÚ )ÚrangeÚrequestsÚgetÚHEADERSÚTIMEOUTÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚattemptÚrÚes       ú$/root/gov_crawler/crawl_yangpu_gg.pyÚfetchr"   *   sˆ   € Ü˜“8ò 	ˆð	Ü—‘˜S¬'¼7ÔCˆAØ ˆAŒJØ—6‘6ŠMñ		øô
 ò 	Ø˜!Š|ÜÐ=ÀÈ1ÁÈcÐSTÐ@UÑUÔ\_×\fÑ\fÕgÝÜ�J‰J�q�M‰Mûð		ús   �2AÁ	BÁ)BÁ?BÂBc                 óÜ  — g }t        | d«      }|j                  dd¬«      D ]Ç  }|j                  dd¬«      }|sŒ|j                  d«      }|sŒ-|j                  dd«      }|j	                  d	¬
«      }|r|sŒVt        t        |«      }d}	|j                  dd¬«      }
|
r7t        j                  d|
j	                  «       «      }|r|j                  d«      }	|j                  |||	f«       ŒÉ |S )Núhtml.parserÚdivÚlist_div©Úclass_zlist-right_titleÚaÚhrefr   T©ÚstripÚtdÚleft)Úalignz(\d{4}-\d{2}-\d{2})r   )r   Úfind_allÚfindr   Úget_textr   ÚBASE_URLÚreÚsearchÚgroupÚappend)ÚhtmlÚitemsÚsoupr&   Ú	title_divÚa_tagr*   ÚtitleÚfull_urlÚdater-   Úms               r!   Úextract_list_itemsrA   7   sí   € Ø€EÜ˜˜}Ó-€DØ—M‘M %°
�MÓ;ò .ˆØ—M‘M %Ð0B�MÓCˆ	ÙØØ—‘˜sÓ#ˆÙØØ�y‰y˜ Ó$ˆØ—‘ T�Ó*ˆÙ™5ØÜœ8 TÓ*ˆð ˆØ�]‰]˜4 vˆ]Ó.ˆÙÜ—	‘	Ð0°"·+±+³-Ó@ˆAÙØ—w‘w˜q“z�à�‰�h  tÐ,Õ-ð+.ð, €Ló    c                 óv  — t        | d«      }d}|j                  d«      }|rK|j                  r?|j                  j                  «       }t	        j
                  dd|«      j                  «       }d}t	        j                  d| «      }|r|j                  d«      }d}|j                  dd¬	«      }|rf|j                  d
«      }|r|n|}	g }
|	j                  d«      D ](  }|j                  d¬«      }|sŒ|
j                  |«       Œ* dj                  |
«      }g }|j                  dd¬«      D ]ˆ  }|d   }d|j                  «       v s%d|j                  «       v sd|j                  «       v sŒ?|j                  d¬«      xs |j                  d«      d   }|j                  |t        t        |«      dœ«       ŒŠ ||||fS )Nr$   r   r=   u$   _å…¬ç¤ºå…¬å‘Š_æ´‹æµ¦ç»�æµŽå¼€å�‘åŒº$u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   r%   Úcon_cenr'   ÚucapcontentÚpTr+   z

r)   )r*   r*   z.pdfz.docz.xlsú/éÿÿÿÿ)Únamer   )r   r1   Ústringr,   r4   Úsubr5   r6   r0   r2   r7   ÚjoinÚlowerÚsplitr   r3   )r8   r:   r=   Ú	title_tagr?   r@   ÚcontentrD   ÚucapÚ	containerÚpartsrF   r   Úattachmentsr)   r*   rI   s                    r!   Úextract_detailrU   S   sª  € Ü˜˜}Ó-€Dð €EØ—	‘	˜'Ó"€IÙ�Y×%Ò%Ø× Ñ ×&Ñ&Ó(ˆÜ—‘Ð>ÀÀEÓJ×PÑPÓRˆð €DÜ
�	‰	Ð=¸tÓD€AÙØ�w‰w�q‹zˆð €GØ�i‰i˜ iˆiÓ0€GÙà�|‰|˜MÓ*ˆÙ ‘D gˆ	ØˆØ×#Ñ# CÓ(ò 	#ˆAØ—:‘: D�:Ó)ˆDÚØ—‘˜TÕ"ð	#ð —+‘+˜eÓ$ˆð €KØ�]‰]˜3 Tˆ]Ó*ò OˆØ�‰yˆØ�T—Z‘Z“\Ñ! V¨t¯z©z«|Ñ%;¸vÈÏÉËÒ?UØ—:‘: D�:Ó)Ò@¨T¯Z©Z¸«_¸RÑ-@ˆDØ×Ñ¨´W¼XÀtÓ5LÑMÕNð	Oð �$˜ Ð,Ð,rB   c                 ó¼  — d}d}|D ]”  \  }}}}}dd l }	|r|	j                  |d¬«      nd}
|r|d d j                  dd«      n|}|s|rdj                  d„ |D «       «      }n|}	 | j	                  d	||t
        |||||
f«      }|j                  dkD  r|d
z  }n|d
z  }Œ– ||fS # t        $ r0}t        d|›d|›�t        j                  ¬«       |d
z  }Y d }~ŒÏd }~ww xY w)Nr   F)Úensure_asciir   éÈ   ú
ú c              3   ó:   K  — | ]  }d |d   ›d|d   ›d�–— Œ y­w)z<p><a href="r   z">rI   z</a></p>N© )Ú.0r)   s     r!   ú	<genexpr>zpush_to_db.<locals>.<genexpr>…   s   è ø€ Ò#nÑ]^ÀAÀeÃHÈaÐPVËiÔ$XÑ#nùs   ‚z“INSERT OR REPLACE INTO gov_raw (page_url, title, site_name, publish_date, content, date_rank, summary, attachments) VALUES (?, ?, ?, ?, ?, ?, ?, ?)r   z  [ERR] DB: z - r   )ÚjsonÚdumpsÚreplacerL   ÚexecuteÚ	SITE_NAMEÚrowcountr   r   r   r   )Úconnr9   ÚsavedÚskippedr   r=   r?   rP   rT   r_   Úattachments_jsonÚsummaryÚcurr    s                 r!   Ú
push_to_dbrk   |   s  € Ø€EØ€GØ27ò Ñ.ˆˆU�D˜' ;ÛÙJU˜4Ÿ:™: kÀ˜:ÔFÐ[]ÐÙ6=�'˜$˜3�-×'Ñ'¨¨cÔ2À5ˆÙÙØŸ)™)Ñ#nÐbmÔ#nÓn‘à�ð	Ø—,‘,ð2ð �eœY¨¨g°t¸WÐFVÐWó	ˆCð �|‰|˜aÒØ˜‘
‘à˜1‘�øð'ð. �'ˆ>Ðøô ò 	Ýª3±Ð2¼¿¹ÕDØ�q‰L�Gûð	ús   Á$8B"Â"	CÂ+&CÃCc            	      óF  — t         } t        t        j                  «      D ]K  \  }}|dk(  sŒ|dz   t	        t        j                  «      k  sŒ,t        t        j                  |dz      «      }  n t        j                  t        d¬«      }|j                  d«       g }t        d| z  «       t        d| dz   «      D �]  }t        |z  }t        d|| |d d fz  «       t        |«      }|sŒ/t        |«      }|st        d	«        nÕt        d
t	        |«      z  «       |D ]¶  \  }	}
}t        j                   d«       t        dt	        |«      dz   |
d d fz  dd¬«       t        |	«      }|st        d«       ŒWt#        |«      \  }}}}|s|
}|s|}|j%                  |	||||f«       |rdnd}d}|rdt	        |«      z  }t        d|t	        |«      |fz  «       Œ¸ �Œ |r9t'        ||«      \  }}|j)                  «        t        d||t	        |«      fz  «       |j+                  «        y)Nz--pagesr   é<   )r
   zPRAGMA journal_mode=WALu1   æ´‹æµ¦ç»�æµŽå¼€å�‘åŒº-å…¬ç¤ºå…¬å‘Š: çˆ¬å�– %d é¡µu     [åˆ—è¡¨é¡µ %d/%d] %séP   u       -> æ— æ•°æ�®ï¼Œå�œæ­¢u       -> æ‰¾åˆ° %d æ�¡g333333Ó?z    [%d] %s...é(   rZ   T)ÚendÚflushÚfailÚokÚemptyr   u    +%dé™„u   (%s, %då­—%s)u+   
å®Œæˆ�! æ–°å¢ž: %d, è·³è¿‡: %d, æ€»å…±: %dr   )Ú	MAX_PAGESÚ	enumerater   ÚargvÚlenÚintÚsqlite3ÚconnectÚDB_PATHrb   r   r   ÚLIST_URLr"   rA   r   r   rU   r7   rk   ÚcommitÚclose)ÚpagesÚir)   re   Ú	all_itemsÚidxÚlist_urlr8   r9   Úitem_urlÚ
item_titleÚ	item_dateÚdetail_htmlr=   r?   rP   rT   ÚstatusÚ
attach_msgrf   rg   s                        r!   Úmainr‹   ™   s  € Ü€EÜœ#Ÿ(™(Ó#ò ‰ˆˆ1Ø�	‹>˜a !™e¤c¬#¯(©(£mÓ3ÜœŸ™  Q¡™Ó(ˆEÙðô
 �?‰?œ7¨BÔ/€DØ‡L�LÐ*Ô+Ø€Iä	Ð
=ÀÑ
EÔFä�Q˜ ™	Ó"ó !HˆÜ˜c‘>ˆÜÐ&¨#¨u°h¸sÀ°mÐ)DÑDÔEÜ�X‹ˆÙØä" 4Ó(ˆÙÜÐ-Ô.ÙäÐ$¤s¨5£zÑ1Ô2à/4ò 	HÑ+ˆH�j )Ü�J‰J�sŒOÜÐ"¤c¨)£n°qÑ&8¸*ÀSÀb¸/Ð%JÑJÐPSÐ[_Õ`Ü ›/ˆKÙÜ�f”Øä0>¸{Ó0KÑ-ˆE�4˜ +ÙØ"�ÙØ �à×Ñ˜h¨¨t°W¸kÐJÔKÙ$‘T¨'ˆFØˆJÙØ&¬¨[Ó)9Ñ9�
Ü�/ V¬S°«\¸:Ð$FÑFÕGò'	Hð!HñF Ü# D¨)Ó4‰ˆˆwØ�‰ŒÜÐ<ÀÀwÔPSÐT]ÓP^Ð?_Ñ_Ô`à‡J�J„LØrB   Ú__main__)Ú__doc__r4   r   r   r   rz   Úbs4r   Úurllib.parser   r3   r}   r|   rc   ÚCATEGORYÚGROUPr   ru   r   r"   rA   rU   rk   r‹   Ú__name__Úexitr\   rB   r!   ú<module>r”      s    ðñó  
Û 
Û Û Û Ý Ý  à)€Øð %ñ %€ð €Ø0€	Ø!Ð !€ˆ5ð ÐPð€ð €	Ø
€ò
òò8&-òRò:6ðr ˆzÒØ€C‡H�H‰T‹VÕð rB   