Ë
    -wjw!  ã                   óN  — 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 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ ddlmZmZ  ej$                  «        ed¬«      z
  j'                  d«      Zd	Zd
ZdZdZdeez   dz   dœZd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rW ej@                  «       Z!e!jE                  de#d¬«       e!jI                  «       Z% ee%jL                  «      Z' e(de› de'› d�«       yy)u¡  crawl_huizhou_hpslgg.py - æƒ å·žå¸‚-çŽ¯è¯„å�—ç�†å…¬å‘Š

ç«™ç‚¹: https://shj.huizhou.gov.cn/zwgk/jsxmhpglxxgk/hpslgg/
CMS: NFCMS (å¹¿ä¸œå�—æ–¹ç½‘ç³»ç½‘ç«™ç¾¤, window.NFCMS_SITE_ID=752011)
åˆ—è¡¨: UL.ul_art_row > LI.li_art_title > A[title] æ ‡é¢˜ + LI.li_art_date æ—¥æœŸ(YYYY-MM-DD)
åˆ†é¡µ: é¦–é¡µ index.html + index_N.html (N=2..8, æ— index_1; æ¯�é¡µ20æ�¡)
âš ï¸� WAF: åˆ†é¡µé¡µé¡» Chrome UA + Referer, å�¦åˆ™ nginx ç›´æŽ¥ 404
è¯¦æƒ…: TD.artTitle.xltd_9 æ ‡é¢˜ + meta PubDate æ—¥æœŸ + TD.artContent.xltd_10 > DIV#divZoom æ­£æ–‡(å¹³è¡¡div, UEditorè¡¨æ ¼)
é™„ä»¶: TD.xltd_11 > div.m-attachment > div.f-APPENDIX > a.pdf (ç»�å¯¹URL) â†’ è½¬ <p><a>é™„ä»¶å��</a></p> æ®µè�½åµŒå…¥
é    N)Úurljoin)Úpush_to_searchdb)ÚdatetimeÚ	timedeltaiG  )Údaysz%Y-%m-%du   æƒ å·žå¸‚-çŽ¯è¯„å�—ç�†å…¬å‘Šu   å¹¿ä¸œzhttps://shj.huizhou.gov.cnz/zwgk/jsxmhpglxxgk/hpslgg/zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36ú
index.html)z
User-AgentÚRefererc                 óÒ   — 	 t        j                  | dt        d¬«      }d|_        |j                  S # t
        $ r+}t        d| › d|› �t        j                  ¬«       Y d }~yd }~ww xY w)	N)é   é   F)ÚtimeoutÚheadersÚverifyzutf-8z[WARN] fetch failed: z - )ÚfileÚ )	ÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚrÚes      ú)/root/gov_crawler/crawl_huizhou_hpslgg.pyÚfetchr      sZ   € ðÜ�L‰L˜ g´wÀuÔMˆØˆŒ
Ø�v‰vˆøÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   ‚/2 ²	A&»!A!Á!A&c                 óà  — t        j                  || t         j                  «      }|sy| j                  d|j	                  «       «      }|dk(  ry|dz   }d}t        j
                  d| |d t         j                  «      D ]j  }|j                  d«      j                  d«      s |j                  d«      j                  d	«      r|dz  }ŒI|dz  }|dk(  sŒT| |||j	                  «       z    c S  | |d S )
u&   å¹³è¡¡ div åŒ¹é…� (å¤§å°�å†™ä¸�æ•�æ„Ÿ)r   ú>éÿÿÿÿé   z<div[\s>]|</div>Nr   z<divz<DIV)ÚreÚsearchÚIÚfindÚstartÚfinditerÚgroupÚ
startswith)ÚhtmlÚopen_tag_reÚmÚgtÚiÚdepthÚmms          r   Úextract_balanced_divr3   )   sÛ   € ä
�	‰	�+˜t¤R§T¡TÓ*€AÙØØ	�‰�3˜Ÿ™›	Ó	"€BØ	ˆR‚xØØ
ˆQ‰€AØ€EÜ�k‰kÐ-¨t°A°B¨x¼¿¹Ó>ò .ˆØ�8‰8�A‹;×!Ñ! &Ô)¨R¯X©X°a«[×-CÑ-CÀFÔ-KØ�Q‰J‰Eà�Q‰JˆEØ˜‹zØ˜A˜a "§(¡(£*™nÐ-Ò-ð.ð ��ˆ8€Oó    c                 ó,  — | dk(  rt         t        z   dz   }nt         t        z   d| dz   › d�z   }t        |«      }|sg S g }t        j                  d|t        j
                  «      D �],  }|j                  d«      |j                  d«      |j                  d«      |j                  d	«      j                  «       f\  }}}}|xs t        j                  d
