Ë
    Ê|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
 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZdZdZd	Zd
ZedddœZ ej0                  dej2                  «      Z ej0                  dej2                  «      Zg d¢Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)uÖ  
é¹¤å±±å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-é€šçŸ¥å…¬å‘Š çˆ¬è™«
ç«™ç‚¹: https://www.heshan.gov.cn/zwgk/xxgk/hsstyz/gzdt/tzgg/
NFCMS é�™æ€�åˆ†é¡µ: createPageHTML(25,0,"index","html") -> index.html / index_N.html
åˆ—è¡¨é“¾æŽ¥: .../content/post_3533019.html (æ³¨æ„�åŒ¹é…� post_ å�Žæ•°å­—)
è¯¦æƒ…å®¹å™¨: div.view.TRS_UEDITOR (class="view TRS_UEDITOR trs_paper_default trs_web")
æ­£æ–‡ä¿�ç•™ <p> HTML, é™„ä»¶ urljoin ç»�å¯¹åŒ–, æ ‡é¢˜æ¸…æ´—ã€‚
ç”¨æ³•: python3 crawl_heshan_tzgg.py [--pages=N]
é    N)ÚBeautifulSoup)Úurljoin)Úpush_to_searchdbu%   é¹¤å±±å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šz5https://www.heshan.gov.cn/zwgk/xxgk/hsstyz/gzdt/tzgg/zBhttps://www.heshan.gov.cn/zwgk/xxgk/hsstyz/gzdt/tzgg/index_{}.htmlzoMozilla/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+xmlzzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languagez?href="([^"]*content/post_(\d+)[^"]*)"[^>]*>\s*([^<]{4,120})</a>z:\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar|wps|et|dps|ofd)$)zdiv.view.TRS_UEDITORzdiv.viewzdiv.contentzdiv.articlec                  óÎ   — t         j                  dd  D ]O  } | j                  d«      rt        | j	                  d«      d   «      c S | j                  «       sŒDt        | «      c S  y )Né   z--pages=ú=)ÚsysÚargvÚ
startswithÚintÚsplitÚisdigit)Úas    ú&/root/gov_crawler/crawl_heshan_tzgg.pyÚparse_pages_argr   #   sU   € Ü�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMð	ð
 ó    c                 óÞ   — dd l }|j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )Nr   Ú z&middot;|&nbsp;|\u200b|\ufeffú\s+ú u   ^[â€¢Â·\-â€“â€”]\s*)ÚhtmlÚunescapeÚreÚsubÚstrip)ÚtitleÚhtml_mods     r   Úclean_titler   ,   s]   € ÛØ×Ñ˜ešk rÓ*€EÜ�F‰FÐ3°R¸Ó?€EÜ�F‰F�6˜3 Ó&€EÜ�F‰FÐ)¨2¨uÓ5€EØ�;‰;‹=Ðr   c                 óÀ   — 	 |j                  | d¬«      }d|_        |j                  dk(  r|j                  S dS # t        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)Né   )Útimeoutzutf-8éÈ   r   z    [WARN] fetch fail ú: )ÚgetÚencodingÚstatus_codeÚtextÚ	ExceptionÚprint)ÚurlÚsessionÚrÚes       r   Úfetchr/   5   sc   € ðØ�K‰K˜ RˆKÓ(ˆØˆŒ
ØŸ™¨#Ò-ˆq�v‰vÐ5°2Ð5øÜò ÜÐ& s e¨2¨a¨SÐ1Ô2Üûðús   ‚49 ·9 ¹	AÁAÁAc                 ój  ‡— g }t         j                  | «      D ]—  }|j                  d«      |j                  d«      |j                  d«      j                  «       c}}Št	        ‰«      Š‰rt        ‰«      dk  rŒat        ˆfd„dD «       «      rŒvt        ||«      }|j                  ‰||ddœ«       Œ™ |S )	u'   è§£æž�åˆ—è¡¨é¡µ -> [(title, url, date)]r   é   é   é   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0Úxr   s     €r   ú	<genexpr>zparse_list.<locals>.<genexpr>G   s   øè ø€ Òi˜aˆq�EŒzÑiùs   ƒ)u   é¦–é¡µu   é‚®ç®±u   æ�œç´¢u	   æ— éšœç¢�u   åœ°å›¾u   ç½‘ç«™åœ°å›¾r   )r   r+   Úpost_idÚdate)	ÚLINK_PATÚfinditerÚgroupr   r   ÚlenÚanyr   Úappend)r   Úlist_urlÚitemsÚmÚhrefr9   r+   r   s          @r   Ú
parse_listrE   ?   s©   ø€ à€EÜ×Ñ˜tÓ$ò SˆØ Ÿw™w q›z¨1¯7©7°1«:°q·w±w¸q³z×7GÑ7GÓ7IÐˆˆg�uÜ˜EÓ"ˆÙœ˜E›
 QšØÜÓiÐ#hÔiÔiØÜ�h Ó%ˆØ�‰˜u¨S¸WÈbÑQÕRðSð €Lr   c                 ó0  — t        | d«      }d}t        j                  d| t        j                  «      }|rt	        |j                  d«      «      }|s.|j                  d«      }|rt	        |j                  d¬«      «      }|sAt        j                  d| t        j                  «      }|rt	        |j                  d«      «      }|s@|j                  d	«      }|r-t	        |j                  d¬«      j                  d
«      d   «      }d}t        j                  d| t        j                  «      }|r|j                  d«      }|s8t        j                  d| t        j                  «      }|r|j                  d«      }|s%|j                  d«      }|r|j                  d¬«      }|s)t        j                  d| «      }|r|j                  d«      }d}t        D ]*  }|j                  |«      }|sŒ|j                  d¬«      sŒ* n |€||dg fS g }	t        «       }
|j                  d«      |j                  dd¬«      z   D ]Ö  }|j                  d«      xs dj                  «       }|r|j!                  d«      rŒ:t"        j                  |j%                  «       «      sd|j%                  «       v sŒpt'        ||«      }||
v rŒ�|
j)                  |«       t	        |j                  d¬«      «      xs |j                  d«      d   }|	j+                  ||dœ«       ŒØ g }|j                  g d¢«      D �]Ç  }|j,                  dk(  �r|j/                  d«      s"|j                  d«      s|j                  d«      rŒH|j                  dd¬«      D ]I  }|j                  d«      xs dj                  «       }|sŒ)|j!                  d«      rŒ;t'        ||«      |d<   ŒK |j                  d«      D ]<  }|j                  d«      xs |j                  d«      xs d}|sŒ.t'        ||«      |d<   Œ> |j                  d d¬«      }|s�Œ|j+                  t1        |«      «       �Œ*|j,                  dk(  r|j+                  t1        |«      «       �ŒU|j,                  dk(  s�Œf|j                  d«      xs |j                  d«      xs d}|s�Œ’t'        ||«      }|j                  d!d«      }|j+                  d"|› d#|› d$�«       �ŒÊ |	D ]   }|j+                  d%|d&   › d'|d(   › d)�«       Œ" d*j3                  |«      }t        j4                  d+d|«      }t        j4                  d,d|«      }|rt7        |«      d-k  r,|j                  d«      s|j                  d d¬«      }|rd.|› d/�}||||	fS )0uH   æ��å�– æ ‡é¢˜/æ—¥æœŸ/æ­£æ–‡(ä¿�ç•™ p HTML, é™„ä»¶ç»�å¯¹åŒ–)/é™„ä»¶åˆ—è¡¨zhtml.parserr   zE<meta[^>]*name=["\']ArticleTitle["\'][^>]*content=["\']([^"\']*)["\']r   z	div.titleT)r   zE<meta[^>]*content=["\']([^"\']*)["\'][^>]*name=["\']ArticleTitle["\']r   Ú_r   z@<meta[^>]*name=["\']PubDate["\'][^>]*content=["\']([^"\']*)["\']z@<meta[^>]*content=["\']([^"\']*)["\'][^>]*name=["\']PubDate["\']z	span.timez(20\d{2}-\d{1,2}-\d{1,2})Nz&#fujian a[href], .m-attachment a[href]r   )rD   rD   Ú
javascriptÚdownloadú/éÿÿÿÿ)Únamer+   )ÚpÚtableÚimgrM   rN   rO   Úsrczdata-srcr   Úaltz<p><img src="z" alt="z"></p>z<p><a href="r+   z">rL   z</a></p>ú
z<[^>]+>r   é2   z<p>z</p>)r   r   ÚsearchÚIr   r=   Ú
select_oneÚget_textÚfindr   Ú
CONTAINERSÚsetÚselectÚfind_allr%   r   r   Ú
ATTACH_EXTÚlowerr   Úaddr@   rL   Úfind_parentÚstrÚjoinr   r>   )r   Úpage_urlÚsoupr   rC   Útr:   Úbody_elÚselÚattachmentsÚseen_attr   rD   ÚfullrL   ÚpartsÚelÚhrO   rP   ÚtxtrQ   ÚattÚcontentÚextracted_texts                            r   Úextract_detailrr   N   s  € ä˜˜}Ó-€Dð €EÜ
�	‰	ÐZÐ\`Ôbd×bfÑbfÓg€AÙÜ˜AŸG™G A›JÓ'ˆÙØ�O‰O˜KÓ(ˆÙÜ §
¡
° 
Ó 6Ó7ˆEÙÜ�I‰IÐ^Ð`dÔfh×fjÑfjÓkˆÙÜ §¡¨£
Ó+ˆEÙØ�I‰I�gÓˆÙÜ §
¡
° 
Ó 6× <Ñ <¸SÓ AÀ!Ñ DÓEˆEð €DÜ
�	‰	ÐUÐW[Ô]_×]aÑ]aÓb€AÙØ�w‰w�q‹zˆÙÜ�I‰IÐYÐ[_Ôac×aeÑaeÓfˆÙØ—7‘7˜1“:ˆDÙØ�O‰O˜KÓ(ˆÙØ—:‘: D�:Ó)ˆDÙÜ�I‰IÐ2°DÓ9ˆÙØ—7‘7˜1“:ˆDð €GÜò ˆØ—/‘/ #Ó&ˆÚ�w×'Ñ'¨dÐ'Õ3Ùðð €Ø�d˜B Ð"Ð"ð €KÜ‹u€HØ�[‰[ÐAÓBÀW×EUÑEUÐVYÐ`dÐEUÓEeÑeò 
<ˆØ—‘�f“Ò# ×*Ñ*Ó,ˆÙ�t—‘ |Ô4ØÜ×Ñ˜TŸZ™Z›\Ô*¨j¸D¿J¹J»LÒ.HÜ˜8 TÓ*ˆDØ�xÑØØ�L‰L˜ÔÜ˜qŸz™z°˜zÓ5Ó6ÒM¸$¿*¹*ÀS»/È"Ñ:MˆDØ×Ñ¨°TÑ:Õ;ð
<ð €EØ×ÑÒ4Ó5ó GˆØ�7‰7�c‹>Ø�~‰~˜gÔ&¨"¯'©'°'Ô*:¸b¿g¹gÀc¼lØØ—[‘[ ¨4�[Ó0ò 5�Ø—U‘U˜6“]Ò( b×/Ñ/Ó1�Ú˜QŸ\™\¨,Õ7Ü '¨°!Ó 4�A�f’Ið5ð —{‘{ 5Ó)ò 8�Ø—g‘g˜e“nÒA¨¯©°
Ó(;ÒA¸r�ÚÜ!(¨°3Ó!7�C˜’Jð8ð —+‘+˜c¨�+Ó.ˆCÛØ—‘œS ›WÖ%Ø�W‰W˜ÒØ�L‰Lœ˜R›Ö!Ø�W‰W˜ÔØ—&‘&˜“-Ò; 2§6¡6¨*Ó#5Ò;¸ˆCÛÜ˜x¨Ó-�Ø—f‘f˜U BÓ'�Ø—‘˜}¨T¨F°'¸#¸¸fÐEÖFð-Gð0 ò IˆØ�‰�| C¨¡J <¨r°#°f±+°¸hÐGÕHðIð �i‰i˜Ó€Gä—V‘V˜J¨¨GÓ4€NÜ—V‘V˜F B¨Ó7€NÙ”s˜>Ó*¨RÒ/¸¿¹ÀgÔ9NØ×Ñ˜s¨$ÐÓ/ˆÙØ˜C˜5 �oˆGà�$˜ Ð,Ð,r   c                  ó°  — t        «       xs d} t        dt        › d| › �«       t        j                  «       }|j
                  j                  t        «       g }t        «       }t        d| dz   «      D ]ÿ  }|dk(  rt        nt        j                  |dz
  «      }t        ||«      }|rt        |«      dk  rt        d|› d|› d�«        n¬t        |t        «      }|D �cg c]  }|d	   |vsŒ|‘Œ }	}|	D ]  }|j!                  |d	   «       Œ |j#                  |	«       t        d|› d
