Ë
    ¸¬ujË0  ã                   ó„  — 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œZdZ ej6                  «       Zej:                  j=                  e«       d„ Zd„ Z d„ Z!d„ Z"d„ Z#dd„Z$d„ Z%d„ Z&e'dk(  r e&«        yy)u�  
é»„éª…å¸‚äººæ°‘æ”¿åºœ â€” è¡Œæ”¿è®¸å�¯ çˆ¬è™«
site: www.huanghua.gov.cn
æ �ç›®: /huanghua/ADD08614/list.shtml?xiangChannelCode=c108762 (æ¸¤æµ·æ–°åŒºé»„éª…å¸‚-è¡Œæ”¿è®¸å�¯-çŽ¯è¯„å®¡æ‰¹å…¬ç¤º)
CMS: UCAP (createPageHTML + ucap_printPageStr)
åˆ—è¡¨: table.zb_tab > tr > td.name_detail > a.detaillink (20æ�¡/é¡µ, 50é¡µå…±994æ�¡)
åˆ†é¡µ: list.shtml / list_{N}.shtml?xiangChannelCode=c108762
è¯¦æƒ…: /huanghua/ADD08614/YYYYMM/{uuid}.shtml
è¯¦æƒ…ç»“æž„: div.file_detail > h1 æ ‡é¢˜ + div æ­£æ–‡(Word pæ®µè�½/è¡¨æ ¼/é™„ä»¶)
æ ‡é¢˜: meta ArticleTitle; æ—¥æœŸ: meta PubDate
æ­£æ–‡è§„åˆ™: ä¿�ç•™è¡¨æ ¼HTMLã€�\n\nåˆ†æ®µã€�é™„ä»¶è½¬<p><a>å��ç§°å†…åµŒURLã€�åŽ»è£…é¥°å›¾/é‡�å¤�æ®µè�½
é    N)ÚBeautifulSoup)Úurljoinu   é»„éª…å¸‚-è¡Œæ”¿è®¸å�¯u   æ²³åŒ—zwww.huanghua.gov.cnzhttp://www.huanghua.gov.cnÚADD08614Úc108762é2   Ú	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.8)z
User-AgentÚAcceptzAccept-Languageé   c                 óž   — 	 t         j                  | t        ¬«      }d|_        |j                  dk7  ry |j
                  S # t        $ r Y y w xY w)N©Útimeoutzutf-8éÈ   )ÚsessionÚgetÚTIMEOUTÚencodingÚstatus_codeÚtextÚ	Exception)ÚurlÚresps     ú(/root/gov_crawler/crawl_huanghua_xzxk.pyÚfetchr   .   sM   € ðÜ�{‰{˜3¬ˆ{Ó0ˆØˆŒØ×Ñ˜sÒ"ØØ�y‰yÐøÜò Ùðús   ‚1A  ´A  Á 	AÁA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    9   s8   € ä�F‰FÐ(¨"¨eªk°rÓ:€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó0  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]Ü  }|j                  dd¬«      }|sŒ|j                  dd	¬«      }|r|j                  d
«      sŒ@|d
   j	                  «       }|j                  d«      st        t        |«      }|j                  d¬«      }d}	|j                  d«      }
t        |
«      dk\  r|
d   j                  d¬«      dd }	|j                  t        |«      ||	dœ«       ŒÞ |S )uO   è§£æž�åˆ—è¡¨: table.zb_tab è¡Œ, td.name_detail>a.detaillink, ç¬¬4ä¸ªtdä¸ºæ—¥æœŸúhtml.parserÚtableÚzb_tab©Úclass_ÚtrÚtdÚname_detailÚaÚ
detaillinkÚhrefÚhttpT©r   r   é   é   Né
   )r   r   Úpublish_date)r   ÚfindÚfind_allr   r   Ú
