Ë
    ¸¬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mZ ej                  j                  d«      rdnej                  j                  d«      ZdZdZeez   dz   Zd	Zd
ZdZdZdZdZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u  
æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ… - å»ºè®¾é¡¹ç›®å�—ç�†æƒ…å†µå…¬å¼€
https://sthjt.hunan.gov.cn/sthjt/xxgk/xzgs/jsxm/hpgs/jsslgk/index.html

CMS: è‡ªå®šä¹‰ï¼ˆæ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…ç½‘ç«™ç¾¤ï¼‰
åˆ—è¡¨: <table class="table_list"> é�™æ€�åˆ†é¡µ
åˆ†é¡µ: index.html â†’ index_2.html â†’ index_3.html ... (æ¯�é¡µ25æ�¡ï¼Œå…±20é¡µ)
è¯¦æƒ…æ ‡é¢˜: <meta name="ArticleTitle">
è¯¦æƒ…æ—¥æœŸ: <meta name="PubDate" content="2026-07-13 08:55:39">
æ­£æ–‡å®¹å™¨: <div class="main_con_zw" id="j-show-body">
SSL: --curves secp384r1 -k (æœ�åŠ¡å™¨ç«¯OpenSSLå…¼å®¹æ€§)
é    N)ÚBeautifulSoupz/mnt/data/search.dbz~/data/search.dbzhttps://sthjt.hunan.gov.cnz!/sthjt/xxgk/xzgs/jsxm/hpgs/jsslgkz/index.htmlzsthjt.hunan.gov.cnz113.246.57.9é   u	   æ¹–å�—çœ�u   çŽ¯è¯„å…¬ç¤ºu   æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…c                 ób  — ddddddddd	d
t         › dt        › �g}|j                  | «       	 t        j                  |ddd¬«      }|j
                  dk7  r)t        d|j
                  › d|j                  dd › �«       y|j                  S # t        j                  $ r t        d| › �«       Y yw xY w)u4   ç”¨curlèŽ·å�–é¡µé�¢ï¼Œå¤„ç�†SSLå…¼å®¹æ€§å’ŒDNSé—®é¢˜Úcurlz-sSz--connect-timeoutÚ10z-mÚ30z--curvesÚ	secp384r1z-kz	--resolvez:443:Té#   ©Úcapture_outputÚtextÚtimeoutr   u     [WARN] curlè¿”å›žç � z: Néd   u     [WARN] è¶…æ—¶: )
ÚDOMAINÚIPÚappendÚ
subprocessÚrunÚ
returncodeÚprintÚstderrÚstdoutÚTimeoutExpired)ÚurlÚcmdÚresults      ú&/root/gov_crawler/crawl_hunan_sthjt.pyÚ
fetch_pager   %   sÃ   € ð 	�Ð*¨D°$¸Ø�K Øœ�x˜u¤R DÐ)ð€Cð
 ‡J�Jˆs„OðÜ—‘ °D¸tÈRÔPˆØ×Ñ Ò!ÜÐ+¨F×,=Ñ,=Ð+>¸bÀÇÁÈtÐPSÐATÐ@UÐVÔWØØ�}‰}ÐøÜ×$Ñ$ò ÜÐ! # Ð'Ô(Ùðús   ­AB
 Á>B
 Â