t        |«      › dt        |	«      › dt        |«      › �«       |	st        d«        nt%        j&                  d«       �Œ t        dt        |«      › d�«       g }
d}d}d}t)        |«      D �]/  \  }}t        |d	   |«      }|s4|
j+                  t        |d   |d   d|d	   |d	   t,        ddœ«       |dz  }ŒLt/        ||d	   «      \  }}}}|s|d   }|s|d   }|j1                  «       s|dz  }t3        j4                  d|«      r|dz  }|t        |«      z  }|
j+                  t        ||||d	   |d	   t,        |rt7        j8                  |d¬«      nddœ«       |dz   dz  dk(  r#t        d|dz   › dt        |«      › d|d d › �«       t%        j&                  d«       �Œ2 t;        |
t        ¬«       |
D �cg c]  }|d    sŒ	|d    ‘Œ }}t        d!t        › d"t        |
«      › d#|› d$|› d%|› �
«       t        d&|rt=        |«      nd'› d(|rt?        |«      nd'› �«       y c c}w c c}w ))Né   z[HeshanTZGG] SITE=z max_pages=r   r#   z  Page u   : ç©º/å¤±è´¥(u	   ), å�œæ­¢r+   r$   u   æ�¡(æ–°u   ) ç´¯è®¡u     æ— æ–°é“¾æŽ¥, å�œæ­¢ç¿»é¡µgš™™™™™Ù?u   
å…± u    æ�¡, æŠ“è¯¦æƒ…...r   r   r:   r   )Ú	site_namer   Úpub_daterp   Ú
source_urlr+   Úcategoryrh   z<p[\s>]F)Úensure_asciié
   z  [rJ   z] é(   g333333Ó?)Úbatch_labelrv   u	   
