Ë
    ¸¬uj_1  ã                   ó€  — 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ej$                  j'                  e«      Z ej,                  dd«      ZddddœZdZ ej4                  «       Zej8                  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.gxdh.gov.cn (å¹¿è¥¿æ²³æ± å¤§åŒ–ç‘¶æ—�è‡ªæ²»åŽ¿)
æ �ç›®: /xxgk/zdlyxxgk/shgysyjsly/hjbhly/jsxmhpsp/ (é‡�ç‚¹é¢†åŸŸ-çŽ¯å¢ƒä¿�æŠ¤-å»ºè®¾é¡¹ç›®çŽ¯è¯„å®¡æ‰¹)
CMS: å¹¿è¥¿æ”¿åºœç½‘ç«™ç»Ÿä¸€å¹³å�° (å�Œç”°ä¸œåŽ¿ gxtd.gov.cn)
åˆ—è¡¨: div#morelist > ul.more-list > li > span(æ—¥æœŸ) + a(title, href=./tXXX.shtml)
åˆ†é¡µ: createPageHTML(4,0,"index","shtml","120") â†’ index.shtml / index_{N}.shtml
è¯¦æƒ…: {æ �ç›®ç›®å½•}/t{id}.shtml
è¯¦æƒ…ç»“æž„: h1 æ ‡é¢˜ + meta ArticleTitle/PubDate + div.article-con > div.trs_editor_view(æ­£æ–‡) + div#downloadfile/#relfile(é™„ä»¶)
æ­£æ–‡è§„åˆ™: ä¿�ç•™è¡¨æ ¼HTMLã€�

åˆ†æ®µã€�é™„ä»¶è½¬<p><a>å��ç§°å†…åµŒURLã€�åŽ»è£…é¥°
é    N)ÚBeautifulSoup)Úurljoinu"   å¤§åŒ–åŽ¿-å»ºè®¾é¡¹ç›®çŽ¯è¯„å®¡æ‰¹u   å¹¿è¥¿zwww.gxdh.gov.cnzhttp://www.gxdh.gov.cnz)/xxgk/zdlyxxgk/shgysyjsly/hjbhly/jsxmhpspé   Ú	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_gxdh_hjsp.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   7   s8   € ä�F‰FÐ(¨"¨eªk°rÓ:€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c           	      ó¼  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  dd¬«      D �]  }|j                  dd	¬
«      D �]  }|j                  dd¬«      }|sŒ|d   j                  «       }|j	                  d«      xs |j                  d¬«      }|r|sŒW|j                  d«      rt        t        z   dz   |dd z   }n?|j                  d«      r
t        |z   }n$|j                  d«      st        t        z   dz   |z   }|j                  d«      }	|	r|	j                  d¬«      nd}
|j                  t        |«      ||
dd dœ«       �Œ �Œ" |S )u9   è§£æž�åˆ—è¡¨: div#morelist > ul.more-list > li > span + aúhtml.parserÚdivÚmorelist)ÚidÚulz	more-list©Úclass_ÚliF©Ú	recursiveÚaT)Úhrefr,   r   ©r   z./ú/é   NÚhttpÚspanr   é
   )r   r   Úpublish_date)r   ÚfindÚfind_allr   r   Úget_textÚ
startswithÚBASE_URLÚ	LIST_BASEÚappendr   )ÚhtmlÚitemsÚsoupr#   r%   r(   r+   r,   r   r1   Údate_strs              r   Ú
parse_listr?   >   s]  € à€EÜ˜˜}Ó-€DØ�y‰y˜ :ˆyÓ.€HÙØˆØ×Ñ ¨[ÐÓ9ó ˆØ—+‘+˜d¨e�+Ó4ó 	ˆBØ—‘˜ $�Ó'ˆAÙØØ�V‘9—?‘?Ó$ˆDØ—E‘E˜'“NÒ< a§j¡j°t jÓ&<ˆEÙ¡ØØ�‰˜tÔ$Ü¤)Ñ+¨cÑ1°D¸¸°HÑ<‘Ø—‘ Ô%Ü $‘‘Ø—_‘_ VÔ,Ü¤)Ñ+¨cÑ1°DÑ8�Ø—7‘7˜6“?ˆDÙ48�t—}‘}¨4�}Ô0¸bˆHØ�L‰LÜ$ UÓ+ØØ (¨¨" ñö ò!	ðð, €Lr   c                 ór   — t        j                  d| «      }|rt        |j                  d«      «      S t        S )u-   ä»Ž createPageHTML(N, 0, ...) æ��å�–æ€»é¡µæ•°zcreatePageHTML\(\s*(\d+)\s*,é   )r   ÚsearchÚintÚgroupÚTOTAL_PAGES)r;   Úms     r   Úget_total_pagesrG   ^   s.   € ä
�	‰	Ð1°4Ó8€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 )uJ   æ®µè�½æ–‡æœ¬: <br>è½¬
, æ— åˆ†éš”æ‹¼æŽ¥(get_text), åŽ‹ç¼©ç©ºç™½, åŽ»ç©ºè¡ŒÚbrú
z[ \t\xa0\u3000]+ú )r5   Úreplace_withr6   Úsplitr   r   r   Újoin)ÚelÚbrsrI   r   ÚlnÚliness         r   Ú_normalize_textrS   f   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                  «       Š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                  |«       �ŒH|j                  dk(  r�ŒYt%        |«      }|s�Œh||vs�Œn|j'                  |«       |j                  |«       �Œ’ dj)                  |«      }|D ]   \  }}d|z  |v rŒ|r|dz  }|d|›d|›d�z  }Œ" ||fS )uf   æ­£æ–‡divå¤„ç�†: ä¿�ç•™è¡¨æ ¼HTML, 

