Ë
    ¸¬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dZd	Zd
ZdZdZdZd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/spjdgk_2/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-22 09:14:08">
æ­£æ–‡å®¹å™¨: <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/spjdgk_2/index.htmlzsthjt.hunan.gov.cnz113.246.57.9é   u	   æ¹–å�—çœ�u   çŽ¯è¯„å…¬ç¤ºu   æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…c                 ó¾  — g d¢}|j                  dt        › dt        › �g«       |r|j                  g d¢«       |j                  | «       	 t	        j
                  |ddd¬«      }|j                  dk7  r8|rt        | d	¬
«      S 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	--resolvez:443:)z--curvesÚ	secp384r1z-kTé#   ©Úcapture_outputÚtextÚtimeoutr   F)Ú
use_curvesu     [WARN] curlè¿”å›žç � z: Néd   u     [WARN] è¶…æ—¶: )ÚextendÚDOMAINÚIPÚappendÚ
subprocessÚrunÚ
returncodeÚ
fetch_pageÚprintÚstderrÚstdoutÚTimeoutExpired)Úurlr   ÚcmdÚresults       ú%/root/gov_crawler/crawl_hunan_spjd.pyr   r   $   sØ   € ò€Cð ‡J�J�¤˜x u¬R¨DÐ1Ð2Ô3áØ�
‰
Ò2Ô3Ø‡J�Jˆs„OðÜ—‘ °D¸tÈRÔPˆØ×Ñ Ò!áÜ! #°%Ô8Ð8ÜÐ+¨F×,=Ñ,=Ð+>¸bÀÇÁÈtÐPSÐATÐ@UÐVÔWØØ�}‰}ÐøÜ×$Ñ$ò ÜÐ! # Ð'Ô(Ùðús   Á6B8 Â(B8 Â,B8 Â8!CÃCc                 ó„  ‡— | j                  d«      r	t        | z   n| }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 |r|dd }|j                  d«      }|s|j                  d«      }|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  �rJg }|r|j	                  d«      ng D ]W  }|j                  dd«      }|r-|j                  d«      s|j                  d«      r	t        |z   n|}|j                  d|› �«       ŒY |r|j	                  d«      ng D ]•  }|j                  d d«      Št#        ˆfd!„d"D «       «      sŒ*‰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   èŽ·å�–è¯¦æƒ…é¡µå¹¶æ��å�–æ ‡é¢˜ã€�æ—¥æœŸã€�æ­£æ–‡ú/)NNNúhtml.parserÚ zmeta[name=ArticleTitle]ÚcontentÚtitleT©Ústripu    - æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…ú&middot;ú&nbsp;õ   Â õ   ã€€zmeta[name=PubDate]Né
   zdiv.main_con_zw#j-show-bodyzdiv.main_con_zwz#j-show-bodyÚnameÚpÚtableÚbrz