!B.Â-B.c                 óD	  — | j                  d«      r| nt        | z   }t        |«      }|syt        |d«      }d}|j	                  d«      D ]#  }|j                  dd«      j                  «       } n |sC|j                  d«      }|r0|j                  d¬	«      j                  d
d«      j                  «       }|j                  dd«      j                  dd«      j                  dd«      j                  dd«      j                  «       }d}|j	                  d«      D ]#  }|j                  dd«      j                  «       } n |sL|j                  dd¬«      }|r7t        j                  d|j                  «       «      }|r|j                  d«      }|r|dd }|j                  d«      xs |j                  d«      }	d}
|	�rbg }|	j                  D �]=  }t        |dd«      }|dk(  rÕ|j                  d«      }|r›|j                  D ]‹  }t        |dd«      }|€.t!        |«      j                  «       }|sŒ.|j#                  |«       Œ@|dk(  r|j#                  t!        |«      «       Œ`|dk(  rŒf|j                  d¬	«      }|sŒ{|j#                  |«       Œ� ŒÄ|j                  d¬	«      }|sŒÙ|j#                  |«       Œë|dk(  r|j#                  t!        |«      «       �Œ|��Œt!        |«      j                  «       }|s�Œ-|j#                  |«       �Œ@ |rdj%                  |«      }
t'        |
«      dk  �rp|	�rmg }|	j	                  d«      D ]W  }|j                  d d«      }|r-|j                  d«      s|j                  d!«      r	t        |z   n|}|j#                  d"|› �«       ŒY |	j	                  d#«      D ]À  }|j                  d$d«      }d%|v r5|j)                  «       j+                  d&«      d'   j-                  d%d«      d(   nd}|d)v sŒU|j                  d«      s|j                  d!«      r	t        |z   n|}|j                  d¬	«      xs |j+                  d!«      d(   }|j#                  d*|› d+|› �«       ŒÂ |r*|
sd,j%                  |«      n|
d,z   d,j%                  |«      z   }
|||
fS )-u0   èŽ·å�–è¯¦æƒ…é¡µå¹¶æ��å�–æ ‡é¢˜ã€�æ—¥æœŸã€�æ­£æ–‡Úhttp)NNNúhtml.parserÚ zmeta[name=ArticleTitle]ÚcontentÚtitleT©Ústripu    - æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…ú&middot;ú&nbsp;õ   Â õ   ã€€zmeta[name=PubDate]ÚdivÚmain_con_ftit)Úclass_u   æ—¶é—´[ï¼š:](\d{4}-\d{2}-\d{2})é   Né
   zdiv.main_con_zw#j-show-bodyzdiv.main_con_zwÚnameÚpÚtableÚbrz

