Ë
    ¦°vjW  ã                   ó4  — 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mZ ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ  ej                   «        ed¬«      z
  j#                  d«      ZdZd	d
iZdZedz   ZdZdZd„ Zd„ Zd„ Zdd„Zedk(  rU ej<                  «       ZejA                  de!d¬«       ejE                  «       Z# ee#jH                  ¬«      Z% e&de%› d�«       yy)uª  crawl_zjtz_hjsp.py - å�°å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯è¯„å®¡æ‰¹

ç«™ç‚¹: https://sthjj.zjtz.gov.cn/col/col1229856907/index.html
CMS: jcms æ–°ç‰ˆ unitbuild API
è¯¦æƒ…: meta[PubDate] + h2.tc.pl40 æ ‡é¢˜ + div.article-box æ­£æ–‡
ä¿®å¤�(2026-08-08): â‘ article-box é�žè´ªå©ª(.*?)</div> åœ¨è¡¨æ ¼åµŒå¥—divå¤„æˆªæ–­ â†’ æ­£æ–‡å�Žå�Š+é™„ä»¶ä¸¢å¤±
â‘¡æ”¹ç”¨å¹³è¡¡divåŒ¹é…� â‘¢href/src ç›¸å¯¹è·¯å¾„è½¬ç»�å¯¹(å�« /api-gateway/ ä¸‹è½½é“¾æŽ¥)
é    N)ÚdatetimeÚ	timedelta)Úpush_to_searchdbiG  )Údaysz%Y-%m-%du1   å�°å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å»ºè®¾é¡¹ç›®çŽ¯è¯„å…¬ç¤ºz
User-Agentz6Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0zhttps://sthjj.zjtz.gov.cnz7/api-gateway/jpaas-publish-server/front/page/build/unité
   éS   c           	      óŠ  — t        j                  | t        dœd¬«      }dddddd	d
|dœ}	 t        j                  t
        |dt        d¬«      }d|_        |j                  «       }|j	                  di «      j	                  dd«      }t        j                  d|t        j                  «      }g }|D ]k  \  }	}
}t        j                  dd|«      j                  «       }t        |«      dk  rŒ;|
j!                  d«      r|
nt"        |
z   }|j%                  ||	|dœ«       Œm |S # t        $ r}t        d|› �«       g cY d }~S d }~ww xY w)N)ÚpageNoÚpageSizeF)Úensure_asciiÚbulidstaticÚ3519ÚkyvKoPpKTVXJukG1eJzrfÚcolumnu   å½“å‰�æ �ç›®åˆ—è¡¨ÚnullÚ
1229856907)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdÚ	paramJson©é   é   )ÚparamsÚtimeoutÚheadersÚverifyúutf-8ÚdataÚhtmlÚ z    API error: zY<span class="date">(\d{4}-\d{2}-\d{2})</span>\s*<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"ú\s+é   Úhttp)ÚurlÚpub_dateÚtitle)ÚjsonÚdumpsÚ	PAGE_SIZEÚrequestsÚgetÚAPIÚHEADERSÚencodingÚ	ExceptionÚprintÚreÚfindallÚDOTALLÚsubÚstripÚlenÚ
startswithÚBASEÚappend)Úpage_noÚ
param_jsonr   Úrr#   r$   ÚeÚitemsÚresultsÚpdÚhrefr+   r)   s                ú$/root/gov_crawler/crawl_zjtz_hjsp.pyÚ
fetch_listrH      s7  € Ü—‘ w¼IÑFÐUZÔ[€Jà"¨VØ+¸Ø%°6À\Øñ	€FðÜ�L‰Lœ V°WÄgÐV[Ô\ˆØˆŒ
Ø�v‰v‹xˆØ�x‰x˜ Ó#×'Ñ'¨°Ó3ˆô �J‰JØdØŒb�i‰ió€Eð €GØ ò E‰ˆˆD�%Ü—‘�v˜r 5Ó)×/Ñ/Ó1ˆÜˆu‹:˜Š>ØØ—o‘o fÔ-‰d´4¸$±;ˆØ�‰˜s°¸UÑCÕDðEð €Nøô ò Ü� ˜sÐ#Ô$Ø�	ûðús   «AD Ä	EÄ(D=Ä7EÄ=Ec                 ód  — t        j                  || «      }|sy| j                  d|j                  «       «      }|dk(  ry|dz   }d}t        j                  d| |d «      D ]J  }|j                  d«      j                  d«      r|dz  }Œ)|dz  }|dk(  sŒ4| |||j                  «       z    c S  | |d S )	u½   å¹³è¡¡ div åŒ¹é…�: ä»ŽåŒ¹é…�åˆ°çš„ <div...> çš„ '>' ä¹‹å�Ž, åˆ°å¯¹åº” </div>, è¿”å›žå†…éƒ¨ HTMLã€‚
    ä¿®å¤�é�žè´ªå©ª (.*?)</div> åœ¨æ­£æ–‡å�«åµŒå¥— div(è¡¨æ ¼/é™„ä»¶åŒº)æ—¶æˆªæ–­çš„é—®é¢˜r%   ú>éÿÿÿÿé   z<div[\s>]|</div>Nr   z<div)r6   ÚsearchÚfindÚstartÚfinditerÚgroupr<   )r$   Úopen_tag_reÚmÚgtÚiÚdepthÚmms          rG   Úextract_balanced_divrX   5   s¼   € ô 	�	‰	�+˜tÓ$€AÙØØ	�‰�3˜Ÿ™›	Ó	"€BØ	ˆR‚xØØ
