Ë
    }“zj!  ã                   ór  — 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 ej                  j                  dej                  j                  ej                  j!                  e«      «      «       ddlmZ dZedz   ZdZd	Zd
ZddddœZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)uê  
å¹¿å¾·å¸‚äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
æ �ç›®: https://www.guangde.gov.cn/News/showList/933/page_1.html
CMS: è‡ªå®šä¹‰PHPæ”¿åºœä¿¡æ�¯å…¬å¼€å¹³å�°
åˆ—è¡¨: /News/showList/933/page_{n}.html (15æ�¡/é¡µ)
è¯¦æƒ…: /News/show/{id}.html
  æ ‡é¢˜: <meta name="ArticleTitle"> (å®Œæ•´)
  æ­£æ–‡: <div id="zoom" class="detail_content clearfix"> ä¿�ç•™ <p>/<table> HTML
  æ—¥æœŸ: <meta name="PubDate">
ç”¨æ³•:
  python3 crawl_guangde_notice.py --pages=5
  python3 crawl_guangde_notice.py --pages=1
é    N)ÚBeautifulSoup)Úurljoin)Úpush_to_searchdbzhttps://www.guangde.gov.cnz/News/showList/933/page_%d.htmlu"   å¹¿å¾·å¸‚äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘ŠéÈ   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languageé   z
2020-01-01c                  ó®  — d} t         j                  dd  D ]¼  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|j                  d«      sŒDt        t         j                  «      t         j                  j                  |«      dz   kD  sŒ�t        t         j                  t         j                  j                  |«      dz      «      } Œ¾ | S )Nr   é   z--pages=ú=z--pages)ÚsysÚargvÚ
startswithÚintÚsplitÚlenÚindex)ÚpagesÚas     ú)/root/gov_crawler/crawl_guangde_notice.pyÚ
parse_argsr   (   s›   € Ø€EÜ�X‰X�a�bˆ\ò 9ˆØ�<‰<˜
Ô#Ü˜Ÿ™ › Q™Ó(‰EØ�\‰\˜)Õ$¬¬S¯X©X«¼¿¹¿¹ÈÓ9JÈQÑ9NÓ)NÜœŸ™¤§¡§¡°Ó!2°QÑ!6Ñ7Ó8‰Eð	9ð
 €Ló    c                 óÞ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )NÚ z[\u200b\u200e\u200f\ufeff\xa0]z\s+ú u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r   Úclean_titler!   2   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr   c                 ó^  — t        d«      D ]]  }	 t        j                  | t        t        ¬«      }d|_        |j                  dk(  r|j                  c S 	 t        j                  d
«       Œ_ y	# t        $ r6}|dk(  r't        d| › d|› �t        j                  ¬«       Y d }~ y	Y d }~ŒRd }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8r   é   z  [WARN] fetch failed: z - )Úfiler   g      ø?)ÚrangeÚrequestsÚgetÚHEADERSÚTIMEOUTÚencodingÚstatus_codeÚtextÚ	ExceptionÚprintr   ÚstderrÚtimeÚsleep)ÚurlÚattemptÚrÚes       r   Úfetchr9   :   sœ   € Ü˜“8ò 
ˆð	Ü—‘˜S¬'¼7ÔCˆAØ ˆAŒJØ�}‰} Ò#Ø—v‘v’ð $ô 	�
‰
�3�ð
ð øô ò 	Ø˜!Š|ÜÐ/°¨u°C¸°sÐ;Ä#Ç*Á*ÕMÝô ûð	ús   �AA-Á-	B,Á6&B'Â'B,c                 óV  — g }t        | d«      }|j                  d«      D ]Æ  }|j                  dd¬«      }|sŒ|d   }d|vrŒ#|j                  d«      xs |j	                  d¬	«      }|sŒKt        t        |«      }d
}|j                  d«      }	|	r9t        j                  d|	j	                  «       «      }
|
r|
j                  d«      nd
}|j                  |t        |«      |dœ«       ŒÈ t        «       }g }|D ]/  }|d   |vsŒ|j                  |d   «       |j                  |«       Œ1 |S )uV   åˆ—è¡¨: <li><span>YYYY-MM-DD</span> <a href="/News/show/ID.html" title="å®Œæ•´æ ‡é¢˜">úhtml.parserÚlir   T©Úhrefr>   z/News/show/Útitle©r   r   Úspanú(\d{4}-\d{2}-\d{2})r
   )r5   r?   Údater5   )r   Úfind_allÚfindr*   Úget_textr   ÚBASE_URLr   ÚsearchÚgroupÚappendr!   ÚsetÚadd)Ú	html_textÚitemsÚsoupr<   r   r>   r?   r5   rC   rA   ÚmÚseenÚuniqÚis                 r   Úextract_list_itemsrT   I   s(  € à€EÜ˜ MÓ2€DØ�m‰m˜DÓ!ò NˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆØ Ñ$ØØ—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØÜ”h Ó%ˆØˆØ�w‰w�v‹ˆÙÜ—	‘	Ð0°$·-±-³/ÓBˆAÙ!"�1—7‘7˜1”:¨ˆDØ�‰˜S¬;°uÓ+=ÀtÑLÕMð!Nô$ ‹5€DØ€DØò ˆØˆU‰8˜4ÒØ�H‰H�Q�u‘XÔØ�K‰K˜�Nðð €Kr   c                 óŽ  ‡— ˆfd„}t        | d«      }|j                  ddg«      D ]  }|j                  «        Œ |j                  dd¬«      D ]  } ||d   «      |d<   Œ |j                  d	d¬
«      D ]  } ||d   «      |d<   Œ dD ](  }|j                  |«      D ]  }|j                  «        Œ Œ* |j                  d«      D ]	  }	i |	_        Œ |j                  d«      D ]7  }|j
                  dv r|j
                  dvsŒ i |_        Œ(|j                  «        Œ9 |j                  d«      D ]I  }	|	j                  d¬«      rŒ|	j                  d	«      rŒ(|	j                  d«      rŒ:|	j                  «        ŒK |j                  «       }