iô  zimg[src]Úsrcú/u	   [å›¾ç‰‡] za[href]Úhrefú.ú?r   éÿÿÿÿ)
ÚpdfÚdocÚdocxÚxlsÚxlsxÚjpgÚpngÚgifÚzipÚraru	   [é™„ä»¶: ú] ú
)Ú
startswithÚBASE_URLr   r   ÚselectÚgetr&   ÚfindÚget_textÚreplaceÚreÚsearchÚgroupÚ
select_oneÚchildrenÚgetattrÚstrr   ÚjoinÚlenÚlowerÚsplitÚrsplit)Ú
detail_urlÚfull_urlÚhtmlÚsoupr$   ÚmÚtÚdate_strÚftitÚcontent_divr   Ú
paragraphsÚchildr0   Úinner_tableÚnodeÚnnameÚt2Úp_textÚlinksÚimgr4   Úar6   ÚextÚfnames                             r   Úfetch_detailrn   8   s`  € à'×2Ñ2°6Ô:‰zÄÈ:Ñ@U€HÜ�hÓ€DÙØä˜˜}Ó-€Dð €EØ�[‰[Ð2Ó3ò ˆØ—‘�i Ó$×*Ñ*Ó,ˆÙðñ Ø�I‰I�gÓˆÙØ—J‘J T�JÓ*×2Ñ2Ð3PÐRTÓU×[Ñ[Ó]ˆEð �M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐPRÓS×[Ñ[Ð\dÐfhÓi×oÑoÓq€Eð €HØ�[‰[Ð-Ó.ò ˆØ—5‘5˜ BÓ'×-Ñ-Ó/ˆÙðñ Ø�y‰y˜ ˆyÓ7ˆÙÜ—	‘	Ð<¸d¿m¹m»oÓNˆAÙØŸ7™7 1›:�ÙØ˜C˜R�=ˆð —/‘/Ð"?Ó@ÒfÀDÇOÁOÐTeÓDf€Kà€DÚàˆ
Ø ×)Ñ)ó 	)ˆEÜ˜5 &¨$Ó/ˆDØ�sŠ{à#Ÿj™j¨Ó1�Ùà %§¡ò 6˜Ü '¨¨f°dÓ ;˜Ø ˜=Ü # D£	§¡Ó 1˜AÚ Ø *× 1Ñ 1°!Õ 4Ø" gÒ-Ø&×-Ñ-¬c°$«iÕ8Ø" dš]Ø à!%§¡°T Ó!:˜BÚ!Ø *× 1Ñ 1°"Õ 5ñ6ð #Ÿ^™^°$˜^Ó7�FÚØ"×)Ñ)¨&Õ1Ø˜’à×!Ñ!¤# e£*Ö-Ø’Ü˜“J×$Ñ$Ó&�ÛØ×%Ñ% aÖ(ð?	)ñ@ Ø—;‘;˜zÓ*ˆDô ˆ4ƒy�3ƒš;ØˆØ×%Ñ% jÓ1ò 	,ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨&Ô1Ø(+¯©°sÔ(;”h ’nÀ�Ø�L‰L˜9 S EÐ*Õ+ð		,ð
 ×#Ñ# IÓ.ò 	:ˆAØ—5‘5˜ Ó$ˆDØCFÈ$Á;�$—*‘*“,×$Ñ$ SÓ)¨!Ñ,×3Ñ3°C¸Ó;¸BÒ?ÐTVˆCØÐ^Ò^Ø—‘ vÔ.Ø.2¯o©o¸cÔ.Bœ8 dš?È�DØŸ
™
¨˜
Ó.ÒE°$·*±*¸S³/À"Ñ2E�Ø—‘˜y¨¨¨r°$°Ð8Õ9ð	:ñ Ù+/�4—9‘9˜UÔ#°T¸D±[À4Ç9Á9ÈUÓCSÑ5SˆDà�(˜DÐ Ð ó    c                 óV  — t        | d«      }g }|j                  d«      xs |j                  d«      }|D ]Ö  }|j                  d«      }t        |«      dk  rŒ#t        |«      dkD  r|d   j	                  d«      nd}|sŒJ|j                  d	d
«      j                  «       }|j                  d¬«      }	t        |«      dkD  r|d   j                  d¬«      nd
}
|sŒ¤|	sŒ§|j                  d«      r|nt        |z   }|j                  ||	|
f«       ŒØ t        d|› dt        |«      › d�«       |S )u8   è§£æž�åˆ—è¡¨é¡µï¼Œè¿”å›ž (url, title, date) å…ƒç»„åˆ—è¡¨r!   ztable.table_list tbody trztable.table_list trÚtdé   r.   rk   Nr6   r"   Tr%   é   r    u     ç¬¬u   é¡µ: u   æ�¡)r   rH   Úfind_allrU   rJ   rI   r&   rK   rF   rG   r   r   )r[   Úpage_numr\   ÚitemsÚrowsÚrowÚcellsÚa_tagr6   Ú
list_titleÚ	date_cellÚ	full_hrefs               r   Úparse_list_pager~   œ   s  € ä˜˜}Ó-€DØ€EØ�;‰;Ð2Ó3ÒY°t·{±{ÐCXÓ7Y€DØò =ˆØ—‘˜TÓ"ˆÜˆu‹:˜Š>ØÜ&)¨%£j°1¢n��a‘—‘˜cÔ"¸$ˆÙØØ�y‰y˜ Ó$×*Ñ*Ó,ˆØ—^‘^¨$�^Ó/ˆ
Ü58¸³ZÀ!²^�E˜!‘H×%Ñ%¨DÐ%Ô1Èˆ	Ú’JØ $§¡°Ô 7™¼XÈ¹_ˆIØ�L‰L˜) Z°Ð;Õ<ð=ô 
ˆE�(�˜5¤ U£ ¨CÐ
0Ô1Ø€Lro   c                  óþ
  — dd l } | j                  d¬«      }|j                  dt        t        dt        › d�¬«       |j                  «       }|j                  }t        d|› d	�«       g }t        d
|d
z   «      D ]Z  }|d
k(  rt        }nt        › t        › d|› d�}t        |«      }|st        d|› d�«       Œ>t        ||«      }|j                  |«       Œ\ t        dt        |«      › d�«       t!        «       }	g }
|D ]0  \  }}}||	vsŒ|	j#                  |«       |
j%                  |||f«       Œ2 t        dt        |
«      › d�«       t        d«       g }t'        |
d
«      D ]ï  \  }\  }}}t        d|› dt        |
«      › d|d d › d	�d¬«       t(        j*                  j-                  «        t/        |«      \  }}}|sR|}|j1                  dd«      j1                  dd«      j1                  dd«      j1                  dd«      j3                  «       }|s|}|rt        dt        |«      › d �«       nt        d!«       |j%                  ||||||d"œ«       Œñ t        d#t        |«      › d$t4        › d	�«       t6        j8                  j;                  t4        «      sjt        d%t4        › �«       t        d&«       |d d' D ],  }t        d(|d)   › d*|d+   d d, › d*t        |d-   «      › d �«       Œ. t        d.t        |«      › d/�«       y dd l}|j?                  t4        «      }|jA                  «       }d}|D ]L  }	 |jC                  d0|d+   |d-   |d)   |d1   |d2   tD        tF        tH        f«       |jJ                  dkD  r|d
z  }ŒN |jO                  «        |dkD  r”t        d4|› d5�«       dd l(}d6tD        z   d7z   }|jS                  d8d9|t4        tU        |«      gd:d:d¬;«      }t        d<|j*                  j3                  «       › �«       |jV                  r't        d=|jV                  d d> › �«       nt        d?«       |jY                  «        t        d@«       t[        dA„ |D «       «      }t        dBt        |«      › �«       t        dC|› �«       t        dD|› �«       t        dEtD        › �«       t        dF«       t        dGdH› �«       t        dIdJ›ddKdL›ddMdN›�«       t        dH› «       |d d' D ]E  }t        |d+   «      dOkD  r|d+   d dO n|d+   }t        |d)   dJ›d|dL›dt        |d-   «      dN›�«       ŒG t        |«      d'kD  rt        dPt        |«      › d�«       t        dH› «       y # tL        $ r}t        d3|› �«       Y d }~�ŒMd }~ww xY w)QNr   u=   æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…-å»ºè®¾é¡¹ç›®å�—ç�†æƒ…å†µå…¬å¼€çˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°(æ¯�é¡µ25æ�¡,é»˜è®¤ú))ÚtypeÚdefaultÚhelpu   ðŸŒ� çˆ¬å�–åˆ—è¡¨é¡µ 1-z...r.   z/index_z.htmlu     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µu   
ðŸ“‹ å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®u   ðŸ”� åŽ»é‡�å�Ž u    æ�¡u   
ðŸ“„ çˆ¬å�–è¯¦æƒ…é¡µ...z  [r5   rD   é   ú )Úendr'   r"   r(   r)   r*   u   âœ… u   å­—u   âš ï¸� æ­£æ–‡ä¸ºç©º)r$   Údater#   r   Ú
source_urlr{   u   
ðŸ’¾ å…¥åº“ u    æ�¡åˆ° u     [ERROR] æ•°æ�®åº“ä¸�å­˜åœ¨: u   
ðŸ“Š ç»“æžœé¢„è§ˆ:r   z  rˆ   z | r$   é(   r#   u
   
  ...å…± u    æ�¡ (æœªå…¥åº“)zŒINSERT OR IGNORE INTO gov_raw (title, content, publish_date, page_url, source_url, site_name, group_name, industry) VALUES (?,?,?,?,?,?,?,?)r   r‰   u     [ERROR] å…¥åº“å¤±è´¥: u   
ðŸ”� FTSå�Œæ­¥ u    æ�¡...zß
import sqlite3, sys
db = sys.argv[1]
conn = sqlite3.connect(db)
c = conn.cursor()
added = int(sys.argv[2])
c.execute("SELECT id, title, content FROM gov_raw ORDER BY id DESC LIMIT ?", (added,))
rows = c.fetchall()
site = 'u5  '
for rowid, title, content in rows:
    c.execute("INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)",
              (rowid, title, site, (content or '')[:500]))
conn.commit()
c.execute("SELECT COUNT(*) FROM gov_search")
print(f"FTSæ�¡æ•°: {c.fetchone()[0]}")
conn.close()
Úpython3z-cTr   z  FTS: z  FTS stderr: r   u+   
  âš ï¸� æ— æ–°å¢žè®°å½•ï¼Œè·³è¿‡FTSå�Œæ­¥u   
ðŸ“Š ç»“æžœæ€»è§ˆ:c              3   ó,   K  — | ]  }|d    rŒ	d–— Œ y­w)r#   r.   N© )Ú.0Úrs     r   ú	<genexpr>zmain.<locals>.<genexpr>-  s   è ø€ Ò=˜A°°)³”aÑ=ùs   ‚
�u     æ€»æ�¡æ•°: u     æ–°å¢žå…¥åº“: u     ç©ºæ­£æ–‡: u
     ç«™ç‚¹: u(     æ �ç›®: å»ºè®¾é¡¹ç›®å�—ç�†æƒ…å†µå…¬å¼€rE   u´   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   æ—¥æœŸz<14u   æ ‡é¢˜z<40u   å­—æ•°z>6é&   u
     ... å…± ).ÚargparseÚArgumentParserÚadd_argumentÚintÚPAGESÚ
parse_argsÚpagesr   ÚrangeÚLIST_URLrG   Ú	LIST_PATHr   r~   ÚextendrU   ÚsetÚaddr   Ú	enumerateÚsysr   Úflushrn   rL   r&   ÚDB_PATHÚosÚpathÚexistsÚsqlite3ÚconnectÚcursorÚexecuteÚ	SITE_NAMEÚ
GROUP_NAMEÚINDUSTRYÚrowcountÚ	ExceptionÚcommitr   r   rS   r   ÚcloseÚsum)r’   ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpageÚlist_urlr[   rv   Ú	seen_urlsÚunique_itemsr6   r{   rˆ   ÚresultsÚidxÚ	list_dater$   r_   r   r�   r¦   ÚconnÚcÚaddedÚeÚspÚscriptr   Úempty_countÚtitle_shorts                                  r   ÚmainrÅ   ²   sÍ  € ÛØ×$Ñ$Ð1pÐ$Óq€FØ
×Ñ˜	¬´UÐCbÔchÐbiÐijÐAkÐÔlØ×ÑÓ€DØ—
‘
€Iô 
Ð# I ;¨cÐ
2Ô3Ø€IÜ�a˜ Q™Ó'ò 
 ˆØ�1Š9Ü‰Hä"˜¤I ;¨g°d°V¸5ÐAˆHÜ˜(Ó#ˆÙÜÐ-¨d¨V°3Ð7Ô8ØÜ  dÓ+ˆØ×Ñ˜Õð
 ô 
Ðœc )›nÐ-Ð-=Ð
>Ô?ô “€IØ€LØ"+ò :Ñˆˆj˜$Ø�yÒ Ø�M‰M˜$ÔØ×Ñ  z°4Ð 8Õ9ð:ô 
ˆOœC Ó-Ð.¨dÐ
3Ô4ô 
Ð
%Ô&Ø€GÜ.7¸ÀaÓ.Hò Ñ*ˆÑ*ˆd�J 	Ü��C�5˜œ#˜lÓ+Ð,¨B¨z¸#¸2¨Ð.?¸sÐCÈÕMÜ�
‰
×ÑÔä ,¨TÓ 2Ñˆˆx˜ÙØˆEØ—M‘M *¨bÓ1×9Ñ9¸(ÀBÓG×OÑOÐPVÐXZÓ[×cÑcÐdlÐnpÓq×wÑwÓyˆEÙØ ˆHáÜ�Dœ˜T›˜ 3Ð'Õ(äÐ'Ô)à�‰ØØØØØØ$ñ
õ 	ð!ô4 
ˆNœ3˜w›<˜.¨´°	¸Ð
=Ô>Ü�7‰7�>‰>œ'Ô"ÜÐ.¬w¨iÐ8Ô9äÐ$Ô%Ø˜˜!�ò 	QˆAÜ�B�q˜‘y�k  Q w¡Z°° _Ð$5°S¼¸Q¸y¹\Ó9JÐ8KÈ3ÐOÕPð	Qä�œC ›L˜>Ð)9Ð:Ô;ØãØ�?‰?œ7Ó#€DØ�‰‹€Aà€EØò 	2ˆð	2Ø�I‰Ið _Ø�7‘˜Q˜y™\¨1¨V©9°a¸±hÀÀ,ÁÔQZÔ\fÔhpÐqôð �z‰z˜AŠ~Ø˜‘
�øð	2ð 	‡K�K„Mð ˆq‚yÜÐ! % ¨Ð0Ô1Ûðô ñðñˆð" —‘˜ D¨&´'¼3¸u»:ÐFØ'+°$Àð ó Dˆä�˜Ÿ™×+Ñ+Ó-Ð.Ð/Ô0Ø�=Š=Ü�N 6§=¡=°°#Ð#6Ð"7Ð8Õ9äÐ<Ô=à‡J�J„Lô 
Ð Ô"ÜÑ= Ô=Ó=€KÜ	ˆMœ#˜g›,˜Ð
(Ô)Ü	Ð˜U˜GÐ
$Ô%Ü	ˆM˜+˜Ð
'Ô(Ü	ˆJ”y�kÐ
"Ô#Ü	Ð4Ô6ä	ˆBˆzˆlÐ
ÔÜ	ˆX�cˆN˜!˜H S˜>¨¨8°B¨-Ð
8Ô9Ü	ˆZˆLÔØ�R�aˆ[ò KˆÜ),¨Q¨w©Z«¸2Ò)=�a˜‘j  "‘oÀ1ÀWÁ:ˆÜ��6‘˜3�˜q ¨SÐ 1°´3°q¸±|Ó3DÀRÐ2HÐIÕJðKô ˆ7ƒ|�aÒÜ�
œ3˜w›<˜.¨Ð-Ô.Ü	ˆZˆLÕøôk ò 	2ÜÐ,¨Q¨CÐ0×1Ò1ûð	2ús   Ì.A	UÕ	U<Õ#U7Õ7U<Ú__main__)Ú__doc__r    r£   rM   r   ÚjsonÚbs4r   r¤   r¥   Ú
expanduserr¢   rG   r›   rš   r   r   r–   r«   r¬   rª   r   rn   r~   rÅ   Ú__name__r�   ro   r   ú<module>rÌ      s­   ðñó Û 	Û 	Û Û Ý ð $&§7¡7§>¡>Ð2GÔ#HÑ
ÈbÏgÉg×N`ÑN`ÐasÓNt€ð (€Ø/€	Ø�iÑ -Ñ/€Ø	€Ø€Ø	€Ø€
Ø€Ø&€	òò&a!òHò,JðZ ˆzÒÙ…Fð ro   