ç«™ç‚¹: u	    é‡‡é›†: u    ç©ºæ­£æ–‡: u	    å�«<p>: u	    é™„ä»¶: u   æ—¥æœŸèŒƒå›´: ú-z ~ ) r   r*   Ú	SITE_NAMEÚrequestsÚSessionÚheadersÚupdateÚHEADERSrZ   ÚrangeÚLIST_URLÚ	BASE_LISTÚformatr/   r>   rE   r_   ÚextendÚtimeÚsleepÚ	enumerater@   ÚCATEGORYrr   r   r   rT   ÚjsonÚdumpsr   ÚminÚmax)Ú	max_pagesr,   Ú	all_itemsÚseenÚpgr+   r   rB   r7   Ú	new_itemsÚresultsÚ
empty_bodyÚwith_pÚ	att_totalÚiÚitemr   r:   rp   rh   r-   Údatess                         r   Úmainr�   ·   sv  € ÜÓ!Ò' R€IÜ	Ðœy˜k¨°Y°KÐ
@ÔAÜ×ÑÓ €GØ‡O�O×Ñœ7Ô#à€IÜ‹5€DÜ�A�y 1‘}Ó%ò ˆØ š'�h¤y×'7Ñ'7¸¸Q¹Ó'?ˆÜ�S˜'Ó"ˆÙ”s˜4“y 3’Ü�G˜B˜4˜}¨S¨E°Ð;Ô<ÙÜ˜4¤Ó*ˆØ %Ö>˜1¨¨5©¸Ò)=’QÐ>ˆ	Ð>Øò 	ˆAØ�H‰H�Q�u‘XÕð	à×Ñ˜Ô#Ü�˜�t˜2œc %›j˜\¨´°Y³Ð0@ÀÌÈYËÐHXÐYÔZÙÜÐ0Ô1ÙÜ�
‰
�3Žðô" 
ˆF”3�y“>Ð"Ð"4Ð
5Ô6Ø€GØ€JØ€FØ€IÜ˜YÓ'ó ‰ˆˆ4Ü�T˜%‘[ 'Ó*ˆÙØ�N‰N¬¸TÀ'¹]ÐX\Ð]cÑXdØ')¸¸e¹ÈTÐRWÉ[Ü(0ÀñEô Fð ˜!‰OˆJØÜ,:¸4ÀÀeÁÓ,MÑ)ˆˆt�W˜kÙØ˜‘MˆEÙØ˜‘<ˆDØ�}‰}ŒØ˜!‰OˆJÜ�9‰9�Z Ô)Ø�a‰KˆFØ”S˜Ó%Ñ%ˆ	Ø�‰¤Y¸ÈDÐ]dØ&*¨5¡k¸$¸u¹+ÔS[ÙVa¤t§z¡z°+ÈEÕ'RÐgiñkô 	lð �‰E�R‰<˜1ÒÜ�C˜˜!™�u˜Aœc )›nÐ-¨R°°c°r°
¨|Ð<Ô=Ü�
‰
�3Žð/ô2 �W¬)Õ4Ø$+Ö=˜q¨q°«}ˆQˆz‹]Ð=€EÐ=Ü	ˆJ”y�k ¬3¨w«<¨.¸ÀZÀLÐPYÐZ`ÐYaÐajÐktÐjuÐ
vÔwÜ	ˆN©œ3˜uœ:°CÐ8¸É%¼CÀ¼JÐUXÐ;YÐ
ZÕ[ùòW ?ùòR >s   ÃMÃ)MË'
MË2MÚ__main__)$Ú__doc__Úosr
   r   r‰   r�   r   Úbs4r   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r~   rŒ   r…   r†   ÚUArƒ   ÚcompilerU   r;   r]   rY   r   r   r/   rE   rr   r�   Ú__name__r5   r   r   ú<module>r¬      så   ðñ÷ × Ó Û Ý Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à3€	Ø€ØB€ØP€	àv€ØÐ'HÐ]mÑ
n€ð ˆ2�:‰:ÐXÐZ\×Z^ÑZ^Ó_€ØˆR�Z‰ZÐUÐWY×W[ÑW[Ó\€
âO€
òòòòòf-òR:\ðz ˆzÒÙ…Fð r   