ˆQ‰€AØ€EÜ�k‰kÐ-¨t°A°B¨xÓ8ò .ˆØ�8‰8�A‹;×!Ñ! &Ô)Ø�Q‰J‰Eà�Q‰JˆEØ˜‹zØ˜A˜a "§(¡(£*™nÐ-Ò-ð.ð ��ˆ8€Oó    c                 ó  — t        d«      D ](  }	 t        j                  | dt        d¬«      }d|_         n €yd}t        j                  d|j                  «      }|r|j                  d	«      d d
 nd}t        j                  d|j                  t
        j                  «      }|r4t        j                  dd|j                  d	«      «      j                  «       }|sŒt        j                  d|j                  t
        j                  «      }|r[t        j                  dd|j                  d	«      «      j                  «       }t        j                  d|«      d   j                  «       }d}t        |j                  d«      }|j                  «       r|j                  «       }|j                  «       s6t        |j                  d«      }|j                  «       r|j                  «       }t        j                  dd|t
        j                  t
        j                  z  ¬«      }t        j                  dd„ |«      }t        j                  dd„ |«      }t        j                  dd|«      }|||j                  «       fS #  d }Y �ŒrxY w)Né   r   F)r   r    r!   r"   )r%   r%   r%   r%   z&<meta name="PubDate" content="([^"]*)"rL   r   z<h2[^>]*>(.*?)</h2>z<[^>]+>z<title>\s*([^<]+?)\s*</title>r&   u   [-â€“â€”|_]r   z,<div[^>]*class="[^"]*article-box[^"]*"[^>]*>z(<div[^>]*class="[^"]*article[^"]*"[^>]*>z<script.*?</script>)Úflagsz!href="(?!https?://|//|#)(/[^"]+)"c                 ó8   — dt         › | j                  d«      › d�S )Nzhref="rL   ú"©r=   rQ   ©rW   s    rG   ú<lambda>zfetch_detail.<locals>.<lambda>h   s"   € ÈÌtÈfÐUW×U]ÑU]Ð^_ÓU`ÐTaÐabÐFc€ rY   zsrc="(?!https?://|//)(/[^"]+)"c                 ó8   — dt         › | j                  d«      › d�S )Nzsrc="rL   r^   r_   r`   s    rG   ra   zfetch_detail.<locals>.<lambda>i   s"   € ÀUÌ4È&ÐQS×QYÑQYÐZ[ÓQ\ÐP]Ð]^ÐC_€ rY   z(<p>\s*(<br\s*/?>)?\s*</p>)+$)Úranger/   r0   r2   r3   r6   rM   ÚtextrQ   r8   r9   r:   ÚsplitrX   ÚI)r)   Ú_attemptrA   r+   rS   rE   ÚcontentÚcs           rG   Úfetch_detailrj   I   sì  € Ü˜!“Hò ˆð	Ü—‘˜S¨'¼7È5ÔQˆAØ ˆAŒJÙð	ð 	€yØØ€EÜ
