Ë
    5ß©jx   ã                   ó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	m
Z
 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ ddlZddlmZ ddlZddlZ ej,                  ej.                  j0                  «       dZ eej6                  «      D ]=  \  ZZedk(  sŒedz    eej6                  «      k  sŒ% eej6                  edz      «      Z n e� e d e!e«      z   «       d	Z"d
Z#dZ$de$› �Z%dZ& ejN                  e	jP                  «       e
d¬«      z
  jS                  d«      Z*de#de#› d�dœZ+e%› d�Z,dddddddœZ-d%d„Z.d&d„Z/d„ Z0d„ Z1d „ Z2d!„ Z3d"„ Z4d#„ Z5e6d$k(  r e5«        yy)'u1  
é‚—æ±ŸåŒºç”Ÿæ€�çŽ¯å¢ƒå±€ - å�—ç�†å…¬ç¤º (www.hj.gov.cn)
CMS: Hanweb JPAAS unit build API
åˆ—è¡¨: GET /api-gateway/jpaas-publish-server/front/page/build/unit (pageNo=N, 15æ�¡/é¡µ)
è¯¦æƒ…: /zfxxgk/.../art/2026/art_32hex.html, æ­£æ–‡ div.bt-content.zoom
æ³¨æ„�: QAX CloudWAF, IP 121.32.243.73 + Host header
é    N)ÚdatetimeÚtimezoneÚ	timedelta)Úpush_to_searchdb©ÚBeautifulSoupz--pagesé   z[AutoPg] max_pages=u%   é‚—æ±ŸåŒºç”Ÿæ€�çŽ¯å¢ƒå±€-å�—ç�†å…¬ç¤ºzwww.hj.gov.cnz121.32.243.73úhttps://é9   iG  )Údaysz%Y-%m-%dz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z4/zfxxgk/bmzfxxgk/sthjj/fdzdgknr/ywgz/slgs/index.html)z
User-AgentÚHostÚRefererz7/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚohSFVDZIBzRtWYBHxfUyuÚzMuCIPr1ttFFjmmbNGvm6Úcolumnu   åˆ—è¡¨ä¸€listÚydSqlTI4lkGfnjr8THSZ1)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚpageIdc                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   úhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)	Úbs4r   ÚstrÚfind_allÚgetÚ
startswithÚurllibÚparseÚurljoin)ÚtableÚbase_urlr   Útblr   r   r"   r#   s           úcrawl_hanjiang_slgs.pyÚhtml_table_to_htmlr0   7   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                 ó  — t        d«      D ]4  }	 t        j                  | t        |d¬«      }d|_        |j
                  c S  y # t        $ r<}|dk  rt        j                  d«       nt        d| › d|› �«       Y d }~ y Y d }~Œxd }~ww xY w)Né   F)ÚheadersÚtimeoutÚverifyzutf-8é   z	  [WARN] z: )
ÚrangeÚrequestsr'   ÚHEADERSÚencodingÚtextÚ	ExceptionÚtimeÚsleepÚprint)Úurlr5   ÚattemptÚrÚes        r/   ÚfetchrE   E   s   € Ü˜“8ò 
ˆð		Ü—‘˜S¬'¸7È5ÔQˆAØ ˆAŒJØ—6‘6ŠMñ	
øô
 ò 	Ø˜Š{Ü—
‘
˜1•ä˜	 #  b¨¨Ð,Ô-Ýô ûð	ús   �/AÁ	B	Á,BÂB	c                 ó²   — t        t        «      }t        | «      |d<   d|d<   t        j                  j                  |«      }t        dz   |z   }t        |«      S )NÚpageNoÚ15Úrowsú?)ÚdictÚ
API_PARAMSr%   r)   r*   Ú	urlencodeÚAPI_URLrE   )ÚpageÚparamsÚqsrA   s       r/   Úfetch_list_pagerR   S   sO   € Ü”*Ó€FÜ˜4“y€Fˆ8ÑØ€Fˆ6�NÜ	�‰×	Ñ	 Ó	'€BÜ
�C‰-˜"Ñ
€CÜ�‹:Ðr1   c                 ó&  — g }	 t        j                  | «      }|j                  di «      j                  dd«      }t        j                  d|«      D ]´  }|j                  d«      j                  «       }|j                  d«      j                  «       }|j                  d«      j                  «       }|j                  d«      rd	t        z   |z   }n |j                  d
«      sd	t        z   dz   |z   }|sŒ¡|j                  |||f«       Œ¶ |S #  |cY S xY w)NÚdataÚhtmlr   z><a href="([^"]+)"[^>]*>([^<]+)</a>\s*<span>(\d{4}-\d{2}-\d{2})r	   r7   r3   ú/r
   r   )