iô  zimg[src]ÚsrcÚhttpu	   [å›¾ç‰‡] za[href]Úhrefc              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)ÚlowerÚendswith)Ú.0Úextr4   s     €r    ú	<genexpr>zfetch_detail.<locals>.<genexpr>•   s"   øè ø€ Ò|°#�4—:‘:“<×(Ñ(¨×-Ñ|ùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxz.jpgz.pngz.giféÿÿÿÿu	   [é™„ä»¶: ú] ú
)Ú
startswithÚBASE_URLr   r   ÚselectÚgetr(   ÚfindÚget_textÚreplaceÚ
select_oneÚchildrenÚgetattrÚstrr   ÚjoinÚlenÚanyÚsplit)Ú
detail_urlÚfull_urlÚhtmlÚsoupr&   ÚmÚtÚdate_strÚcontent_divr   Ú
paragraphsÚchildr.   Úinner_tableÚnodeÚnnameÚt2Úp_textÚlinksÚimgr2   ÚaÚfnamer4   s                          @r    Úfetch_detailr`   =   s  ø€ à(2×(=Ñ(=¸cÔ(BŒx˜*Ò$È
€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Ó'×-Ñ-Ó/ˆÙðñ Ø˜C˜R�=ˆð —/‘/Ð"?Ó@€KÙØ—o‘oÐ&7Ó8ˆÙà—o‘o nÓ5ˆà€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ƒØˆÙ5@�;×%Ñ% jÔ1Àbò 	,ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨&Ô1Ø(+¯©°sÔ(;”h ’nÀ�Ø�L‰L˜9 S EÐ*Õ+ð		,ñ
 4?�+×$Ñ$ YÔ/ÀBò 	:ˆAØ—5‘5˜ Ó$ˆDÜÓ|Ð9{Ô|Õ|Ø—‘ 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                 ó  — t        | d«      }g }|j                  d«      }|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                  ||	|
f«       Œ¼ t        d|› dt        |«      › d�«       |S )u8   è§£æž�åˆ—è¡¨é¡µï¼Œè¿”å›ž (url, title, date) å…ƒç»„åˆ—è¡¨r#   ztable.table_list tbody trztable.table_list trÚtdé   é   r^   Nr4   r$   Tr'   é   u     ç¬¬u   é¡µ: u   æ�¡)
r   r@   Úfind_allrJ   rB   rA   r(   rC   r   r   )rO   Úpage_numrP   ÚitemsÚrowsÚrowÚcellsÚa_tagr4   Ú
list_titleÚ	date_cells              r    Úparse_list_pagerp       s	  € ä˜˜}Ó-€DØ€EØ�;‰;Ð2Ó3€DÙà�{‰{Ð0Ó1ˆàò 8ˆØ—‘˜TÓ"ˆÜˆu‹:˜Š>ØÜ&)¨%£j°1¢n��a‘—‘˜cÔ"¸$ˆÙØØ�y‰y˜ Ó$×*Ñ*Ó,ˆØ—^‘^¨$�^Ó/ˆ
Ü58¸³ZÀ!²^�E˜!‘H×%Ñ%¨DÐ%Ô1Èˆ	â’JØ�L‰L˜$ 
¨IÐ6Õ7ð8ô 
ˆE�(�˜5¤ U£ ¨CÐ
0Ô1Ø€Lra   c                  ó<  — dd l } | j                  d¬«      }|j                  dt        t        dt        › d�¬«       |j                  «       }|j                  }t        d|› d	�«       g }t        d
|d
z   «      D ][  }|d
k(  rt        t        z   }n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 �]  \  }\  }}}|j'                  d«      r|nt        |z   }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        |«      › d0�«       y dd l}|j?                  t4        «      }|jA                  «       }d}|D ]L  }	 |jC                  d1|d,   |d.   |d*   |d2   |d3   tD        tF        tH        f«       |jJ                  dkD  r|d
z  }ŒN |jO                  «        |dkD  r”t        d5|› d6�«       dd l(}d7tD        z   d8z   }|jS                  d9d:|t4        tU        |«      gd;d;d¬<«      }t        d=|j*                  j3                  «       › �«       |jV                  r't        d>|jV                  d d? › �«       nt        d@«       |jY                  «        t        dA«       t[        dB„ |D «       «      }t        dCt        |«      › �«       t        dD|› �«       t        dE|› �«       t        dFtD        › �«       t        dG«       t        dHdI› �«       t        dJdK›ddLdM›ddNdO›�«       t        dI› «       |d d( D ]E  }t        |d,   «      dPkD  r|d,   d dP n|d,   }t        |d*   dK›d|dM›dt        |d.   «      dO›�«       ŒG t        |«      d(kD  rt        dQt        |«      › d�«       t        dI› «       y # tL        $ r}t        d4|› �«       Y d }~�ŒMd }~ww xY w)RNr   u=   æ¹–å�—çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…-å»ºè®¾é¡¹ç›®å®¡æ‰¹å†³å®šå…¬å¼€çˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°(æ¯�é¡µ25æ�¡,é»˜è®¤ú))ÚtypeÚdefaultÚhelpu   ðŸŒ� çˆ¬å�–åˆ—è¡¨é¡µ 1-z...re   z*/sthjt/xxgk/xzgs/jsxm/hpgs/spjdgk_2/index_z.htmlu     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µu   
ðŸ“‹ å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®u   ðŸ”� åŽ»é‡�å�Ž u    æ�¡u   
ðŸ“„ çˆ¬å�–è¯¦æƒ…é¡µ...r3   z  [r"   r<   é   ú )Úendr)   r$   r*   r+   r,   u   âœ… u   å­—u   âš ï¸� æ­£æ–‡ä¸ºç©º)r&   Údater%   r   Ú
source_urlrn   u   
ðŸ’¾ å…¥åº“ u    æ�¡åˆ° u     [ERROR] æ•°æ�®åº“ä¸�å­˜åœ¨: u   
ðŸ“Š ç»“æžœé¢„è§ˆ:r   z  rz   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    æ�¡...u±  
import sqlite3, sys
db = sys.argv[1]
conn = sqlite3.connect(db)
c = conn.cursor()
# èŽ·å�–æœ€æ–°æ�’å…¥çš„è¡Œ(æŒ‰idå€’åº�å�–addedæ�¡)
added = int(sys.argv[2])
c.execute("SELECT id, title, content FROM gov_raw ORDER BY id DESC LIMIT ?", (added,))
rows = c.fetchall()
for rowid, title, content in rows:
    c.execute("INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)",
              (rowid, title, 'uŠ   ', (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%   re   N© )r8   Úrs     r    r:   zmain.<locals>.<genexpr><  s   è ø€ Ò=˜A°°)³”aÑ=ùs   ‚
�u     æ€»æ�¡æ•°: u     æ–°å¢žå…¥åº“: u     ç©ºæ­£æ–‡: u
     ç«™ç‚¹: u(     æ �ç›®: å»ºè®¾é¡¹ç›®å®¡æ‰¹å†³å®šå…¬å¼€r=   u´   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   æ—¥æœŸz<14u   æ ‡é¢˜z<40u   å­—æ•°z>6é&   u
     ... å…± ).ÚargparseÚArgumentParserÚadd_argumentÚintÚPAGESÚ
parse_argsÚpagesr   Úranger?   ÚLIST_URLr   rp   r   rJ   ÚsetÚaddr   Ú	enumerater>   Úsysr   Úflushr`   rD   r(   ÚDB_PATHÚosÚpathÚexistsÚsqlite3ÚconnectÚcursorÚexecuteÚ	SITE_NAMEÚ
GROUP_NAMEÚINDUSTRYÚrowcountÚ	ExceptionÚcommitr   r   rH   r   ÚcloseÚsum) r‚   ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpageÚlist_urlrO   ri   Ú	seen_urlsÚunique_itemsr4   rn   rz   ÚresultsÚidxÚ	list_daterM   r&   rS   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ä"˜Ð#MÈdÈVÐSXÐYˆ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 	à!Ÿ_™_¨VÔ4‘T¼8Àd¹?ˆ
Ü��C�5˜œ#˜lÓ+Ð,¨B¨z¸#¸2¨Ð.?¸sÐCÈÕMÜ�
‰
×ÑÔä ,¨ZÓ 8Ñˆˆ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Ð'Õ(äÐ'Ô)ð 	�‰ØØØØØ$Ø$ñ
ö 	ð)ô< 
ˆ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ãð"ô %.ñ.ð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Õøôm ò 	2ÜÐ,¨Q¨CÐ0×1Ò1ûð	2ús   ÍA	U9Õ9	VÖVÖVÚ__main__)T)Ú__doc__rŽ   r‘   Úrer   ÚjsonÚbs4r   r’   r“   Ú
expanduserr�   r?   rŠ   r   r   r†   r™   rš   r˜   r   r`   rp   r³   Ú__name__r   ra   r    ú<module>r»      sž   ðñó Û 	Û 	Û Û Ý ð $&§7¡7§>¡>Ð2GÔ#HÑ
ÈbÏgÉg×N`ÑN`ÐasÓNt€ð (€Ø;€Ø	€Ø€Ø	€Ø€
Ø€Ø&€	óò2`!òFò6Pðf ˆzÒÙ…Fð ra   