�	‰	Ð;¸Q¿V¹VÓD€AÙˆ�‰�‹�C�R‰ 2€BÜ
�	‰	Ð(¨!¯&©&´"·)±)Ó<€AÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆÙÜ�I‰IÐ6¸¿¹ÄÇ	Á	ÓJˆÙÜ—F‘F˜6 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆEÜ—H‘H˜^¨UÓ3°AÑ6×<Ñ<Ó>ˆEØ€Gä˜QŸV™VÐ%TÓU€AØ‡w�w„yØ—'‘'“)ˆØ�=‰=Œ?Ü  §¡Ð)TÓUˆØ�7‰7Œ9Ø—g‘g“iˆGÜ�f‰fÐ+¨R°ÄÇ	Á	ÌBÏDÉDÑ@PÔQ€GÜ�f‰fÐ9Ñ;cÐelÓm€GÜ�f‰fÐ6Ñ8_ÐahÓi€GÜ�f‰fÐ5°r¸7ÓC€GØ�"�g—m‘m“oÐ%Ð%øð9	Ø‹Aús   �$I7É7I>r   c                 ó¢  — g }t        «       }t        | t        «      }t        |«      D ]Í  }t	        |dz   «      }|st        d|dz   › d�«        n©t        d|dz   › dt        |«      › d�«       |D ]„  }|d   r|d   t        k  rŒ|d   |v rŒ|j                  |d   «       t        |d   «      \  }}}	|s|d   }|s|d   }|	j                  «       sŒb|j                  ||d   |d   |t        |	d	d
œ«       Œ† ŒÏ t        dt        |«      › d�«       |D �
cg c]  }
|
d   j                  «       sŒ|
‘Œ }}
|rt        |d«       t        |«      S c c}
w )NrL   z  Page z: 0 items (stop)z: z itemsr*   r)   r+   r%   )r+   r)   Ú
source_urlr*   Ú	site_namerh   Úsummaryz	  Total: rh   Ú	zjtz_hjsp)ÚsetÚminÚTOTAL_PAGESrc   rH   r5   r;   ÚCUTOFFÚaddrj   r:   r>   Ú	SITE_NAMEr   )Ú	max_pagesÚrecordsÚseenÚpagesÚpgrC   Úitr+   rE   rh   rA   Úvalids               rG   Úrunr}   m   sq  € Ø€GÜ‹5€DÜ�	œ;Ó'€EÜ�E‹lò ˆÜ˜2 ™6Ó"ˆÙÜ�G˜B˜q™D˜6Ð!1Ð2Ô3ÙÜ�˜˜1™�v˜R¤ E£
˜|¨6Ð2Ô3Øò 	ˆBØ�*Š~ " Z¡.´6Ò"9ØØ�%‰y˜DÑ ØØ�H‰H�R˜‘YÔÜ!-¨b°©iÓ!8ÑˆE�2�wÙØ˜7™�ÙØ˜
‘^�Ø—=‘=”?ØØ�N‰NØ r¨%¡yÀÀ5Á	ØÜ&°7Àrñõ ñ	ðô0 
ˆI”c˜'“l�^ 6Ð
*Ô+ØÖ8�1 1 Y¡<×#5Ñ#5Õ#7ŠQÐ8€EÐ8ÙÜ˜ Ô,Üˆu‹:Ðùò 9s   ÄEÄ-EÚ__main__z--pages)ÚtypeÚdefault)rv   zDone: z records)r   )'Ú__doc__ÚsysÚosr/   r6   Úargparser,   r   r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   ÚnowÚstrftimers   ru   r2   r=   r1   r.   rr   rH   rX   rj   r}   Ú__name__ÚArgumentParserÚapÚadd_argumentÚintÚ
parse_argsÚargsry   Úcntr5   © rY   rG   ú<module>r–      s  ðñ÷ -× ,× ,ß (à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€Ø?€	ØÐQÐ
R€Ø"€Ø
ÐFÑF€Ø€	Ø€òò:ò("&óH ðD ˆzÒØ	 ˆ×	 Ñ	 Ó	"€BØ‡O�O�I C°€OÔ3Ø�=‰=‹?€DÙ
˜Ÿ
™
Ô
#€CÙ	ˆF�3�%�xÐ
 Õ!ð rY   