startswithr   ÚBASE_URLÚget_textÚlenÚappendr    )ÚhtmlÚitemsÚsoupr$   r(   Útd_ar+   r-   r   ÚdateÚtdss              r   Ú
parse_listrA   @   s  € à€EÜ˜˜}Ó-€DØ�I‰I�g hˆIÓ/€EÙØˆØ�n‰n˜TÓ"ò WˆØ�w‰w�t MˆwÓ2ˆÙØØ�I‰I�c ,ˆIÓ/ˆÙ˜Ÿ™˜fœØØ�‰y�‰Ó ˆØ�‰˜vÔ&Üœ8 TÓ*ˆDØ—
‘
 �
Ó&ˆØˆØ�k‰k˜$ÓˆÜˆs‹8�qŠ=Ø�q‘6—?‘?¨�?Ó.¨s°Ð3ˆDØ�‰œ{¨5Ó1¸$ÐPTÑUÕVðWð  €Lr!   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 )u0   æ®µè�½æ–‡æœ¬: <br>è½¬\n, åŽ‹ç¼©ç©ºç™½, åŽ»ç©ºè¡ŒÚbrú
z[ \t\xa0\u3000]+ú )r5   Úreplace_withr8   Úsplitr   r   r   Újoin)ÚelÚbrsrC   r   ÚlnÚliness         r   Ú_normalize_textrM   Z   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 }| j                  d¬«      D �]  }|j                  dk(  r|j                  t	        |«      «       Œ.|j                  dv �rûg }|j                  d«      D ]²  }|j                  d«      }|sŒt	        |«      j                  «       }d|v s&t        j                  d|t        j                  «      sŒZ|j                  d	¬
«      xs |j                  d«      d   }	|j                  d«      st        ||«      }|j                  ||	|f«       Œ´ |D ])  \  }}	}|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                  |«       �Œ8|j                  dk(  r�ŒIt#        |«      }|s�ŒX||vs�Œ^|j%                  |«       |j                  |«       �Œ‚ dj'                  |«      }|D ]  \  }	}|r|dz  }|d|›d|	›d�z  }Œ ||fS )uh   æ­£æ–‡divå¤„ç�†: ä¿�ç•™è¡¨æ ¼HTML, \n\nåˆ†æ®µ, é™„ä»¶è½¬<p><a>å��ç§°å†…åµŒURL, åŽ»è£…é¥°å›¾/é‡�å¤�æ®µè�½F©Ú	recursiver$   )ÚpÚdivr+   r-   ú/files/ú&\.(pdf|doc|docx|xls|xlsx|zip|rar|wps)$Tr/   ú/éÿÿÿÿr.   ÚimgrC   ú

ú<p><a href="ú" target="_blank">ú</a></p>)Úsetr5   Únamer:   Ústrr   r   r   ÚsearchÚIr8   rG   r6   r   Ú	decomposeÚcopyÚdeepcopyrM   ÚaddrH   )rR   Úpage_urlÚpartsÚ
seen_textsÚattachmentsrI   Ú
file_linksr+   r-   r]   ÚimgsrW   ÚtblsÚp_copyÚtr   Úbodyr   s                     r   Úprocess_content_divro   e   s¦  € à€EÜ“€JØ€Kà�l‰l UˆlÓ+ó 0#ˆØ�7‰7�gÒØ�L‰Lœ˜R›Ô!ØØ�7‰7�lÒ"ð ˆJØ—[‘[ Ó%ò 	7�Ø—u‘u˜V“}�ÙØÜ˜4“y—‘Ó(�Ø Ñ$¬¯	©	Ð2[Ð]aÔce×cgÑcgÕ(hØŸ:™:¨D˜:Ó1ÒH°T·Z±ZÀ³_ÀRÑ5H�DØŸ?™?¨6Ô2Ü& x°Ó6˜Ø×%Ñ% q¨$° oÕ6ð	7ð ",ò ‘��4˜Ø×"Ñ" D¨$ <Ô0Ø—‘•ðð —;‘;˜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Ö"ða0#ðd �;‰;�uÓ€Dà ò K‰	ˆˆcÙØ�F‰NˆDÙÂÂTÐJÑJ‰ðKð �ÐÐr!   c                 ó˜  ‡— t        | d«      }d}|j                  dddi¬«      }|r|j                  d«      rt        |d   «      }|s.|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¬«      }	|	rcd}
|	j                  d¬«      D ];  }|j                  dk7  rŒdj                  |j                  dg «      «      }d|v rŒ9|}
 n |
