Ë
    òÚwj÷  ã                   óF  — 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	Zd
ddœZdZdZeez   dz   Zd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rW ej>                  «       Z e jC                  de"d¬«       e jG                  «       Z$ ee$jJ                  «      Z& e'de› de&› d�«       yy)u”  crawl_qdnhp_hjbh.py - é»„å¹³åŽ¿-çŽ¯å¢ƒä¿�æŠ¤ (è´µå·žé»”ä¸œå�—å·žé»„å¹³åŽ¿äººæ°‘æ”¿åºœ)

ç«™ç‚¹: https://www.qdnhp.gov.cn/zfxxgk/fdzdgknr/zdmsxx/hjbh_5621994/
CMS: TRS WCM (UTF-8, æœ�åŠ¡ç«¯æ¸²æŸ“) â€” å�Œç«™ crawl_qdnhp.py é€šçŸ¥å…¬å‘Šæ �ç›®ä¸�å�Œ
åˆ—è¡¨: <li><a target="_blank" href=".../YYYYMM/tYYYYMMDD_ID.html" title="æ ‡é¢˜">æ ‡é¢˜</a><b>2026-07-06</b></li>
      é“¾æŽ¥: /zfxxgk/fdzdgknr/zdmsxx/hjbh_5621994/YYYYMM/tYYYYMMDD_ID.html (title å±žæ€§å®Œæ•´æ— æˆªæ–­)
åˆ†é¡µ: createPageHTML(67, 0, "index", "html", 1000) â†’ index_N.html 66 é¡µ (P67 404), æ¯�é¡µ 15 æ�¡
è¯¦æƒ…: meta ArticleTitle + meta PubDate + div#zoom æ­£æ–‡(å†…å�« TRS_Editor, å¹³è¡¡ div)
é    N)ÚdatetimeÚ	timedelta)Úpush_to_searchdbiG  )Údaysz%Y-%m-%du   é»„å¹³åŽ¿-çŽ¯å¢ƒä¿�æŠ¤u   è´µå·žzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zhttps://www.qdnhp.gov.cn/)z
User-AgentÚRefererzhttps://www.qdnhp.gov.cnz$/zfxxgk/fdzdgknr/zdmsxx/hjbh_5621994ú/c                 óÒ   — 	 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_qdnhp_hjbh.pyÚfetchr      sZ   € ðÜ�L‰L˜ g´wÀuÔMˆØˆŒ
Ø�v‰vˆøÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   ‚/2 ²	A&»!A!Á!A&c                 ó¬  — g }t        j                  d| t         j                  «      D �](  }|j                  d«      |j                  d«      |j                  d«      |j                  d«      j	                  «       f\  }}}}d|vrŒ^|xs t        j
                  dd|«      j	                  «       }|j                  d	d«      j	                  «       }t        j
                  d
d|«      }t        |«      dk  rŒÍ|j                  d«      r|nt        |z   }t        j                  d|«      }	|	r|	j                  d«      nd}
|j                  ||
|dœ«       �Œ+ |S )u9   åˆ—è¡¨æ�¡ç›®: tYYYYMMDD_ID.html + title å±žæ€§ + b æ—¥æœŸzY<a[^>]+href="([^"]*t\d{8}_\d+\.html)"[^>]*title="([^"]*)"[^>]*>(.*?)</a>\s*<b>([^<]+)</b>é   é   é   é   Úhjbh_5621994ú<[^>]+>r   õ   â€‹õ   ^\s*(?:&middot;|&nbsp;|Â·|\s)+Úhttpú(\d{4}-\d{2}-\d{2}))r   Úpub_dateÚtitle)ÚreÚfinditerÚDOTALLÚgroupÚstripÚsubÚreplaceÚlenÚ
startswithÚBASEÚsearchÚappend)ÚhtmlÚitemsÚmÚhrefÚ
title_attrÚ
title_htmlÚ	date_textr+   r   ÚmdÚpds              r   Úextract_itemsrA   '   s6  € à€EÜ�[‰[ÐuÐw{Ô}÷  ~Gñ  ~Gó  Hó CˆØ23·'±'¸!³*¸a¿g¹gÀa»jÈ!Ï'É'ÐRSË*ÐVW×V]ÑV]Ð^_ÓV`×VfÑVfÓVhÐ2hÑ/ˆˆj˜* ià Ñ%ØØÒAœrŸv™v j°"°jÓA×HÑHÓJˆØ—‘˜h¨Ó+×1Ñ1Ó3ˆÜ—‘Ð8¸"¸eÓDˆÜˆu‹:˜Š>ØØ—o‘o fÔ-‰d´4¸$±;ˆÜ�Y‰YÐ-¨yÓ9ˆÙˆR�X‰X�aŒ[ BˆØ�‰˜S¨b¸5ÑAÖBðCð €Ló    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   ú>éÿÿÿÿr    z<div[\s>]|</div>Nr   z<divz<DIV)r,   r6   ÚIÚfindÚstartr-   r/   r4   )r8   Úopen_tag_rer:   ÚgtÚiÚdepthÚmms          r   Úextract_balanced_divrN   ;   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€OrB   c                 ó  ‡ ‡— t        ‰ «      }|syd}t        j                  d|«      }|r|j                  d«      j	                  «       }|s[t        j                  d|t        j
                  «      }|r4t        j                  dd|j                  d«      «      j	                  «       }|j                  dd«      j	                  «       }t        j                  dd|«      }d}t        j                  d	|«      }|r8t        j                  d
