Ë
    ¸¬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„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uš  
å»¶æ´¥åŽ¿ - å…¬å‘Šå…¬ç¤º
https://www.yanjin.gov.cn/news/31.html

CMS: è‡ªå®šä¹‰CMSï¼ˆå»¶æ´¥åŽ¿ï¼‰
WAF: Apache 403 IPé˜»æ–­ - éœ€è‡ªå®šä¹‰User-Agentç»•è¿‡
åˆ—è¡¨: <div class="news-list mt-20"> -> <div class="news-item">
åˆ†é¡µ: /news/31.html?page=N (å…±57é¡µ, æ¯�é¡µ15æ�¡)
è¯¦æƒ…: /newsinfo/{id}.html
è¯¦æƒ…æ ‡é¢˜: <title>æ ‡ç­¾
è¯¦æƒ…æ—¥æœŸ: é¡µé�¢æ–‡æœ¬ä¸­YYYY-MM-DD
æ­£æ–‡å®¹å™¨: <div class="news-content">
é    N)ÚBeautifulSoupz/mnt/data/search.dbz~/data/search.dbzhttps://www.yanjin.gov.cnz/news/31.htmlzwww.yanjin.gov.cné   u   æ²³å�—çœ�æ–°ä¹¡å¸‚u   æ”¿åºœå…¬å‘Šu	   å»¶æ´¥åŽ¿zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c           	      óD  — dddddddt         | g	}	 t        j                  |ddd	¬
«      }|j                  dk7  rt	        d|j                  › �«       yd|j
                  dd v rt	        d«       y|j
                  S # t        j                  $ r t	        d| › �«       Y yw xY w)u,   èŽ·å�–é¡µé�¢ï¼Œç”¨User-Agentç»•è¿‡Apache 403Úcurlz-sSz--connect-timeoutÚ10z-mÚ30z-ATé#   ©Úcapture_outputÚtextÚtimeoutr   u     [WARN] curlè¿”å›žç � Nz403 Forbiddenéô  z  [WARN] 403 Forbiddenu     [WARN] è¶…æ—¶: )ÚUAÚ
subprocessÚrunÚ
returncodeÚprintÚstdoutÚTimeoutExpired)ÚurlÚcmdÚresults      ú&/root/gov_crawler/crawl_yanjin_gsgg.pyÚ
fetch_pager   %   s³   € ð 	�Ð*¨D°$¸ØŒbØð€Cð
Ü—‘ °D¸tÈRÔPˆØ×Ñ Ò!ÜÐ+¨F×,=Ñ,=Ð+>Ð?Ô@ØØ˜fŸm™m¨D¨SÐ1Ñ1ÜÐ*Ô,ØØ�}‰}ÐøÜ×$Ñ$ò ÜÐ! # Ð'Ô(Ùðús   ‘A A; ÁA; Á/A; Á;!BÂBc                 óˆ	  — t        | «      }|syt        |d«      }d}|j                  d«      }|r7|j                  d¬«      }t	        j
                  dd|«      j                  «       }|j                  dd«      j                  d	d«      j                  d
d«      j                  dd«      j                  «       }d}|j                  «       }t	        j                  d|«      }|r|j                  d«      }|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  �rF|�rCg }|j#                  d«      D ]W  }|j%                  dd«      }|r-|j'                  d«      s|j'                  d«      r	t(        |z   n|}|j                  d|› �«       ŒY |j#                  d«      D ]W  }|j%                  dd«      }|r-|j'                  d«      s|j'                  d«      r	t(        |z   n|}|j                  d|› �«       ŒY |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   èŽ·å�–è¯¦æƒ…é¡µå¹¶æ��å�–æ ‡é¢˜ã€�æ—¥æœŸã€�æ­£æ–‡)NNNúhtml.parserÚ ÚtitleT©Ústripu3   \s*-\s*å…¬å‘Šå…¬ç¤º\s*-\s*å»¶æ´¥åŽ¿äººæ°‘æ”¿åºœ\s*$ú&middot;ú&nbsp;õ   Â õ   ã€€z(\d{4}-\d{2}-\d{2})é   zdiv.news-contentÚnameNÚpÚtableÚbrz