åˆ†æ®µ, é™„ä»¶è½¬<p><a>å��ç§°å†…åµŒURL, åŽ»è£…é¥°å›¾/é‡�å¤�æ®µè�½Fr)   Útable)Úpr"   ÚsectionÚarticleÚcenterr+   r,   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|wps)$Tr-   r.   éÿÿÿÿr0   c              3   ó.   •K  — | ]  \  }}|‰k(  –— Œ y ­w©N© ©Ú.0Ú_Úur,   s      €r   ú	<genexpr>z&process_content_div.<locals>.<genexpr>‰   ó   øè ø€ Ò=©¨¨A˜1 �9Ñ=ùó   ƒÚimgrI   ú

ú	href="%s"ú<p><a href="ú" target="_blank">ú</a></p>)Úsetr5   Únamer:   Ústrr   r   r   rB   ÚIr6   rM   r7   r   ÚanyÚ	decomposeÚcopyÚdeepcopyrS   ÚaddrN   )r"   Úpage_urlÚpartsÚ
seen_textsÚattachmentsrO   Ú
file_linksr+   rl   Úimgsre   ÚtblsÚp_copyÚtr   Úbodyr   r,   s                    @r   Úprocess_content_divr~   q   s¹  ø€ à€EÜ“€JØ€Kà�l‰l UˆlÓ+ó 0#ˆØ�7‰7�gÒØ�L‰Lœ˜R›Ô!ØØ�7‰7ÐBÒBàˆ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Ö"ð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 }|sL|j                  dd¬«      }|r7t        j                  d|j	                  «       «      }|r|j                  d«      }d}	g }
|j                  dd¬«      }|rJ|j                  dt        j                  dt        j                  «      ¬«      }|r|n|}t        ||«      \  }	}
dD ]Ê  }|j                  dd|i¬«      }|sŒ|j                  d«      D ]œ  }|j                  d«      Š‰sŒt        ‰«      j                  «       Š‰j                  d«      st        |‰«      Š|j	                  d	¬
«      xs ‰j!                  d«      d   }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   Úmetarl   ÚArticleTitle)ÚattrsÚcontentÚh1Tr-   ÚPubDateNr2   r"   zarticle-inf-leftr&   z(\d{4}-\d{2}-\d{2})rA   zarticle-conz%trs_editor_view|TRS_UEDITOR|trs_paper)ÚdownloadfileÚrelfiler$   r+   r,   r0   r.   rZ   c              3   ó.   •K  — | ]  \  }}|‰k(  –— Œ y ­wr\   r]   r^   s      €r   rb   z!extract_detail.<locals>.<genexpr>ß   rc   rd   rg   rf   rh   ri   rj   )r   r4   r   r   r6   r   r   rB   rD   Úcompilern   r~   r5   rm   r7   r   rM   ro   r:   )r;   rt   r=   r   rF   r„   ÚdateÚinfÚdmrƒ   rw   Úarticle_conÚeditorÚtargetÚaidÚddivr+   rl   r   r,   s                      @r   Úextract_detailr’   ´   sd  ø€ ä˜˜}Ó-€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Ð(ˆÙØ�i‰i˜Ð&8ˆiÓ9ˆÙÜ—‘Ð1°3·<±<³>ÓBˆBÙØ—x‘x “{�à€GØ€KØ—)‘)˜E¨-�)Ó8€KÙØ×!Ñ! %´·
±
Ð;cÔeg×eiÑeiÓ0jÐ!ÓkˆÙ!‘ {ˆÜ2°6¸8ÓDÑˆ�à*ò 5ˆØ�y‰y˜ t¨S kˆyÓ2ˆÚØ—]‘] 3Ó'ò 	5�Ø—u‘u˜V“}�ÙØÜ˜4“y—‘Ó(�Ø—‘ vÔ.Ü" 8¨TÓ2�DØ—z‘z¨�zÓ-ÒD°·±¸C³ÀÑ1D�ÜÓ=°Ô=Õ=Ø×&Ñ&¨¨d |Õ4ñ	5ð5ð !ò N‰	ˆˆcØ˜Ñ Ñ'ØÙØ�vÑˆGÙÂ3ÊÐMÑM‰ðNð �$˜ Ð,Ð,r   c                  óZ  — 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}	d}
t        d|dz   «      D �]t  }|dk(  rt         t"        z   dz   }ndt         t"        |fz  }t%        |«      }|s5t        d|d›d|› d�«       |
dz  }
|
dk\  r|dkD  rt        d|› d�«        �nŒld}
|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t/        ||d   «      \  }}}}ndddg f\  }}}}|xs |d   }|xs |j1                  d d«      }|s|dz  }|dz  }Œ›d!|v rdnd}d"j3                  d#„ |D «       «      }	 |j+                  d$||||d   t4        t        t6        |||d%f«       |j8                  dkD  rt|j:                  }	 t=        j>                  d&d'|«      }t=        j>                  d(d'|«      jA                  «       d d) xs |}|j+                  d*||t        |f«       |dz  }|dz  }�Œm |jE                  «        t        d|d›d|› d-tG        |«      › d.|› d/|› d0�«       tI        jJ                  d1«       �Œw |jM                  «        t        d2|	› d3|› d4|› �«       y # tB        $ r Y ŒŠw xY w# tB        $ r}t        d+|d   › d,|› �«       Y d }~�Œd }~ww xY w)5Nr   u   çˆ¬è™«)Údescriptionz--pagesrA   u   çˆ¬å�–é¡µæ•°(é»˜è®¤1))ÚtypeÚdefaultÚhelpz--script-nameu   è„šæœ¬å��(å†™åº“))r–   r—   u   ðŸ”� u    â€” çˆ¬å�– u	    é¡µ (å…±u   é¡µ)r   r
   z/index.shtmlz%s%s/index_%d.shtmlz  [pÚ2dr.   u   ] âœ— HTTPå¤±è´¥u	     â�¹ ç¬¬u'   é¡µä¸�å­˜åœ¨(404/è¿‡æŠ¥)ï¼Œå�œæ­¢ç¿»é¡µu     â„¹ ç«™ç‚¹å®žé™…æ€»é¡µæ•° u   ï¼Œæœ¬æ¬¡çˆ¬å�–ä¸Šé™�è°ƒæ•´u   ] âœ— æœªè§£æž�åˆ°æ�¡ç›®z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r   r   r   r3   z<tableú,c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr\   r]   )r_   r`   ra   s      r   rb   zmain.<locals>.<genexpr>2  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<[^>]+>rK   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_argumentrC   ÚSCRIPT_NAMEÚ
