Ë
    ¸¬uj%.  ã                   ó†  — 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Zddlm	Z	 ddl
mZ dZdZdZdZd	Zd
ZdZej&                  j)                  e«      Z ej.                  dd«      ZdddddœZdZ ej6                  «       Zej:                  j=                  e«       d„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$dd„Z%d„ Z&e'dk(  r e&«        yy)u¦  
å�«å±±åŽ¿äººæ°‘æ”¿åºœ â€” å»ºè®¾é¡¹ç›®çŽ¯è¯„æ–‡ä»¶å®¡æ‰¹ çˆ¬è™«
site: www.ahhs.gov.cn (å®‰å¾½é©¬éž�å±±å�«å±±åŽ¿)
æ �ç›®: /xxgk/opennessContent/?branch_id=57a3df762c262ea9a00aadc7&column_code=350101
      (å�«å±±åŽ¿ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€-å»ºè®¾é¡¹ç›®çŽ¯è¯„æ–‡ä»¶ï¼ˆæŠ¥å‘Šä¹¦ã€�æŠ¥å‘Šè¡¨ï¼‰å®¡æ‰¹(é�žæ”¿åºœæŠ•èµ„é¡¹ç›®))
CMS: å®‰å¾½æ”¿åŠ¡å…¬å¼€å¹³å�° (OpennessContent/OpennessTarget, æ–°ç‰ˆ branch_id+column_code)
åˆ—è¡¨: AJAX /xxgk/opennessTarget/?branch_id=..&column_code=..&page=N
      è¿”å›ž table tr>td.bt>a (æ ‡é¢˜) + td.cwrq (æ—¥æœŸ), <pagination pagecount total>
åˆ†é¡µ: &page=N (20æ�¡/é¡µ, 36é¡µå…±703æ�¡, <pagination currentpage pagecount total>)
è¯¦æƒ…: /xxgk/openness/detail/content/{id}.html
è¯¦æƒ…ç»“æž„: h1 æ ‡é¢˜ + meta PubDate + div#zoom æ­£æ–‡(æ–‡å­—/è¡¨æ ¼/å†…åµŒPDF embed)
é˜²æŠ¤: JS cookie æŒ‘æˆ˜ â†’ éœ€å¸¦ Cookie: token_verified=true
æ­£æ–‡è§„åˆ™: ä¿�ç•™è¡¨æ ¼HTMLã€�

åˆ†æ®µã€�embed PDFè½¬<p><a>é™„ä»¶ã€�åŽ»è£…é¥°
é    N)ÚBeautifulSoup)Úurljoinu(   å�«å±±åŽ¿-å»ºè®¾é¡¹ç›®çŽ¯è¯„æ–‡ä»¶å®¡æ‰¹u   å®‰å¾½zwww.ahhs.gov.cnzhttps://www.ahhs.gov.cnÚ57a3df762c262ea9a00aadc7Ú350101é$   Ú	SEARCH_DBz/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8ztoken_verified=true)z
User-AgentÚAcceptzAccept-LanguageÚCookieé   c                 ó$  — 	 t         j                  | t        ¬«      }d|_        |j                  dk7  ry d|j
                  d d v r2t         j                  | t        ¬«      }d|_        |j                  dk7  ry |j
                  S # t        $ r Y y w xY w)N©Útimeoutzutf-8éÈ   zdocument.cookie='token_verifiediô  )ÚsessionÚgetÚTIMEOUTÚencodingÚstatus_codeÚtextÚ	Exception)ÚurlÚresps     ú$/root/gov_crawler/crawl_ahhs_hjsp.pyÚfetchr   1   s‰   € ðÜ�{‰{˜3¬ˆ{Ó0ˆØˆŒØ×Ñ˜sÒ"ØØ,°·	±	¸$¸3°Ñ?ä—;‘;˜s¬G�;Ó4ˆDØ#ˆDŒMØ×Ñ 3Ò&ØØ�y‰yÐøÜò Ùðús   ‚1B ´AB Á7B Â	BÂBc                 ó†   — t        j                  dd| xs d«      } t        j                  dd| «      } | j                  «       S )uG   æ ‡é¢˜æ¸…æ´—: strip &middot;&nbsp; å®žä½“å‰�ç¼€ + çœ�ç•¥å�·æˆªæ–­å�Žç¼€u   ^[\s\xa0Â·\u00b7]+Ú z\s*\.{3,}\s*$)ÚreÚsubÚstrip)Útitles    r   Úclean_titler!   B   s8   € ä�F‰FÐ(¨"¨eªk°rÓ:€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 óÖ  — g }t        | d«      }|j                  d«      D ]Æ  }|j                  d«      }t        |«      dk  rŒ#|d   j                  d«      }|r|j	                  d«      sŒK|d   j                  «       }|j                  d«      st        t        |«      }|j                  d	¬