|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  ¬«      }ddl
mŠ t        j                  dˆ ˆfd„|«      }t        j                  dˆ ˆfd„|«      }t        j                  dd|«      }t        j                  dd|«      }|||j	                  «       fS )N)r   r   r   r   z/<meta\s+name="ArticleTitle"\s+content="([^"]+)"r    z<title>\s*([^<]+?)\s*</title>z\s+r&   r'   z*<meta\s+name="PubDate"\s+content="([^"]+)"r)   z<div[^>]*id="zoom"[^>]*>z+<div[^>]*class="[^"]*TRS_Editor[^"]*"[^>]*>z<script.*?</script>)Úflagsz<style.*?</style>r   )Úurljoinz,href="(?!https?://|//|#|javascript:)([^"]+)"c                 ó<   •— d ‰‰| j                  d«      «      › d�S )Nzhref="r    ú"©r/   ©rM   r   rQ   s    €€r   ú<lambda>zfetch_detail.<locals>.<lambda>s   s    ø€  &©°°b·h±h¸q³kÓ)BÐ(CÀ1Ð E€ rB   zsrc="(?!https?://|//)([^"]+)"c                 ó<   •— d ‰‰| j                  d«      «      › d�S )Nzsrc="r    rS   rT   rU   s    €€r   rV   zfetch_detail.<locals>.<lambda>u   s    ø€  %©°°R·X±X¸a³[Ó(AÐ'BÀ!Ð D€ rB   z%^(<p[^>]*>(\s*(<br\s*/?>)?\s*)?</p>)+z%(<p[^>]*>(\s*(<br\s*/?>)?\s*)?</p>)+$)r   r,   r6   r/   r0   r.   r1   r2   rN   rF   Úurllib.parserQ   )	r   r8   r+   r:   r>   r?   ÚcontentÚcrQ   s	   `       @r   Úfetch_detailr[   O   sï  ù€ Ü�‹:€DÙØà€EÜ
�	‰	ÐDÀdÓK€AÙØ—‘˜“
× Ñ Ó"ˆÙÜ�I‰IÐ6¸¼b¿i¹iÓHˆÙÜ—F‘F˜6 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆEØ�M‰M˜( BÓ'×-Ñ-Ó/€EÜ�F‰FÐ4°b¸%Ó@€Eà€IÜ
�	‰	Ð?ÀÓF€AÙÜ�Y‰YÐ-¨q¯w©w°q«zÓ:ˆÙØŸ™ ›ˆIà€GÜ˜TÐ#>Ó?€AØ‡w�w„yØ—'‘'“)ˆØ�=‰=Œ?Ü  Ð'UÓVˆØ�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ÐDÜEÀwóP€Gä�f‰fÐ5ÜDÀgóO€Gô �f‰fÐ=¸rÀ7ÓK€GÜ�f‰fÐ=¸rÀ7ÓK€GØ�)˜WŸ]™]›_Ð,Ð,rB   r
   c                 ó  — g }t        «       }t        | «      D �]  }|dk(  rt        nt        t        z   d|dz   › d�z   }t        |«      }|st        d|dz   › d�«        �nÔt        |«      }|s6t        |«      dk  rt        d|dz   › d�«       n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|d   }|