d|«      j                  «       }	t        j                  dd|	«      j                  «       }	t        j                  dd|	«      }	t        |	«      d	k  rŒÍd|vsd|vrŒÖt        t         t        z   |«      }t        j                  d|«      }
|
r|
j                  d«      nd}|j                  |||	dœ«       �Œ/ |S )uA   åˆ—è¡¨é¡µ: 0=é¦–é¡µ index.html, N=index_N.html (N>=2, æ— index_1)r   r   Úindex_r#   z.htmlz{<LI class="li_art_title">\s*<A[^>]*title="([^"]*)"[^>]*href="([^"]+)"[^>]*>(.*?)</A>.*?<LI class="li_art_date">([^<]*)</LI>é   é   é   ú<[^>]+>r   ú\s+ú õ   ^\s*(?:&middot;|&nbsp;|Â·|\s)+z/content/post_z/hpslgg/ú(\d{4}-\d{2}-\d{2}))r   Úpub_dateÚtitle)ÚBASEÚLIST_DIRr   r$   r)   ÚDOTALLr*   ÚstripÚsubÚlenr   r%   Úappend)Úpage_idxr   r,   Úitemsr.   Ú
title_attrÚhrefÚ
title_htmlÚ	date_textr@   ÚmdÚpds               r   Ú
fetch_listrP   =   ss  € à�1‚}Ü”X‰o Ñ,‰ä”X‰o &¨°A©¨°eÐ <Ñ<ˆÜ�‹:€DÙØˆ	Ø€EÜ�[‰[ð4Ø59¼2¿9¹9óFó Cˆð 34·'±'¸!³*¸a¿g¹gÀa»jÈ!Ï'É'ÐRSË*ÐVW×V]ÑV]Ð^_ÓV`×VfÑVfÓVhÐ2hÑ/ˆ
�D˜* iØÒAœrŸv™v j°"°jÓA×HÑHÓJˆÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆä—‘Ð8¸"¸eÓDˆÜˆu‹:˜Š>Øà 4Ñ'¨:¸TÑ+AØÜ”dœX‘o tÓ,ˆÜ�Y‰YÐ-¨yÓ9ˆÙˆR�X‰X�aŒ[ BˆØ�‰˜S¨b¸5ÑAÖBð!Cð" €Lr4   c           	      ó”  ‡ — t        ‰ «      }|syd}t        j                  d|t        j                  t        j                  z  «      }|r‘t        j
                  dd|j                  d«      t        j                  t        j                  z  ¬«      }t        j
                  dd|«      j                  «       }t        j
                  dd	|«      j                  «       }|s7t        j                  d
|«      }|r|j                  d«      j                  «       }t        j
                  dd|«      }t        j
                  dd|«      }d}t        j                  d|«      }|r8t        j                  d|j                  d«      «      }|r|j                  d«      }|s)t        j                  d|«      }|r|j                  d«      }d}t        |d«      }|j                  «       r|j                  «       }|j                  «       s,t        |d«      }|j                  «       r|j                  «       }t        j
                  dd|t        j                  t        j                  z  ¬«      }t        j
                  dd|t        j                  t        j                  z  ¬«      }t        j
                  dd|t        j                  ¬«      }t        j
                  dˆ fd„|«      }t        j
                  dˆ fd„|«      }g }	t        j                  d|t        j                  «      }|rÅt        j                  d|j                  d«      t        j                  «      D ]Ž  }
|
j                  d«      j                  «       t        j
                  dd|
j                  d«      «      j                  «       }}|sŒY|j                  d«      r	t        |z   }|	j                  d|› d|xs d› d �«       Œ� |	r%|j                  «       d!z   d!j                  |	«      z   }t        j
                  d"d|«      }t        j
                  d#d|«      }|||j                  «       fS )$uY   è¯¦æƒ…é¡µ: artTitle æ ‡é¢˜ + PubDate æ—¥æœŸ + divZoom æ­£æ–‡ + f-APPENDIX é™„ä»¶è½¬æ®µè�½)r   r   r   r   z2<TD[^>]*class="[^"]*artTitle[^"]*"[^>]*>(.*?)</TD>z!<DIV[^>]*artSource[^>]*>.*?</DIV>r#   )Úflagsr:   r;   r<   z/<meta\s+name="ArticleTitle"\s+content="([^"]+)"r=   uE   _(æƒ å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€|æƒ å·žå¸‚|æƒ å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ç½‘ç«™)$z*<meta\s+name="PubDate"\s+content="([^"]+)"r>   u"   å�‘å¸ƒæ—¶é—´ï¼š(\d{4}-\d{2}-\d{2})z<div[^>]*id="divZoom"[^>]*>z*<TD[^>]*class="[^"]*artContent[^"]*"[^>]*>z<script.*?</script>z<style.*?</style>z^<div[^>]*id="divZoom"[^>]*>\s*z,href="(?!https?://|//|#|javascript:)([^"]+)"c                 óB   •— dt        ‰| j                  d«      «      › d�S )Nzhref="r#   ú"©r   r*   ©r2   r   s    €r   ú<lambda>zfetch_detail.<locals>.<lambda>‡   s    ø€  &¬°°b·h±h¸q³kÓ)BÐ(CÀ1Ð E€ r4   zsrc="(?!https?://|//)([^"]+)"c                 óB   •— dt        ‰| j                  d«      «      › d�S )Nzsrc="r#   rT   rU   rV   s    €r   rW   zfetch_detail.<locals>.<lambda>‰   s    ø€  %¬°°R·X±X¸a³[Ó(AÐ'BÀ!Ð D€ r4   z6<div[^>]*class="[^"]*f-APPENDIX[^"]*"[^>]*>(.*?)</div>ú$<a[^>]*href="([^"]+)"[^>]*>(.*?)</a>r7   ú/z<p><a href="z">õ   é™„ä»¶z</a></p>ú
z%^(<p[^>]*>(\s*(<br\s*/?>)?\s*)?</p>)+z%(<p[^>]*>(\s*(<br\s*/?>)?\s*)?</p>)+$)r   r$   r%   rC   r&   rE   r*   rD   r3   r)   r+   rA   rG   ÚrstripÚjoin)r   r,   r@   r.   ÚsegrM   rN   ÚcontentÚcÚ	attach_psÚamÚhÚts   `            r   Úfetch_detailrf   [   sY  ø€ ä�‹:€DÙØà€EÜ
�	‰	ÐGÈÌrÏyÉyÔ[]×[_Ñ[_ÑO_Ó`€AÙÜ�f‰fÐ9¸2¸q¿w¹wÀq»zÔQS×QZÑQZÔ]_×]aÑ]aÑQaÔbˆÜ—‘�z 2 sÓ+×1Ñ1Ó3ˆÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙÜ�I‰IÐHÈ$ÓOˆÙØ—G‘G˜A“J×$Ñ$Ó&ˆEÜ�F‰FÐ4°b¸%Ó@€EÜ�F‰FÐ[Ð]_ÐafÓg€Eà€IÜ
�	‰	Ð?ÀÓF€AÙÜ�Y‰YÐ-¨q¯w©w°q«zÓ:ˆÙØŸ™ ›ˆIÙÜ�I‰IÐ;¸TÓBˆÙØŸ™ ›
ˆIà€GÜ˜TÐ#AÓB€AØ‡w�w„yØ—'‘'“)ˆØ�=‰=Œ?Ü  Ð'TÓUˆØ�7‰7Œ9Ø—g‘g“iˆGÜ�f‰fÐ+¨R°ÄÇ	Á	ÌBÏDÉDÑ@PÔQ€GÜ�f‰fÐ)¨2¨w¼b¿i¹iÌ"Ï$É$Ñ>NÔO€Gä�f‰fÐ7¸¸WÌBÏDÉDÔQ€Gä�f‰fÐDÛEÀwóP€Gä�f‰fÐ5ÛDÀgóO€Gð €IÜ
�	‰	ÐKÈTÔSU×S\ÑS\Ó]€AÙÜ—+‘+ÐEÀqÇwÁwÈqÃzÔSU×S\ÑS\Ó]ò 	NˆBØ—8‘8˜A“;×$Ñ$Ó&¬¯©¨z¸2¸r¿x¹xÈ»{Ó(K×(QÑ(QÓ(SˆqˆAÚØ—<‘< Ô$Ü˜q™�AØ× Ñ  <°¨s°"°Q²]¸(°OÀ8Ð!LÕMð	Nñ Ø—.‘.Ó" TÑ)¨D¯I©I°iÓ,@Ñ@ˆä�f‰fÐ=¸rÀ7ÓK€GÜ�f‰fÐ=¸rÀ7ÓK€GØ�)˜WŸ]™]›_Ð,Ð,r4   r   c                 óP  — g }t        «       }t        | «      D �]³  }t        |«      }|st        d|dz   › d�«        �n‘t        d|dz   › dt	        |«      › d�«       |D �]j  }|d   r|d   t
        k  rŒ|d   |v rŒ|j                  |d   «       t        |d   «      \  }}}|st        d|d   › �«       ŒX|s|d	   }|xs |d   }	g }
t        j                  d
|t        j                  «      D ]—  }|j                  d«      t        j                  dd|j                  d«      «      j                  «       }}t        j                  d|t        j                  «      sd|j!                  «       v sŒ€|
j#                  |xs d|dœ«       Œ™ |j#                  ||d   |d   |	t$        |d|
rt'        j(                  |
d¬«      ndt*        dœ	«       �Œm �Œ¶ t        dt	        |«      › d�«       |D �cg c]  }|d   j                  «       sŒ|‘Œ }}|rt-        |d«       t	        |«      S c c}w )Nz  Page r#   z: 0 items (stop)ú: ú itemsr?   r   z    SKIP empty content: r@   rY   r:   r   r7   z*\.(pdf|doc|docx|xls|xlsx|zip|rar|caj|wps)$Ú
attachmentr[   )r@   r   F)Úensure_asciiz[])	r@   r   Ú
source_urlr?   Ú	site_namer`   ÚsummaryÚattachmentsÚ
group_namez	  Total: r`   Úhuizhou_hpslgg)ÚsetÚrangerP   r   rF   ÚCUTOFFÚaddrf   r$   r)   rC   r*   rE   rD   r%   r&   ÚlowerrG   Ú	SITE_NAMEÚjsonÚdumpsÚ
GROUP_NAMEr   )Ú	max_pagesÚrecordsÚseenÚpgrI   Úitr@   rM   r`   rO   Úattsrc   rd   re   r   Úvalids                   r   Úrunr‚   �   s   € Ø€GÜ‹5€DÜ�IÓó ˆÜ˜2“ˆÙÜ�G˜B ™F˜8Ð#3Ð4Ô5ÚÜ�˜˜Q™�x˜r¤# e£* ¨VÐ4Ô5Øó 	ˆBØ�*Š~ " Z¡.´6Ò"9ØØ�%‰y˜DÑ ØØ�H‰H�R˜‘YÔÜ(4°R¸±YÓ(?Ñ%ˆE�9˜gÙÜÐ0°°E±°Ð<Ô=ØÙØ˜7™�ØÒ,˜b ™nˆBàˆDÜ—k‘kÐ"IÈ7ÔTV×T]ÑT]Ó^ò D�Ø—x‘x “{¤B§F¡F¨:°r¸2¿8¹8ÀA»;Ó$G×$MÑ$MÓ$O�1�Ü—9‘9ÐJÈAÌrÏtÉtÔTÐXdÐhi×hoÑhoÓhqÒXqØ—K‘K¨!ª-¨xÀÑ BÕCðDð �N‰NØ r¨%¡yÀÀ5Á	Ø¬YÀ7ØÑVZ¬d¯j©j¸ÈEÕ.RÐ`dÜ(ñ	ö ò'	ðô> 
ˆI”c˜'“l�^ 6Ð
*Ô+ØÖ8�1 1 Y¡<×#5Ñ#5Õ#7ŠQÐ8€EÐ8ÙÜ˜Ð 0Ô1Üˆu‹:Ðùò 9s   Ç+H#ÈH#Ú__main__z--pages)ÚtypeÚdefaultz	[RESULT] rh   ri   )r   ))Ú__doc__r   Úosr$   rx   Úargparser   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r   r   ÚnowÚstrftimert   rw   rz   rA   rB   r   r   r3   rP   rf   r‚   Ú__name__ÚArgumentParserÚapÚadd_argumentÚintÚ
parse_argsÚargsÚpagesÚnr   © r4   r   ú<module>rœ      s  ðñ	÷ #× "Ó "Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (ß (à
ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€Ø*€	Ø€
Ø#€Ø'€ð DØ�h‰ Ñ-ñ€òòò(ò<?-óD&ðR ˆzÒØ	 ˆ×	 Ñ	 Ó	"€BØ‡O�O�I C°€OÔ3Ø�=‰=‹?€DÙˆD�J‰J‹€AÙ	ˆI�i�[  1 # VÐ
,Õ-ð r4   