Ë
    ¸¬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 ddl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edk(  r e«        yy)u™  
å�™æ°¸åŽ¿ - å…¬ç¤ºå…¬å‘Š
https://www.xuyong.gov.cn/zwgk/gsgg1

WAF: CloudWAF (418) - éœ€Chromium headlessç»•è¿‡
CMS: SiteServer (ASP.NET)
åˆ—è¡¨: <ul class="newsList"> é�™æ€�æ¸²æŸ“
åˆ†é¡µ: /zwgk/gsgg1_{pageid} (å…±285é¡µ,æ¯�é¡µ10æ�¡)
è¯¦æƒ…: /zwgk/gsgg1/content_{id}
è¯¦æƒ…æ ‡é¢˜: <h2 class="title">
è¯¦æƒ…æ—¥æœŸ: <span>å�‘å¸ƒæ—¶é—´ï¼šYYYY-MM-DD</span>
æ­£æ–‡å®¹å™¨: <div class="conTxt"> -> <p><span> ç»“æž„
é    N)ÚBeautifulSoupz/mnt/data/search.dbz~/data/search.dbzhttps://www.xuyong.gov.cnzwww.xuyong.gov.cnz/zwgk/gsgg1é   u   å››å·�çœ�æ³¸å·žå¸‚u   æ”¿åºœå…¬å‘Šu	   å�™æ°¸åŽ¿c                 ó  — ddddd| g}	 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)u8   ç”¨Chromium headlessèŽ·å�–é¡µé�¢ï¼ˆç»•è¿‡CloudWAF 418ï¼‰zchromium-browserz
--headlessz--no-sandboxz--disable-gpuz
--dump-domTé#   ©Úcapture_outputÚtextÚtimeoutr   u     [WARN] Chromiumè¿”å›žç � z: Néd   u     [WARN] Chromiumè¶…æ—¶: )Ú
subprocessÚrunÚ
returncodeÚprintÚstderrÚstdoutÚTimeoutExpired)ÚurlÚcmdÚresults      ú&/root/gov_crawler/crawl_xuyong_gsgg.pyÚfetch_with_chromiumr   %   s    € ð 	˜L¨.¸/Ø�cð€CðÜ—‘ °D¸tÈRÔPˆØ×Ñ Ò!ÜÐ/°×0AÑ0AÐ/BÀ"ÀVÇ]Á]ÐSWÐTWÐEXÐDYÐZÔ[ØØ�}‰}ÐøÜ×$Ñ$ò ÜÐ)¨#¨Ð/Ô0Ùðús   ŠAA' ÁA' Á'!BÂ
Bc                 óî	  — t        | «      }|syt        |d«      }d}|j                  d«      }|r|j                  d¬«      }|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¬«      }|r7t        j                  d|j                  «       «      }|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Ú zh2.titleT©ÚstripÚtitleu0   _å…¬ç¤ºå…¬å‘Š_ä¿¡æ�¯å…¬å¼€_å�™æ°¸åŽ¿æ”¿åºœç½‘ç«™ú&middot;ú&nbsp;õ   Â õ   ã€€ÚdivÚproperty©Úclass_u%   å�‘å¸ƒæ—¶é—´[ï¼š:](\d{4}-\d{2}-\d{2})é   z
div.conTxtÚnameNÚpÚtableÚbrz