r   zimg[src]ÚsrcÚhttpú/u	   [å›¾ç‰‡] ziframe[src]u   [é™„ä»¶PDF] zobject[data]Údataza[href]Úhrefú.ú?r   éÿÿÿÿ)
ÚpdfÚdocÚdocxÚxlsÚxlsxÚjpgÚpngÚgifÚzipÚraru	   [é™„ä»¶: ú] ú
)r   r   ÚfindÚget_textÚreÚsubr    ÚreplaceÚsearchÚgroupÚ
select_oneÚchildrenÚgetattrÚstrÚappendÚjoinÚlenÚselectÚgetÚ
startswithÚBASE_URLÚlowerÚsplitÚrsplit)Ú
detail_urlÚhtmlÚsoupr   ÚtÚdate_strÚall_textÚmÚcontent_divr   Ú
paragraphsÚchildr&   Úinner_tableÚnodeÚnnameÚt2Úp_textÚlinksÚimgr*   ÚiframeÚobjr-   Úar.   ÚextÚfnames                               r   Úfetch_detailri   :   sp  € ä�jÓ!€DÙØä˜˜}Ó-€Dð €EØ�	‰	�'Ó€AÙØ—
‘
 �
Ó&ˆä—‘ÐMÈrÐSXÓY×_Ñ_Óaˆð �M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐPRÓS×[Ñ[Ð\dÐfhÓi×oÑoÓq€Eð €HØ�}‰}‹€HÜ
�	‰	Ð(¨(Ó3€AÙØ—7‘7˜1“:ˆð —/‘/Ð"4Ó5€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Ö(ð9	)ñ: Ø—;‘;˜zÓ*ˆDô ˆ4ƒy�3ƒš;ØˆØ×%Ñ% jÓ1ò 	,ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨&Ô1Ø(+¯©°sÔ(;”h ’nÀ�Ø�L‰L˜9 S EÐ*Õ+ð		,ð
 "×(Ñ(¨Ó7ò 	/ˆFØ—*‘*˜U BÓ'ˆCÙ˜3Ÿ>™>¨&Ô1Ø(+¯©°sÔ(;”h ’nÀ�Ø�L‰L˜<¨ uÐ-Õ.ð		/ð
 ×%Ñ% nÓ5ò 	0ˆCØ—7‘7˜6 2Ó&ˆDÙ˜DŸO™O¨FÔ3Ø*.¯/©/¸#Ô*>”x $’ÀD�Ø�L‰L˜<¨ vÐ.Õ/ð		0ð
 ×#Ñ# 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                 ó  — t        | d«      }g }|j                  d«      D ]Î  }|j                  d«      }|sŒ|j                  dd«      j	                  «       }|j                  dd¬«      }|r|j                  d	¬
«      n|j                  dd«      }|j                  dd¬«      }	|	r|	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div.news-itemrf   r.   r   Údivz
news-title)Úclass_Tr   r   z	news-timer+   u     ç¬¬u   é¡µ: u   æ�¡)r   rL   r>   rM   r    r?   rN   rO   rI   r   rK   )rT   Úpage_numrU   ÚitemsÚitemÚa_tagr.   Ú	title_divr   Útime_divrW   Ú	full_hrefs               r   Úparse_list_pageru   š   s  € ä˜˜}Ó-€DØ€EØ—‘˜OÓ,ò 7ˆØ—	‘	˜#“ˆÙØØ�y‰y˜ Ó$×*Ñ*Ó,ˆà—I‘I˜e¨L�IÓ9ˆ	Ù2;�	×"Ñ"¨Ð"Ô.ÀÇÁÈ7ÐTVÓAWˆà—9‘9˜U¨;�9Ó7ˆÙ4<�8×$Ñ$¨4Ð$Ô0À"ˆÚ’EØ $§¡°Ô 7™¼XÈ¹_ˆIØ�L‰L˜) U¨HÐ5Õ6ð7ô 
ˆE�(�˜5¤ U£ ¨CÐ
0Ô1Ø€Lrj   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        › t        › d|› �}t        |«      }|st        d|› d�«       ŒDt        ||«      }|j                  |«       Œb 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|}|j/                  dd«      j/                  dd«      j/                  dd«      j/                  dd«      j1                  «       }|s|}|rt        dt        |«      › d�«       nt        d «       |j#                  |||||d!œ«       Œð t        d"t        |«      › d#t2        › d	�«       t4        j6                  j9                  t2        «      sRt        d$t2        › �«       t        d%«       |d d& D ],  }t        d'|d(   › d)|d*   d d+ › d)t        |d,   «      › d�«       Œ. y dd l}|j=                  t2        «      }|j?                  «       }d}|D ]L  }	 |jA                  d-|d*   |d,   |d(   |d.   |d/   tB        tD        tF        f«       |jH                  dkD  r|d
z  }ŒN |jM                  «        |dkD  r”t        d1|› d2�«       d3tB        z   d4z   }tO        jP                  d5d6|t2        tS        |«      gd7d7d¬8«      }t        d9|j(                  j1                  «       › �«       |jT                  r't        d:|jT                  d d; › �«       nt        d<«       |jW                  «        t        d=«       tY        d>„ |D «       «      }t        d?t        |«      › �«       t        d@|› �«       t        dA|› �«       t        dBtB        › �«       t        dC«       t        dDdE› �«       t        dFdG›ddHdI›ddJdK›�«       t        dE› «       |d d& D ]E  }t        |d*   «      dLkD  r|d*   d dL n|d*   }t        |d(   dG›d|dI›dt        |d,   «      dK›�«       ŒG t        |«      d&kD  rt        dMt        |«      › d�«       t        dE› «       y # tJ        $ r}t        d0|› �«       Y d }~�ŒMd }~ww xY w)NNr   u   å»¶æ´¥åŽ¿-å…¬å‘Šå…¬ç¤ºçˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°(é»˜è®¤ú))ÚtypeÚdefaultÚhelpu   ðŸŒ� çˆ¬å�–åˆ—è¡¨é¡µ 1-z...r%   z?page=u     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µu   
ðŸ“‹ å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®u   ðŸ”� åŽ»é‡�å�Ž u    æ�¡u   
ðŸ“„ çˆ¬å�–è¯¦æƒ…é¡µ...z  [r,   r<   é   ú )Úendr!   r   r"   r#   r$   u   âœ… u   å­—u   âš ï¸� æ­£æ–‡ä¸ºç©º)r   ÚdateÚcontentr   Ú
source_urlu   
ðŸ’¾ å…¥åº“ u    æ�¡åˆ° u     [ERROR] æ•°æ�®åº“ä¸�å­˜åœ¨: u   
ðŸ“Š ç»“æžœé¢„è§ˆ:r   z  r   z | r   é(   r€   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: éd   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     æ �ç›®: å…¬å‘Šå…¬ç¤ºr=   u´   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   æ—¥æœŸz<14u   æ ‡é¢˜z<40u   å­—æ•°z>6é&   u
     ... å…± )-ÚargparseÚArgumentParserÚadd_argumentÚintÚPAGESÚ
parse_argsÚpagesr   ÚrangerO   Ú	LIST_PATHr   ru   ÚextendrK   ÚsetÚaddrI   Ú	enumerateÚsysr   Úflushri   rB   r    ÚDB_PATHÚosÚpathÚexistsÚsqlite3ÚconnectÚcursorÚexecuteÚ	SITE_NAMEÚ
GROUP_NAMEÚINDUSTRYÚrowcountÚ	ExceptionÚcommitr   r   rH   ÚstderrÚcloseÚsum)r‹   ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpageÚlist_urlrT   ro   Ú	seen_urlsÚunique_itemsr.   Ú
list_titler   ÚresultsÚidxÚ	list_dater   rW   r   rˆ   rž   ÚconnÚcÚaddedÚeÚscriptr   Úempty_countÚtitle_shorts                                 r   Úmainr¾   ±   s¯  € ÛØ×$Ñ$Ð1OÐ$ÓP€FØ
×Ñ˜	¬´UÐCVÔW\ÐV]Ð]^ÐA_ÐÔ`Ø×ÑÓ€DØ—
‘
€Iô 
Ð# I ;¨cÐ
2Ô3Ø€IÜ�a˜ Q™Ó'ò 
 ˆØ�1Š9Ü¤)Ñ+‰Hä"˜¤I ;¨f°T°FÐ;ˆ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Ð'Õ(äÐ'Ô)à�‰ØØØØØñ
õ 	ð!ô2 
ˆ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àãØ�?‰?œ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Ã:Ð NØ/3¸$ÈôLˆä�˜Ÿ™×+Ñ+Ó-Ð.Ð/Ô0Ø�=Š=Ü�N 6§=¡=°°#Ð#6Ð"7Ð8Õ9äÐ<Ô=à‡J�J„Lô 
Ð Ô"ÜÑ= Ô=Ó=€KÜ	ˆMœ#˜g›,˜Ð
(Ô)Ü	Ð˜U˜GÐ
$Ô%Ü	ˆM˜+˜Ð
'Ô(Ü	ˆJ”y�kÐ
"Ô#Ü	Ð"Ô$ä	ˆ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Õøôi ò 	2ÜÐ,¨Q¨CÐ0×1Ò1ûð	2ús   ÌA	UÕ	U)ÕU$Õ$U)Ú__main__)Ú__doc__r˜   r›   r@   r   ÚjsonÚbs4r   rœ   r�   Ú
expanduserrš   rO   r“   ÚDOMAINr�   r£   r¤   r¢   r   r   ri   ru   r¾   Ú__name__r†   rj   r   ú<module>rÆ      sž   ðñó Û 	Û 	Û Û Ý ð $&§7¡7§>¡>Ð2GÔ#HÑ
ÈbÏgÉg×N`ÑN`ÐasÓNt€ð '€Ø€	Ø	€Ø	€Ø!€
Ø€Ø€	Øv€òò*]!ò@ò.FðR ˆzÒÙ…Fð rj   