«      }|d   j                  d	¬
«      dd }|j                  t        |«      ||dœ«       ŒÈ |S )u/   è§£æž�åˆ—è¡¨: table tr>td.bt>a + td.cwrq æ—¥æœŸúhtml.parserÚtrÚtdé   é   ÚaÚhrefÚhttpT©r   é   Né
   )r    r   Úpublish_date)r   Úfind_allÚlenÚfindr   r   Ú
startswithr   ÚBASE_URLÚget_textÚappendr!   )	ÚhtmlÚitemsÚsoupr%   Útdsr)   r*   r    Údates	            r   Ú
parse_listr<   I   sÞ   € à€EÜ˜˜}Ó-€DØ�m‰m˜DÓ!ò WˆØ�k‰k˜$ÓˆÜˆs‹8�aŠ<ØØ�‰F�K‰K˜ÓˆÙ˜Ÿ™˜fœØØ�‰y�‰Ó ˆØ�‰˜vÔ&Üœ8 TÓ*ˆDØ—
‘
 �
Ó&ˆØ�1‰v�‰ TˆÓ*¨3¨BÐ/ˆØ�‰œ{¨5Ó1¸$ÐPTÑUÕVðWð €Lr"   c                 ór   — t        j                  d| «      }|rt        |j                  d«      «      S t        S )u.   ä»Ž <pagination pagecount="N"> æ��å�–æ€»é¡µæ•°z!<pagination[^>]*pagecount="(\d+)"r(   )r   ÚsearchÚintÚgroupÚTOTAL_PAGES)r7   Úms     r   Úget_total_pagesrC   ]   s.   € ä
�	‰	Ð6¸Ó=€AÙÜ�1—7‘7˜1“:‹ÐÜÐr"   c                 óP  — | j                  d«      }|D ]  }|j                  d«       Œ | j                  «       }|j                  d«      D �cg c]'  }t	        j
                  dd|«      j                  «       ‘Œ) }}|D �cg c]  }|sŒ|‘Œ	 }}dj                  |«      S c c}w c c}w )u/   æ®µè�½æ–‡æœ¬: <br>è½¬
, åŽ‹ç¼©ç©ºç™½, åŽ»ç©ºè¡ŒÚbrú
z[ \t\xa0\u3000]+ú )r0   Úreplace_withr5   Úsplitr   r   r   Újoin)ÚelÚbrsrE   r   ÚlnÚliness         r   Ú_normalize_textrO   e   s–   € à
�+‰+�dÓ
€CØò ˆØ
�‰˜Õðà�;‰;‹=€DØDHÇJÁJÈtÓDTÖU¸bŒR�V‰VÐ'¨¨bÓ1×7Ñ7Õ9ÐU€EÐUØÖ&�B¢2ŠRÐ&€EÐ&Ø�9‰9�UÓÐùò VùÚ&s   Á,BÁ?B#ÂB#c                 ó  ‡‡— g }t        «       }g }d}| j                  d¬«      D �]  }|j                  dk(  r|j                  t	        |«      «       Œ.|j                  dv �r›|j                  d«      }|D ]z  }|j                  d«      Š‰rU‰j                  d«      st        |‰«      Š|d	z  }|d	k(  rd
nd|z  }	t        ˆfd„|D «       «      s|j                  |	‰f«       |j                  «        Œ| g }
|j                  d«      D ]®  }|j                  d«      Š‰sŒt	        ‰«      j                  «       Št        j                  d‰t        j                  «      sŒV|j                  d¬«      xs ‰j                  d«      d   }	‰j                  d«      st        |‰«      Š|
j                  ||	‰f«       Œ° |
D ]=  \  }}	Št        ˆfd„|D «       «      s|j                  |	‰f«       |j                  «        Œ? |j                  d«      }|D ]  }|j                  «        Œ |j                  d«      }|r‘t!        j"                  |«      }|j                  d«      D ]  }|j                  «        Œ t%        |«      }|r&||vr"|j'                  |«       |j                  |«       |D ]  }|j                  t	        |«      «       Œ �ŒŸt%        |«      }|s�Œ®||vs�Œ´|j'                  |«       |j                  |«       �ŒØ|j                  dk(  r�Œét%        |«      }|s�Œø||vs�Œþ|j'                  |«       |j                  |«       �Œ" dj)                  |«      }|D ]   \  }	}d|z  |v rŒ|r|dz  }|d|›d|	›d�z  }Œ" ||fS )uZ   æ­£æ–‡divå¤„ç�†: ä¿�ç•™è¡¨æ ¼HTML, 