ÚjsonÚloadsr'   ÚreÚfinditerÚgroupÚstripr(   ÚBASE_IPÚappend)Ú	json_textÚitemsrT   rU   Úmr   ÚtitleÚdates           r/   Úparse_list_jsonrd   \   sÿ   € Ø€EðÜ�z‰z˜)Ó$ˆØ�x‰x˜ Ó#×'Ñ'¨°Ó3ˆô
 �[‰[ØIØóò .ˆð �w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�?‰?˜3ÔØ¤Ñ'¨$Ñ.‰DØ—‘ Ô(Ø¤Ñ'¨#Ñ-°Ñ4ˆDÚØ�L‰L˜%  tÐ,Õ-ð.ð €Løð%ØŠús   „7D
 Ä
Dc                 ó`  — t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  d	d
| «      j                  «       S )Nz3(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=[\u4e00-\u9fff])r   z&(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=\d)z&(?<=\d)[ \t\u3000]+(?=[\u4e00-\u9fff])u&   \s+([ï¼Œã€‚ã€�ï¼›ï¼šï¼Ÿï¼�)ã€‘ã€�ã€‹])z\1u   ([ï¼ˆã€�ã€Œã€Š])\s+z(?<=\d)\s+(?=\d)z\s+ú )rY   Úsubr\   )r<   s    r/   Ú_clean_span_spacesrh   v   s�   € Ü�6‰6ÐHÈ"ÈdÓS€DÜ�6‰6Ð;¸RÀÓF€DÜ�6‰6Ð;¸RÀÓF€DÜ�6‰6Ð;¸UÀDÓI€DÜ�6‰6Ð(¨%°Ó6€DÜ�6‰6Ð% r¨4Ó0€DÜ�6‰6�&˜#˜tÓ$×*Ñ*Ó,Ð,r1   c           	      ó:  ‡— g }| j                   D �]Q  }t        |dd «      }|sŒ|j                  dk(  r|j                  t	        ||«      «       Œ?|dk(  sŒE|j                  d«      rŒW|j                  dd¬«      D ]z  }|d   }|j                  «       Št        ˆfd„d	D «       «      sŒ-|j                  d
d¬«      }|sŒC|j                  d«      rdt        z   |z   }n|}|j                  d|› d|› d�«       Œ| |j                  d
d¬«      }	t        |	«      }	t        j                  dd|	«      }	|	s�Œ t        |	«      dkD  s�Œ0|j                  |	«       |j                  d«       �ŒT dj!                  |«      j#                  «       }
t        j                  dd|
«      }
|
S )NÚnamer,   Úpr   T)r   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Úendswith)Ú.0rD   Úexts     €r/   ú	<genexpr>z"extract_content.<locals>.<genexpr>�   s   øè ø€ Òk¨1�s—|‘| A—Ñkùs   ƒ)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarrf   ©r\   rV   r
   ú[z](z)

z&#\d+;r   r3   z

z\n{4,})ÚchildrenÚgetattrrj   r^   r0   Úfind_parentr&   ÚlowerÚanyÚget_textr(   ÚDOMAINrh   rY   rg   ÚlenÚjoinr\   )Úzoom_divÚpage_urlÚpartsÚchildrj   Úa_tagr   Úa_textÚ	full_hrefÚtxtÚresultro   s              @r/   Úextract_contentr…   €   s~  ø€ Ø€EØ×"Ñ"ó %ˆÜ�u˜f dÓ+ˆÙØà�:‰:˜Ò Ø�L‰LÔ+¨E°8Ó<Õ=Ø�S‹[Ø× Ñ  Ô)ØàŸ™¨°$˜Ó7ò 
E�Ø˜V‘}�Ø—j‘j“l�ÜÓkÐ0jÔkÕkØ"Ÿ^™^¨C°t˜^Ó<�FÚØŸ?™?¨3Ô/Ø(2´VÑ(;¸dÑ(B™Ià(,˜IØŸ™ q¨¨°°9°+¸UÐ%CÕDð
Eð —.‘. ¨D�.Ó1ˆCÜ$ SÓ)ˆCÜ—&‘&˜ B¨Ó,ˆCÛ”s˜3“x !”|Ø—‘˜SÔ!Ø—‘˜VÖ$ð9%ð< �W‰W�U‹^×!Ñ!Ó#€FÜ�V‰V�I˜v vÓ.€FØ€Mr1   c                 ó4  — t        | «      }|syt        |d«      }d}|j                  dddi¬«      }|r |j                  dd«      j	                  «       }|sJ|j                  d	«      }|r7|j                  d
¬«      }t        j                  dd|«      j	                  «       }d}|j                  dddi¬«      }|r;|j                  dd«      }	t        j                  d|	«      }
|
r|
j                  d«      }d}|j                  d«      }|rt        || «      }|||fS )N)NNNr   r   Úmetarj   ÚArticleTitle)ÚattrsÚcontentrb   Trq   z_\S+$ÚPubDatez(\d{4}-\d{2}-\d{2})r	   zdiv.bt-content.zoom)rE   r   Úfindr'   r\   rx   rY   rg   Úsearchr[   Ú
select_oner…   )rA   rU   Úsouprb   r‡   Ú	title_tagÚtrc   Úmeta_dÚdra   rŠ   Úzooms                r/   Úparse_detailr•   ¥   s  € Ü�‹:€DÙØä˜˜}Ó-€Dð €EØ�9‰9�V F¨NÐ#;ˆ9Ó<€DÙØ—‘˜ BÓ'×-Ñ-Ó/ˆÙØ—I‘I˜gÓ&ˆ	ÙØ×"Ñ"¨Ð"Ó.ˆAÜ—F‘F˜8 R¨Ó+×1Ñ1Ó3ˆEð €DØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙØ�J‰J�y "Ó%ˆÜ�I‰IÐ,¨aÓ0ˆÙØ—7‘7˜1“:ˆDð €GØ�?‰?Ð0Ó1€DÙÜ! $¨Ó,ˆà�'˜4ÐÐr1   c                  ó¤  — t         rt        t        t         «      nt        } t        dt        › d�«       t        dt        › d| › �«       g }t        d| dz   «      D ]‰  }t        d|› d| › d�d	d
¬«       t        |«      }|st        d«        nZt        |«      }|st        d«        n@t        dt        |«      › d�«       |j                  |«       t        j                  d«       Œ‹ t        dt        |«      › d�«       |sy g }t        |«      D �]  \  }\  }}}	t        d|dz   › dt        |«      › d|d d › d�d	d
¬«       t        |«      \  }
}}|
xs |}|	xs |}|rt        |j                  «       «      dk  rt        d«       Œwt        j                   dd|«      d d j                  «       }|s|d d }|j#                  t        |||||dœ«       t        dt        |«      › d�«       |dz   dz  d k(  sŒæt        d!|dz   › dt        |«      › d"t        |«      › �«       �Œ |r$t        d#t        |«      › d�«       t%        |d$«       t        d%«       y )&Nz=== z ===u     æ€»é¡µæ•°: ~u
   , æœ¬æ¬¡: r	   u     ç¬¬ rV   u    é¡µ (API)...rf   T)ÚendÚflushu   â�Œ æ— æ³•èŽ·å�–u   ç©ºåˆ—è¡¨, å�œæ­¢u   æ‰¾åˆ° u    æ�¡g333333Ó?u   
  åˆ—è¡¨æ€»è®¡: u    æ�¡
z  [z] é(   z...é
   u   âš  ç©ºz<[^>]+>r   éÈ   )Ú	site_namerb   rA   rŠ   ÚsummaryÚpub_dateu   âœ… (u   å­—)é   r   u
     è¿›åº¦: u   , å·²å…¥åº“: u
   
  å…¥åº“ Úhanjiang_slgsu   å®Œæˆ�)Ú_MAX_PGÚminÚTOTAL_PAGESr@   Ú	SITE_NAMEr8   rR   rd   rz   Úextendr>   r?   Ú	enumerater•   r\   rY   rg   r^   r   )Úpages_to_fetchÚ	all_itemsrO   r_   r`   ÚresultsÚidxrb   rA   rc   ÚdtrŠ   ÚddÚfinal_titleÚ
final_dater�   s                   r/   Úmainr¯   É   s[  € Ý29”Sœ¤gÔ.¼{€Nä	ˆD”�˜4Ð
 Ô!Ü	ˆNœ;˜- z°.Ð1AÐ
BÔCà€IÜ�a˜¨!Ñ+Ó,ò ˆÜ��t�f˜A˜nÐ-¨]Ð;ÀÈDÕQÜ# DÓ)ˆ	ÙÜÐ$Ô%Ùä 	Ó*ˆÙÜÐ%Ô&Ùä�œ˜E›
�| 4Ð(Ô)Ø×Ñ˜ÔÜ�
‰
�3�ðô  
Ðœs 9›~Ð.¨fÐ
5Ô6ÙØà€GÜ#,¨YÓ#7ó TÑˆÑˆe�S˜$Ü��C˜‘E�7˜!œC 	›NÐ+¨2¨e°C°R¨j¨\¸Ð=À3ÈdÕSä& sÓ+‰ˆˆG�RØ’k˜EˆØ’Z˜Rˆ
áœ#˜gŸm™m›oÓ.°Ò3Ü�)ÔØä—&‘&˜ R¨Ó1°$°3Ð7×=Ñ=Ó?ˆÙØ! $ 3Ð'ˆGà�‰Ü"Ø ØØØØ"ñ
ô 	ô 	�”c˜'“l�^ 4Ð(Ô)à�!‰G�r‰>˜QÓÜ�J˜s 1™u˜g Q¤s¨9£~Ð&6°mÄCÈÃLÀ>ÐRÖSð5Tñ8 Ü�œC ›L˜>¨Ð.Ô/Ü˜ /Ô2Ü	ˆ(…Or1   Ú__main__)r   )rŸ   )7Ú__doc__ÚsysÚosrY   r>   rW   Úurllib.parser)   r   r   r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r9   r$   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningr¡   r¦   ÚargvÚir   rz   Úintr@   r%   r¤   ry   r]   ÚBASE_URLr£   ÚnowÚutcÚstrftimeÚCUTOFFr:   rN   rL   r0   rE   rR   rd   rh   r…   r•   r¯   Ú__name__© r1   r/   ú<module>rÉ      s­  ðñ÷ -× ,× ,ß 2Ñ 2à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (ã Ý Û Û Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðð ÐÙ	Ð
¡# g£,Ñ
.Ô/à3€	Ø	€Ø
€Ø�g�YÐ€Ø€Ø
ˆ(�,‰,�x—|‘|Ó
$¡y°eÔ'<Ñ
<×	FÑ	FÀzÓ	R€ð QØØ˜&˜Ð!UÐVñ€ð ˆJÐMÐ
N€àØ$Ø'ØØØ%ñ€
óóòòò4-ò"òJ! òH;ð| ˆzÒÙ…Fð r1   