�t        |
|«      \  }}|j                  dd¬«      }|rÚ|j                  d«      D ]Æ  }|j                  d«      Š‰sŒt        ‰«      j                  «       Šd‰v s&t        j                  d‰t        j                  «      sŒZ|j	                  d	¬
«      xs ‰j                  d«      d   }‰j                  d«      st!        |‰«      Št#        ˆfd„|D «       «      rŒ´|j%                  |‰f«       ŒÈ |D ]   \  }}d|z  |v rŒ|r|dz  }|d |›d!|›d"�z  }Œ" ||||fS )#u8   è¯¦æƒ…è§£æž�: è¿”å›ž (title, date, content, attachments)r#   r   Úmetar]   ÚArticleTitle)ÚattrsÚcontentÚh1Tr/   ÚPubDateNr2   rR   Úfile_detailr&   FrO   rE   ÚclassÚrelate_appendr+   r-   rS   rT   rU   rV   r.   c              3   ó.   •K  — | ]  \  }}|‰k(  –— Œ y ­w©N© )Ú.0Ú_Úur-   s      €r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>Ó   s   øè ø€ Ò=©¨¨A˜1 �9Ñ=ùs   ƒz	href="%s"rX   rY   rZ   r[   )r   r4   r   r    r8   r   r5   r]   rH   ro   r^   r   r_   r`   rG   r6   r   Úanyr:   )r;   re   r=   r   Úmru   r?   rt   rh   ÚfdÚcontent_divÚchildÚclsÚrar+   r]   r   r-   s                    @r   Úextract_detailrˆ   ¦   sb  ø€ ä˜˜}Ó-€Dà€EØ�	‰	�& ¨Ð 8ˆ	Ó9€AÙˆQ�U‰U�9ÔÜ˜A˜i™LÓ)ˆÙØ�Y‰Y�t‹_ˆÙÜ §¡°$ Ó 7Ó8ˆEà€DØ�	‰	�& ¨Ð 3ˆ	Ó4€AÙˆQ�U‰U�9ÔØ�‰|×!Ñ!Ó# C RÐ(ˆà€GØ€KØ	�‰�5 ˆÓ	/€BÙ	ØˆØ—[‘[¨5�[Ó1ò 	ˆEØ�z‰z˜UÒ"ØØ—(‘(˜5Ÿ9™9 W¨bÓ1Ó2ˆCØ #Ñ%ØØˆKÙð	ð Ð"Ü#6°{ÀHÓ#MÑ ˆG�[à	�‰�5 ˆÓ	1€BÙ	Ø—‘˜SÓ!ò 
	5ˆAØ—5‘5˜“=ˆDÙØÜ�t“9—?‘?Ó$ˆDØ˜DÑ ¤B§I¡IÐ.WÐY]Ô_a×_cÑ_cÕ$dØ—z‘z¨�zÓ-ÒD°·±¸C³ÀÑ1D�Ø—‘ vÔ.Ü" 8¨TÓ2�DÜÓ=°Ô=Õ=Ø×&Ñ&¨¨d |Õ4ð
	5ð !ò N‰	ˆˆcØ˜Ñ Ñ'ØÙØ�vÑˆGÙÂ3ÊÐMÑM‰ðNð �$˜ Ð,Ð,r!   c                 ór   — t        j                  d| «      }|rt        |j                  d«      «      S t        S )u4   ä»Ž createPageHTML('page_tag',N,...) æ��å�–æ€»é¡µæ•°z*createPageHTML\('page_tag'\s*,\s*(\d+)\s*,é   )r   r_   ÚintÚgroupÚTOTAL_PAGES)r;   r‚   s     r   Úget_total_pagesrŽ   ß   s.   € ä