åˆ†æ®µ, embed PDFè½¬é™„ä»¶, åŽ»è£…é¥°å›¾/é‡�å¤�æ®µè�½r   F)Ú	recursiveÚtable)ÚpÚdivÚcenterÚembedÚsrcr+   r(   u   çŽ¯è¯„æ–‡ä»¶å…¨æ–‡.pdfu   çŽ¯è¯„æ–‡ä»¶å…¨æ–‡(%d).pdfc              3   ó.   •K  — | ]  \  }}|‰k(  –— Œ y ­w©N© )Ú.0Ú_ÚurW   s      €r   ú	<genexpr>z#process_zoom_div.<locals>.<genexpr>…   s   øè ø€ Ò@©D¨A¨q˜q C�xÑ@ùó   ƒr)   r*   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|wps)$Tr,   ú/éÿÿÿÿc              3   ó.   •K  — | ]  \  }}|‰k(  –— Œ y ­wrY   rZ   )r[   r\   r]   r*   s      €r   r^   z#process_zoom_div.<locals>.<genexpr>•   s   øè ø€ Ò=©¨¨A˜1 �9Ñ=ùr_   ÚimgrE   z

z	href="%s"z<p><a href="z" target="_blank">z</a></p>)Úsetr0   Únamer6   Ústrr   r3   r   ÚanyÚ	decomposer   r   r>   ÚIr5   rI   ÚcopyÚdeepcopyrO   ÚaddrJ   )rT   Úpage_urlÚpartsÚ
seen_textsÚattachmentsÚpdf_idxrK   ÚembedsÚembre   Ú
file_linksr)   Úimgsrc   ÚtblsÚp_copyÚtr   Úbodyr   r*   rW   s                       @@r   Úprocess_zoom_divrz   p   sL  ù€ à€EÜ“€JØ€KØ€Gà�l‰l UˆlÓ+ó <#ˆØ�7‰7�gÒØ�L‰Lœ˜R›Ô!ØØ�7‰7Ð,Ò,à—[‘[ Ó)ˆFØò 	 �Ø—g‘g˜e“n�ÙØŸ>™>¨&Ô1Ü% h°Ó4˜Ø˜q‘L�GØ7>À!²|Ñ3ÐIeÐhoÑIo�DÜÓ@°KÔ@Ô@Ø#×*Ñ*¨D°#¨;Ô7Ø—‘•ð	 ð ˆJØ—[‘[ Ó%ò 	7�Ø—u‘u˜V“}�ÙØÜ˜4“y—‘Ó(�Ü—9‘9ÐFÈÌbÏdÉdÕSØŸ:™:¨D˜:Ó1ÒH°T·Z±ZÀ³_ÀRÑ5H�DØŸ?™?¨6Ô2Ü& x°Ó6˜Ø×%Ñ% q¨$° oÕ6ð	7ð ",ò ‘��4˜ÜÓ=°Ô=Ô=Ø×&Ñ&¨¨d |Ô4Ø—‘•ðð
 —;‘;˜uÓ%ˆDØò  �Ø—‘•ð ð —;‘;˜wÓ'ˆDÙÜŸ™ rÓ*�ØŸ™¨Ó1ò "�AØ—K‘K•Mð"ä& vÓ.�Ù˜D¨
Ñ2Ø—N‘N 4Ô(Ø—L‘L Ô&Øò )�AØ—L‘L¤ Q£Õ(ò)ô ' rÓ*�Û˜D¨
Ó2Ø—N‘N 4Ô(Ø—L‘L Ö&Ø�W‰W˜Š_Ùä" 2Ó&ˆDÛ˜ JÓ.Ø—‘˜tÔ$Ø—‘˜TÖ"ðy<#ð| �;‰;�uÓ€Dà ò K‰	ˆˆcØ˜Ñ Ñ$ØÙØ�F‰NˆDÙÂÂTÐJÑJ‰ðKð �ÐÐr"   c                 ó¨  — t        | d«      }d}|j                  d«      }|rt        |j                  d¬«      «      }d}|j                  dddi¬	«      }|r'|j	                  d
«      r|d
   j                  «       dd }d}g }|j                  dddi¬	«      }	|	r6|	j                  dddi¬	«      }