st        d|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/        j0                  |d¬«      ndt2        dœ	«       �Œm �Œ t        dt        |«      › d�«       |D �cg c]  }|d   j#                  «       sŒ|‘Œ }}|rt5        |d«       t        |«      S c c}w )Nr   z/index_r    z.htmlz  Page z: fetch fail (stop)iÐ  z: 404/empty (stop)z: 0 items (stop)ú: ú itemsr*   r   r+   z    SKIP empty content: z$<a[^>]*href="([^"]+)"[^>]*>(.*?)</a>r%   r   r!   z*\.(pdf|doc|docx|xls|xlsx|zip|rar|caj|wps)$Údownloadu   é™„ä»¶)r+   r   F)Úensure_asciiz[])	r+   r   Ú
source_urlr*   Ú	site_namerY   ÚsummaryÚattachmentsÚ
group_namez	  Total: rY   Ú
qdnhp_hjbh)ÚsetÚrangeÚLIST_URLr5   ÚCOL_DIRr   r   rA   r3   ÚCUTOFFÚaddr[   r,   r-   r.   r/   r1   r0   r6   rF   Úlowerr7   Ú	SITE_NAMEÚjsonÚdumpsÚ
GROUP_NAMEr   )Ú	max_pagesÚrecordsÚseenÚpgr   r8   r9   Úitr+   r>   rY   r@   ÚattsÚamÚhÚtr   Úvalids                     r   Úrunr|   |   s‹  € Ø€GÜ‹5€DÜ�IÓó &ˆØ š'�h¤t¬g¡~¸'À"ÀqÁ&ÀÈÐ8OÑ'OˆÜ�S‹zˆÙÜ�G˜B ™F˜8Ð#6Ð7Ô8ÚÜ˜dÓ#ˆÙÜ�4‹y˜4ÒÜ˜  Q¡˜xÐ'9Ð:Õ;ä˜  Q¡˜xÐ'7Ð8Ô9ÚÜ�˜˜Q™�x˜r¤# e£* ¨VÐ4Ô5Øó 	ˆBØ�*Š~ " Z¡.´6Ò"9ØØ�%‰y˜DÑ ØØ�H‰H�R˜‘YÔÜ(4°R¸±YÓ(?Ñ%ˆE�9˜gÙØ˜7™�ÙÜÐ0°°E±°Ð<Ô=ØØÒ,˜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ÐXbÐfg×fmÑfmÓfoÒXoØ—K‘K¨!ª-¨xÀÑ BÕCðDð �N‰NØ r¨%¡yÀÀ5Á	Ø¬YÀ7ØÑVZ¬d¯j©j¸ÈEÕ.RÐ`dÜ(ñ	ö ò'	ð&ôN 
ˆI”c˜'“l�^ 6Ð
*Ô+ØÖ8�1 1 Y¡<×#5Ñ#5Õ#7ŠQÐ8€EÐ8ÙÜ˜ Ô-Üˆu‹:Ðùò 9s   ÉJÉ)JÚ__main__z--pages)ÚtypeÚdefaultz	[RESULT] r]   r^   )r
   )(Ú__doc__r   Úosr   r,   Úargparsero   r   r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   ÚnowÚstrftimerk   rn   rq   r   r5   rj   ri   r   rA   rN   r[   r|   Ú__name__ÚArgumentParserÚapÚadd_argumentÚintÚ
parse_argsÚargsÚpagesÚnr   © rB   r   ú<module>r•      s  ðñ÷ -× ,× ,ß (à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à
ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€Ø$€	Ø€
ð DØ*ñ€ð "€Ø
0€Ø�'‰>˜CÑ€òòò(ò(*-óZ.ðb ˆzÒØ	 ˆ×	 Ñ	 Ó	"€BØ‡O�O�I C°€OÔ3Ø�=‰=‹?€DÙˆD�J‰J‹€AÙ	ˆI�i�[  1 # VÐ
,Õ-ð rB   