iô  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   Ú
select_oneÚget_textÚfindÚreplacer   ÚreÚsearchÚgroupÚchildrenÚgetattrÚstrÚappendÚjoinÚlenÚselectÚgetÚ
startswithÚBASE_URLÚlowerÚsplitÚrsplit)Ú
detail_urlÚhtmlÚsoupr   Úh2ÚtÚdate_strÚpropÚmÚcontent_divr	   Ú
paragraphsÚchildr'   Úinner_tableÚnodeÚnnameÚt2Úp_textÚlinksÚimgr+   ÚiframeÚobjr.   Úar/   ÚextÚfnames                                r   Úfetch_detailrj   6   sž  € ä˜zÓ*€DÙØä˜˜}Ó-€Dð €EØ	�‰˜Ó	$€BÙ	Ø—‘ $�Ó'ˆÙØ�I‰I�gÓˆÙØ—J‘J T�JÓ*×2Ñ2Ð3eÐgiÓj×pÑpÓrˆEð �M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐPRÓS×[Ñ[Ð\dÐfhÓi×oÑoÓq€Eð €HØ�9‰9�U :ˆ9Ó.€DÙÜ�I‰IÐ>ÀÇÁÃÓPˆÙØ—w‘w˜q“zˆHð —/‘/ ,Ó/€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«      }|st        d|› d�«       |S |j                  dd¬«      D ]§  }|j	                  d«      }|sŒ|j                  d	d
«      j                  «       }|j                  d¬«      }|j	                  dd¬«      }	|	r|	j                  d¬«      nd
}
|sŒu|sŒx|j                  d«      r|nt        |z   }|j                  |||
f«       Œ© t        d|› dt        |«      › d�«       |S )u8   è§£æž�åˆ—è¡¨é¡µï¼Œè¿”å›ž (url, title, date) å…ƒç»„åˆ—è¡¨r   zul.newsListu     ç¬¬u   é¡µ: æœªæ‰¾åˆ°newsListÚliF)Ú	recursiverg   r/   r   Tr   ÚspanÚ	dateRightr$   r,   u   é¡µ: u   æ�¡)r   r?   r   Úfind_allrA   rM   r   r@   rN   rO   rI   rK   )rT   Úpage_numrU   ÚitemsÚulrm   Úa_tagr/   r   Ú	date_spanrX   Ú	full_hrefs               r   Úparse_list_pagerx   ™   s  € ä˜˜}Ó-€DØ€Eà	�‰˜Ó	'€BÙÜ��h�ZÐ5Ð6Ô7ØˆØ�k‰k˜$¨%ˆkÓ0ò 7ˆØ—‘˜“ˆÙØØ�y‰y˜ Ó$×*Ñ*Ó,ˆØ—‘ T�Ó*ˆà—G‘G˜F¨;�GÓ7ˆ	Ù5>�9×%Ñ%¨DÐ%Ô1ÀBˆÚ’EØ $§¡°Ô 7™¼XÈ¹_ˆIØ�L‰L˜) U¨HÐ5Õ6ð7ô 
ˆE�(�˜5¤ U£ ¨CÐ
0Ô1Ø€Lrk   c                  ó  — dd l } | j                  d¬«      }|j                  dt        t        dt        › d�¬«       |j                  dd	d
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/|d0   d d1 › d/t        |d2   «      › d%�«       Œ. y dd l}|j=                  t2        «      }|j?                  «       }d}|D ]L  }	 |jA                  d3|d0   |d2   |d.   |d4   |d5   tB        tD        tF        f«       |jH                  dkD  r|dz  }ŒN |jM                  «        |dkD  r”t        d7|› d8�«       d9tB        z   d:z   }tO        jP                  d;d<|t2        tS        |«      gd
d
d¬=«      }t        d>|j(                  j1                  «       › �«       |jT                  r't        d?|jT                  d d@ › �«       nt        dA«       |jW                  «        t        dB«       tY        dC„ |D «       «      }t        dDt        |«      › �«       t        dE|› �«       t        dF|› �«       t        dGtB        › �«       t        dH«       t        dI«       t        dJdK› �«       t        dLdM›ddNdO›ddPdQ›�«       t        dK› «       |d d, D ]E  }t        |d0   «      dRkD  r|d0   d dR n|d0   }t        |d.   dM›d|dO›dt        |d2   «      dQ›�«       ŒG t        |«      d,kD  rt        dSt        |«      › d�«       t        dK› «       y # tJ        $ r}t        d6|› �«       Y d }~�ŒXd }~ww xY w)TNr   u   å�™æ°¸åŽ¿-å…¬ç¤ºå…¬å‘Šçˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°(æ¯�é¡µ10æ�¡,é»˜è®¤ú))ÚtypeÚdefaultÚhelpz
--chromiumÚ
store_trueTu%   ä½¿ç”¨Chromium headlessç»•è¿‡CloudWAF)Úactionr}   r~   u   ðŸŒ� çˆ¬å�–åˆ—è¡¨é¡µ 1-z (Chromium headless)...r&   Ú_u     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µu   
ðŸ“‹ å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®u   ðŸ”� åŽ»é‡�å�Ž u    æ�¡u,   
ðŸ“„ çˆ¬å�–è¯¦æƒ…é¡µ (Chromium headless)...z  [r-   r=   é   z...ú )Ú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-cr   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     æ �ç›®: å…¬ç¤ºå…¬å‘Šu5     WAF: CloudWAF (418) - å·²ç”¨Chromium headlessç»•è¿‡r>   u´   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   æ—¥æœŸz<14u   æ ‡é¢˜z<40u   å­—æ•°z>6é&   u
     ... å…± )-ÚargparseÚArgumentParserÚadd_argumentÚintÚPAGESÚ
parse_argsÚpagesr   ÚrangerO   Ú	LIST_PATHr   rx   ÚextendrK   ÚsetÚaddrI   Ú	enumerateÚsysr   Úflushrj   rB   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_urlrT   rs   Ú	seen_urlsÚunique_itemsr/   Ú
list_titler…   ÚresultsÚidxÚ	list_dater   rX   r	   r�   r£   ÚconnÚcÚaddedÚeÚscriptr   Úempty_countÚtitle_shorts                                 r   ÚmainrÂ   ³   sÑ  € ÛØ×$Ñ$Ð1OÐ$ÓP€FØ
×Ñ˜	¬´UÐCbÔchÐbiÐijÐAkÐÔlØ
×Ñ˜¨\À4ÐNuÐÔvØ×ÑÓ€DØ—
‘
€Iô 
Ð# I ;Ð.EÐ
FÔGØ€IÜ�a˜ Q™Ó'ò  ˆØ�1Š9Ü¤)Ñ+‰Hä"˜¤I ;¨a°¨vÐ6ˆHä" 8Ó,ˆÙÜÐ-¨d¨V°3Ð7Ô8ØÜ  dÓ+ˆØ×Ñ˜Õð ô 
Ðœc )›nÐ-Ð-=Ð
>Ô?ô “€IØ€LØ"+ò :Ñˆˆj˜$Ø�yÒ Ø�M‰M˜$ÔØ×Ñ  z°4Ð 8Õ9ð:ô 
ˆOœC Ó-Ð.¨dÐ
3Ô4ô 
Ð
9Ô:Ø€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Ð
"Ô#Ü	Ð"Ô$Ü	ÐAÔCä	ˆ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   Ì0A	U'Õ'	V	Õ0VÖV	Ú__main__)Ú__doc__r�   r    rC   r   ÚjsonÚbs4r   Útempfiler¡   r¢   Ú
expanduserrŸ   rO   ÚDOMAINr˜   r”   r¨   r©   r§   r   rj   rx   rÂ   Ú__name__r‹   rk   r   ú<module>rË      sœ   ðñó Û 	Û 	Û Û Ý Û ð $&§7¡7§>¡>Ð2GÔ#HÑ
ÈbÏgÉg×N`ÑN`ÐasÓNt€ð '€Ø	€Ø€	Ø	€Ø!€
Ø€Ø€	òò"`!òFò4IðX ˆzÒÙ…Fð rk   