|
r|
j                  «        t        |	|«      \  }}||||fS )u8   è¯¦æƒ…è§£æž�: è¿”å›ž (title, date, content, attachments)r$   r   Úh1Tr,   Úmetare   ÚPubDate)ÚattrsÚcontentNr.   rT   ÚidÚzoomÚformÚcollect_form)r   r2   r!   r5   r   r   rh   rz   )r7   rm   r9   r    r|   r;   rB   r€   rp   r‚   rƒ   s              r   Úextract_detailr…   À   sâ   € ä˜˜}Ó-€Dà€EØ	�‰�4‹€BÙ	Ü˜BŸK™K¨d˜KÓ3Ó4ˆà€DØ�	‰	�& ¨Ð 3ˆ	Ó4€AÙˆQ�U‰U�9ÔØ�‰|×!Ñ!Ó# C RÐ(ˆà€GØ€KØ�9‰9�U 4¨ .ˆ9Ó1€DÙà�y‰y˜¨¨nÐ'=ˆyÓ>ˆÙØ�N‰NÔÜ/°°hÓ?Ñˆ�Ø�$˜ Ð,Ð,r"   c                  ó$  — dd l } | j                  t        › d�¬«      }|j                  dt        dd¬«       |j                  dt
        d	¬
«       |j                  «       }|j                  }|j                  }t        dt        › d|› dt        › d�«       t        j                  t        d¬«      }|j                  «       }d}d}d}	t        d|dz   «      D �][  }
dt         t"        t$        |
fz  }|
dk(  rt         ›dt"        ›dt$        ›�}t'        |«      }|st        d|
d›d|› d�«       ŒU|
dk(  r#t)        |«      }|r||k  r|}t        d|› d�«       t+        |«      }|st        d|
d›d|› d�«       Œžd}d}|D �]j  }|	dz  }	|j-                  d|d   t        f«      j/                  «       }|r|dz  }|dz  }Œ?t'        |d   «      }|rt1        ||d   «      \  }}}}ndddg f\  }}}}|xs |d   }|xs |j3                  dd«      }|s|dz  }|dz  }Œ›d |v rdnd}d!j5                  d"„ |D «       «      }	 |j-                  d#||||d   t6        t        t8        |||d$f«       |j:                  dkD  rt|j<                  }	 t?        j@                  d%d&|«      }t?        j@                  d'd&|«      jC                  «       d d( xs |}|j-                  d)||t        |f«       |dz  }|dz  }�Œm |jG                  «        t        d|
d›d|› d,tI        |«      › d-|› d.|› d/�«       tK        jL                  d0«       �Œ^ |jO                  «        t        d1|	› d2|› d3|› �«       y # tD        $ r Y ŒŠw xY w# tD        $ r}t        d*|d   › d+|› �«       Y d }~�Œd }~ww xY w)4Nr   u   çˆ¬è™«)Údescriptionz--pagesr(   u   çˆ¬å�–é¡µæ•°(é»˜è®¤1))ÚtypeÚdefaultÚhelpz--script-nameu   è„šæœ¬å��(å†™åº“))r‰   rŠ   u   ðŸ”� u    â€” çˆ¬å�– u	    é¡µ (å…±u   é¡µ)r   r   z;%s/xxgk/opennessTarget/?branch_id=%s&column_code=%s&page=%dz /xxgk/opennessTarget/?branch_id=z&column_code=z  [pÚ2dr`   u   ] âœ— HTTPå¤±è´¥u     â„¹ ç«™ç‚¹å®žé™…æ€»é¡µæ•° u   ï¼Œæœ¬æ¬¡çˆ¬å�–ä¸Šé™�è°ƒæ•´u   ] âœ— æœªè§£æž�åˆ°æ�¡ç›®z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r   r   r    r/   z<tableú,c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wrY   rZ   )r[   r\   r]   s      r   r^   zmain.<locals>.<genexpr>  s   è ø€ Ò:¡d a¨¤Ñ:ùs   ‚z¶INSERT OR IGNORE INTO gov_raw (title, content, publish_date, page_url, source_url, site_name,  group_name, script_name, has_table, attachments, status) VALUES (?,?,?,?,?,?,?,?,?,?,?)Ú	publishedz<[^>]+>rG   z\s+r   zSINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?,?,?,?)u       ! å…¥åº“å¼‚å¸¸ z: u   ] âœ“ u   æ�¡ (æ–°å¢žu    è·³è¿‡ú)g333333Ó?u   
ðŸ“Š å®Œæˆ�ï¼�åˆ—è¡¨ u    æ�¡ | æ–°å¢ž: u    | è·³è¿‡: )(ÚargparseÚArgumentParserÚ	SITE_NAMEÚadd_argumentr?   ÚSCRIPT_NAMEÚ
parse_argsÚpagesÚscript_nameÚprintrA   Úsqlite3Úconnectr   ÚcursorÚranger4   Ú	BRANCH_IDÚCOLUMN_CODEr   rC   r<   ÚexecuteÚfetchoner…   r   rJ   ÚDOMAINÚ
GROUP_NAMEÚrowcountÚ	lastrowidr   r   r   r   Úcommitr1   ÚtimeÚsleepÚclose)r�   ÚparserÚargsÚpages_to_crawlr—   ÚconnÚcurÚ	new_totalÚ
skip_totalÚtotal_itemsÚpagerm   r7   Útpr8   Úpage_newÚ	page_skipÚitemÚexistsÚdetail_htmlÚd_titleÚd_dater€   rp   r    r;   Ú	has_tableÚatt_urlsÚrow_idÚplainÚes                                  r   Úmainr¿   Ú   s  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°QÐ=TÐÔUØ
×Ñ˜´ÐCVÐÔWØ×ÑÓ€Dà—Z‘Z€NØ×"Ñ"€KÜ	ˆE”)�˜L¨Ð(8¸	Ä+ÀÈdÐ
SÔTä�?‰?œ9¨bÔ1€DØ
�+‰+‹-€Cà€IØ€JØ€Kä�a˜¨!Ñ+Ó,ó LˆØPÜ”i¤¨dðT4ñ 4ˆà�1Š9æž)¥[ð2ˆHä�X‹ˆÙÜ�D˜˜b˜	  >Ð"2Ð2BÐCÔDØØ�1Š9Ü  Ó&ˆBÙ�b˜>Ò)Ø!#�ÜÐ4°R°DÐ8SÐTÔUä˜4Ó ˆÙÜ�D˜˜b˜	  >Ð"2Ð2JÐKÔLØàˆØˆ	Øó 1	@ˆDØ˜1ÑˆKØ—[‘[ØHØ�e‘œiÐ(ó÷ ‰h‹jð ñ Ø˜Q‘�	Ø˜a‘�
Øä  U¡Ó,ˆKÙÜ8FÀ{ÐTXÐY^ÑT_Ó8`Ñ5�˜ ©+à8:¸BÀÀB¸Ñ5�˜ ¨+àÒ,˜t G™}ˆEØÒ9˜TŸX™X n°bÓ9ˆDÙØ˜Q‘�	Ø˜a‘�
Øà%¨Ñ0™°aˆIØ—x‘xÑ:¨kÔ:Ó:ˆHð@Ø—‘ð5ð ˜G T¨4°©;¼Ä	Ü ¨i¸À;ðPôð —<‘< !Ò#Ø Ÿ]™]�FðÜ "§¡ z°3¸Ó @˜Ü "§¡ v¨s°EÓ :× @Ñ @Ó BÀ4ÀCÐ HÒ QÈE˜ØŸ™ØqØ# U¬I°uÐ=ôð  ‘M�HØ ‘N�Iùð_1	@ðf 	�‰ŒÜ��T˜"�I˜Q˜~Ð.¨f´S¸³Z°LÀÈHÈ:ÐU\Ð]fÐ\gÐghÐiÔjÜ�
‰
�3ŽðYLð\ 	‡J�J„LÜ	Ð# K =°À	¸{È+ÐV`ÐUaÐ
bÕcøô %ò Ùðûô ò @ÜÐ+¨D°©K¨=¸¸1¸#Ð>×?Ò?ûð@ús>   È4AM'É<AMË
M'Í	M$Í!M'Í#M$Í$M'Í'	NÍ0N
Î
NÚ__main__)r   )(Ú__doc__r   ÚsysÚosr¦   r™   rj   ÚrequestsÚbs4r   Úurllib.parser   r’   r¢   r¡   r4   r�   rž   rA   ÚpathÚbasenameÚ__file__r”   Úgetenvr   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r!   r<   rC   rO   rz   r…   r¿   Ú__name__rZ   r"   r   ú<module>rÐ      sñ   ðñó 
Û 
Û 	Û Û Û Û Ý Ý  à6€	Ø€
Ø	€Ø$€Ø&€	Ø€Ø€Ø�g‰g×Ñ˜xÓ(€àˆB�I‰I�kÐ#4Ó5€	ð DØOØ0Ø#ñ	€ð €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò"òò(òòMó`-ò4adðH ˆzÒÙ…Fð r"   