t        j                  dd|
«      }
t        j                  dd|
«      }
|
j                  «       S )u=   æ­£æ–‡æ¸…æ´—: ä¿�ç•™ <p>/<table> HTML, é™„ä»¶/å›¾ç‰‡ç»�å¯¹åŒ–c                 óB   •— | j                  d«      r| S t        ‰| «      S )N)zhttp://zhttps://zjavascript:zmailto:ztel:zdata:)r   r   )ÚuÚpage_urls    €r   Ú_abs_urlzclean_content.<locals>._abs_urlk   s"   ø€ Ø�<‰<ÐZÔ[ØˆHÜ�x Ó#Ð#r   r;   ÚscriptÚstyler   Tr=   r>   Úimg)Úsrcr]   )z.ewmz.ewm-1z.ewm-2z.sharez.printz.qrz.weixin-shareÚp)ÚtableÚtbodyÚtheadÚtrÚtdÚthr^   ÚdivrA   Úbrr   r\   )r   r\   r@   z[\u3000\xa0]r   z\r\nú
)r   rD   Ú	decomposeÚselectÚattrsÚnameÚunwraprF   rE   Údecode_contentsr   r   r   )Úraw_htmlrX   rY   rO   Útagr   r\   ÚselÚelr^   Úbodys    `         r   Úclean_contentrs   h   s¶  ø€ ô$ô
 ˜ =Ó1€Dà�}‰}˜h¨Ð0Ó1ò ˆØ�‰�ðð �]‰]˜3 Tˆ]Ó*ò (ˆÙ˜Q˜v™YÓ'ˆˆ&Š	ð(à�}‰}˜U¨ˆ}Ó-ò *ˆÙ˜c %™jÓ)ˆˆEŠ
ð*ð Xò ˆØ—+‘+˜cÓ"ò 	ˆBØ�L‰L�Nñ	ðð �]‰]˜3Óò ˆØˆ�ðð �}‰}˜TÓ"ò ˆØ�8‰8ÐjÑjØ�x‰x˜|Ò+Ø�•	à�J‰J�Lðð �]‰]˜3Óò ˆØ�z‰z ˆzÕ%¨a¯f©f°U­mÀAÇFÁFÈ3ÅKØ�K‰K�Mðð ×ÑÓ!€DÜ�6‰6�/ 3¨Ó-€DÜ�6‰6�'˜4 Ó&€DØ�:‰:‹<Ðr   c                 óò  — t        | d«      }d}t        j                  d| «      }|rt        |j	                  d«      «      }d}t        j                  d| «      }|r:t        j                  d|j	                  d«      «      }|r|j	                  d«      nd}d}|j                  dd¬	«      }|rt        t        |«      |«      }g }	|r­t        j                  d
|«      D ]”  }
|
j	                  d«      |
j	                  d«      j                  «       }}t        j                  d|t        j                  «      sd|j                  «       v sŒk|	j                  |xs |j                  d«      d   |dœ«       Œ– ||||	dœS )u#   è¯¦æƒ…: æ ‡é¢˜/æ—¥æœŸ/æ­£æ–‡/é™„ä»¶r;   r   z!ArticleTitle"\s+content="([^"]*)"r
   zPubDate"\s+content="([^"]*)"rB   re   Úzoom)Úidz$<a\s+href="([^"]+)"[^>]*>([^<]*)</a>r&   ú.\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|7z)(\?|$)Údownloadú/éÿÿÿÿ)rk   r5   )r?   Úpub_dateÚcontentÚattachments)r   r   rH   r!   rI   rE   rs   ÚstrÚfinditerr   ÚIÚlowerrJ   r   )rM   r5   rO   r?   rP   r{   Úpmrr   ru   r}   ÚamÚahrefÚatexts                r   Úextract_detailr†   ’   sX  € ä˜ MÓ2€Dð €EÜ
�	‰	Ð6¸	ÓB€AÙÜ˜AŸG™G A›JÓ'ˆð €HÜ
�	‰	Ð1°9Ó=€AÙÜ�Y‰YÐ-¨q¯w©w°q«zÓ:ˆÙ"$�2—8‘8˜A”;¨"ˆð €DØ�9‰9�U˜vˆ9Ó&€DÙÜœS ›Y¨Ó,ˆð €KÙÜ—+‘+ÐEÀtÓLò 	ZˆBØŸ8™8 A›;¨¯©°«×(9Ñ(9Ó(;�5ˆEÜ�y‰yÐJÈEÔSU×SWÑSWÔXÐ\fÐjo×juÑjuÓjwÒ\wØ×"Ñ"¨EÒ,I°U·[±[ÀÓ5EÀbÑ5IÐRWÑ#XÕYð	Zð
 ¨¸TÐR]Ñ^Ð^r   c                  ó–  — t        «       } | sd} g }t        «       }t        d| dz   «      D ]Ã  }t        |z  }t	        |«      }|st        d|› d�«        nœt        |«      }|st        d|› d�«        n~|D �cg c]  }|d   |vsŒ|‘Œ }}|j                  d„ |D «       «       |j                  |«       t        d|› dt        |«      › d	t        |«      › d
�«       t        j                  d«       ŒÅ t        dt        |«      › d�«       g }	t        |d«      D �]f  \  }}
t	        |
d   «      }|s$t        d|› dt        |«      › d|
d   d d › �«       Œ;t        ||
d   «      }|d   s$t        d|› dt        |«      › d|
d   d d › �«       Œs|d   xs |
d   }|d   xs |
d   }|d   }|d   }|r[t        d„ t        j                   d|«      D «       «      }|s3|D �cg c]  }d|d   › d|d   › d�‘Œ }}|dz   dj#                  |«      z   }|	j%                  t&        ||||
d   |
d   |rt)        j*                  |d¬ «      nd!d"d#œ«       |d$z  d%k(  rt        d|› dt        |«      › d&�«       t        j                  d'«       �Œi t        d(t        |	«      › d)�«       t-        |	t.        «       t        d*t        |	«      › d+�«       y c c}w c c}w ),Né   r
   z[PAGE z] fetch failed, stoppingz] 0 items, stoppingr5   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r5   N© )Ú.0rS   s     r   ú	<genexpr>zmain.<locals>.<genexpr>Æ   s   è ø€ Ò, �A�e•HÑ,ùs   ‚z] +z items (total ú)g      ð?u   
åˆ—è¡¨å…± u    æ�¡, å¼€å§‹æŠ“è¯¦æƒ…...z  [ry   z] SKIP fetch: r?   é(   r|   u   ] SKIP ç©ºæ­£æ–‡: r{   rC   r}   c              3   ó†   K  — | ]9  }t        j                  d |j                  dd«      t         j                  «      –— Œ; y­w)rw   r>   r   N)r   rH   r*   r€   )r‹   r   s     r   rŒ   zmain.<locals>.<genexpr>Ý   s?   è ø€ ò QØô Ÿ)™)Ð$UÐWX×W\ÑW\Ð]cÐegÓWhÔjl×jnÑjn×oñ Qùs   ‚?Az<a\s+href="([^"]+)"z<p><a href="z">rk   z</a></p>rg   F)Úensure_asciiz[]r   )Ú	site_namer?   r{   r|   Ú
source_urlr5   r}   Úindustryé
   r   u   ] å·²å¤„ç�†...g      à?u   
æœ‰æ•ˆ u    æ�¡, å…¥åº“...u   å®Œæˆ�! æ–°å¢ž/æ›´æ–° u    æ�¡)r   rK   r(   ÚLIST_TPLr9   r1   rT   ÚupdateÚextendr   r3   r4   Ú	enumerater†   Úanyr   r   ÚjoinrJ   Ú	SITE_NAMEÚjsonÚdumpsr   ÚCATEGORY)r   Ú	all_itemsrQ   ÚpgÚlist_urlrM   rN   rS   Ú	new_itemsÚvalidÚitemÚdetail_htmlÚdr?   r{   r|   ÚattÚhas_attr   Úpartss                       r   Úmainrª   ´   s  € Ü‹L€EÙØˆà€IÜ‹5€DÜ�A�u˜q‘yÓ!ò ˆÜ˜b‘=ˆÜ˜(“Oˆ	ÙÜ�F˜2˜$Ð6Ð7Ô8ÙÜ" 9Ó-ˆÙÜ�F˜2˜$Ð1Ð2Ô3ÙØ %Ö>˜1¨¨5©¸Ò)=’QÐ>ˆ	Ð>Ø�‰Ñ, eÔ,Ô,Ø×Ñ˜Ô#Ü��r�d˜#œc )›nÐ-¨^¼CÀ	»NÐ;KÈ1ÐMÔNÜ�
‰
�3�ðô  
ˆLœ˜Y›Ð(Ð(@Ð
AÔBà€EÜ˜Y¨Ó*ó  ‰ˆˆ4Ü˜D ™KÓ(ˆÙÜ�C˜�s˜!œC 	›NÐ+¨>¸$¸w¹-ÈÈÐ:LÐ9MÐNÔOØÜ˜;¨¨U©Ó4ˆØ�Š|Ü�C˜�s˜!œC 	›NÐ+Ð+=¸dÀ7¹mÈCÈRÐ>PÐ=QÐRÔSØØ�'‘
Ò+˜d 7™mˆØ�Z‘=Ò0 D¨¡LˆØ�I‘,ˆØ�ÑˆáÜñ QÜ#%§;¡;Ð/EÀwÓ#OôQó QˆGáØQTÖUÈA˜<¨¨%© z°°A°f±I°;¸hÒGÐU�ÐUØ! D™.¨4¯9©9°UÓ+;Ñ;�Ø�‰Ü"ØØ ØØ˜u™+Ø˜‘;ÙBEœ4Ÿ:™: c¸Õ>È4Øñ	
ô 		ð ˆr‰6�QŠ;Ü�C˜�s˜!œC 	›NÐ+¨>Ð:Ô;Ü�
‰
�3ŽðA ôD 
ˆI”c˜%“j�\ Ð
1Ô2Ü�UœHÔ%Ü	Ð"¤3 u£: ,¨dÐ
3Õ4ùò[ ?ùò6 Vs   Á6KÂKÇKÚ__main__)$Ú__doc__Úosr   r   r3   rœ   Úhtmlr   r)   Úbs4r   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rG   r•   r›   rž   Ú	MAX_PAGESr+   r,   ÚCUTOFFr   r!   r9   rT   rs   r†   rª   Ú__name__rŠ   r   r   ú<module>rº      sÆ   ðñ÷ 1× 0× 0Û Ý Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à'€ØÐ7Ñ7€Ø0€	Ø€Ø€	ð DØOØ'ñ€ð
 €à	€òòòòò>'òT_òD>5ðB ˆzÒÙ…Fð r   