�	‰	Ð?ÀÓF€AÙÜ�1—7‘7˜1“:‹ÐÜÐr!   c                  ó4  — 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 �]c  }
|
dk(  rdndj!                  |
«      }dj!                  t"        t$        |t&        «      }t)        |«      }|st        d|
d›d|› d�«       Œ]|
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«      j1                  «       }|r|dz  }|dz  }Œ?t)        |d   «      }|rt3        ||d   «      \  }}}}ndddg f\  }}}}|xs |d   }|xs |j5                  dd«      }|s|dz  }|dz  }Œ›d|v rdnd}d j7                  d!„ |D «       «      }	 |j/                  d"||||d   t8        t        t:        |||d#f«       |j<                  dkD  rt|j>                  }	 tA        jB                  d$d%|«      }tA        jB                  d&d%|«      jE                  «       d d' xs |}|j/                  d(||t        |f«       |dz  }|dz  }�Œm |jI                  «        t        d|
d›d|› d+tK        |«      › d,|› d-|› d.�«       tM        jN                  d/«       �Œf |jQ                  «        t        d0|	› d1|› d2|› �«       y # tF        $ r Y ŒŠw xY w# tF        $ r}t        d)|d   › d*|› �«       Y d }~�Œd }~ww xY w)3Nr   u   çˆ¬è™«)Údescriptionz--pagesrŠ   u   çˆ¬å�–é¡µæ•°(é»˜è®¤1))ÚtypeÚdefaultÚhelpz--script-nameu   è„šæœ¬å��(å†™åº“))r’   r“   u   ðŸ”� u    â€” çˆ¬å�– u	    é¡µ (å…±u   é¡µ)r
   r   r   z_{}z/{}/huanghua/{}/list{}.shtml?xiangChannelCode={}z  [pÚ2drU   u   ] âœ— HTTPå¤±è´¥u     â„¹ ç«™ç‚¹å®žé™…æ€»é¡µæ•° u   ï¼Œæœ¬æ¬¡çˆ¬å�–ä¸Šé™�è°ƒæ•´u   ] âœ— æœªè§£æž�åˆ°æ�¡ç›®z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r   r   r3   z<tableú,c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr{   r|   )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<[^>]+>rE   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Úprintr�   Úsqlite3Úconnectr   ÚcursorÚrangeÚformatr7   ÚCHANNELÚXIANG_CHANNELr   rŽ   rA   ÚexecuteÚfetchonerˆ   r   rH   ÚDOMAINÚ
GROUP_NAMEÚrowcountÚ	lastrowidr   r   r   r   Úcommitr9   ÚtimeÚsleepÚclose) r™   ÚparserÚargsÚpages_to_crawlr    ÚconnÚcurÚ	new_totalÚ
skip_totalÚtotal_itemsÚpageÚpage_suffixÚlist_urlr;   Útpr<   Úpage_newÚ	page_skipÚitemÚexistsÚdetail_htmlÚd_titleÚd_datert   rh   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˜¨!Ñ+Ó,ó JˆØ  AšI‘b¨5¯<©<¸Ó+=ˆØD×KÑKÜ”g˜{¬Mó;ˆä�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ŽðUJðX 	‡J�J„LÜ	Ð# K =°À	¸{È+ÐV`ÐUaÐ
bÕcøô %ò Ùðûô ò @ÜÐ+¨D°©K¨=¸¸1¸#Ð>×?Ò?ûð@ús>   È<AM/ÊAM Ë!
M/Í 	M,Í)M/Í+M,Í,M/Í/	NÍ8NÎNÚ__main__)r   )(Ú__doc__r   ÚsysÚosr°   r¢   rb   ÚrequestsÚbs4r   Úurllib.parser   r›   r¬   r«   r7   r§   r¨   r�   ÚpathÚbasenameÚ__file__r�   Úgetenvr   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r    rA   rM   ro   rˆ   rŽ   rË   Ú__name__r|   r!   r   ú<module>rÜ      sî   ðñó 
Û 
Û 	Û Û Û Û Ý Ý  à$€	Ø€
Ø	€Ø'€Ø
€Ø€Ø€Ø�g‰g×Ñ˜xÓ(€àˆB�I‰I�kÐ#4Ó5€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òòòò4ò>óB6-òrò`dðF ˆzÒÙ…Fð r!   