parse_argsÚpagesÚscript_nameÚprintrE   Úsqlite3Úconnectr   ÚcursorÚranger8   r9   r   rG   r?   ÚexecuteÚfetchoner’   r   rN   ÚDOMAINÚ
GROUP_NAMEÚrowcountÚ	lastrowidr   r   r   r   ÚcommitÚlenÚtimeÚsleepÚclose) r�   ÚparserÚargsÚpages_to_crawlr¤   ÚconnÚcurÚ	new_totalÚ
skip_totalÚtotal_itemsÚfail_streakÚpageÚlist_urlr;   Útpr<   Úpage_newÚ	page_skipÚitemÚexistsÚdetail_htmlÚd_titleÚd_daterƒ   rw   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Ø€Kä�a˜¨!Ñ+Ó,ó PˆØ�1Š9Ü¤)Ñ+¨nÑ<‰Hà,´¼)ÀTÐ/JÑJˆHÜ�X‹ˆÙÜ�D˜˜b˜	  >Ð"2Ð2BÐCÔDØ˜1ÑˆKØ˜aÒ D¨1¢HÜ˜	 $ Ð'NÐOÔPÚØØˆØ�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ŽðaPðd 	‡J�J„LÜ	Ð# K =°À	¸{È+ÐV`ÐUaÐ
bÕcøô %ò Ùðûô ò @ÜÐ+¨D°©K¨=¸¸1¸#Ð>×?Ò?ûð@ús>   ÉANÊAM3Ë4
NÍ3	M?Í<NÍ>M?Í?NÎ	N*ÎN%Î%N*Ú__main__)r   )'Ú__doc__r   ÚsysÚosr²   r¦   rq   ÚrequestsÚbs4r   Úurllib.parser   rŸ   r­   r¬   r8   r9   rE   ÚpathÚbasenameÚ__file__r¡   Úgetenvr   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r   r?   rG   rS   r~   r’   rÍ   Ú__name__r]   r   r   ú<module>rÞ      së   ðñ
ó 
Û 
Û 	Û Û Û Û Ý Ý  à0€	Ø€
Ø	€Ø#€Ø7€	Ø€Ø�g‰g×Ñ˜xÓ(€àˆB�I‰I�kÐ#4Ó5€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òòòò@òò@óF4-ònfdðR ˆzÒÙ…Fð r   