Ë
    M�†jw/  ã            	       ó$  — 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edz   Zd	Zd
ZdZdZdddddddg d¢dg	Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)už  
ç¬¬äº”å¸ˆå�Œæ²³å¸‚ - æ‹›æ ‡å…¬å‘Š
https://www.xjshs.gov.cn/xxgk-list-zbggm.html

CMS: è‡ªå®šä¹‰ï¼ˆZDCMS-like AJAX APIï¼‰
åˆ—è¡¨: POST api-ajax_list-{page}.html  (ajax_type=["18_xxgk",288,18,"xxgk","Y-m-d",35,20,...])
åˆ†é¡µ: æ¯�é¡µ20æ�¡ï¼Œå…±81é¡µ(1616æ�¡)
è¯¦æƒ…æ ‡é¢˜: <meta name="ArticleTitle">
è¯¦æƒ…æ—¥æœŸ: <meta name="PubDate">
æ­£æ–‡å®¹å™¨: <div class="xxgk_content" id="xxgk_content"> -> <p><span> ç»“æž„
é    N)ÚBeautifulSoupz/mnt/data/search.dbz~/data/search.dbzhttps://www.xjshs.gov.cnzwww.xjshs.gov.cnz/api-ajax_listé   u   æ–°ç–†ç”Ÿäº§å»ºè®¾å…µå›¢u   æ”¿åºœå…¬å‘Šu   ç¬¬äº”å¸ˆå�Œæ²³å¸‚Ú18_xxgki   é   ÚxxgkzY-m-dé#   é   )zinputtime DESCzdisplayorder DESCzis_top DESCc                 óö  — ddddddddd	d
d	dd	dd	dd	dt         z   dz   g}t        › d| › d�}|j                  |«       t        D ]\  }t	        |t
        «      r|D ]  }|j                  dd|› �g«       Œ Œ1|€|j                  ddg«       ŒG|j                  dd|› �g«       Œ^ |j                  ddg«       	 t        j                  |ddd¬«      }|j                  dk7  rt        d|j                  › �«       yt        j                  |j                  «      }|j                  dg «      }|j                  d d«      }||fS # t        j                  t        j                   f$ r}	t        d!|	› �«       Y d}	~	yd}	~	ww xY w)"u    è°ƒç”¨AJAX APIèŽ·å�–åˆ—è¡¨æ•°æ�®Úcurlz-sSú--connect-timeoutÚ10ú-mÚ30z-XÚPOSTú-Hz>Content-Type: application/x-www-form-urlencoded; charset=UTF-8z X-Requested-With: XMLHttpRequestúHUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z6Accept: application/json, text/javascript, */*; q=0.01z	Referer: z/xxgk-list-zbggm.htmlú-z.htmlz--data-urlencodezajax_type[7][]=Nzajax_type[]=nullzajax_type[]=z-dzis_ds=1Tr   ©Úcapture_outputÚtextÚtimeoutr   u     [WARN] curlè¿”å›žç � )Nr   ÚdataÚtotalu     [WARN] APIé”™è¯¯: )ÚBASE_URLÚAPI_URLÚappendÚAJAX_TYPE_BASEÚ
isinstanceÚlistÚextendÚ
subprocessÚrunÚ
returncodeÚprintÚjsonÚloadsÚstdoutÚgetÚTimeoutExpiredÚJSONDecodeError)
ÚpageÚcmdÚurlÚitemÚsubÚresultr   Úitemsr   Úes
             ú%/root/gov_crawler/crawl_xjshs_zbgg.pyÚ	fetch_apir4   '   s¡  € ð 	�Ð*¨D°$¸ØˆfØÐNØÐ0ØÐXØÐFØˆkœHÑ$Ð'>Ñ>ð€Cô ˆI�Q�t�f˜EÐ
"€CØ‡J�Jˆs„Oô ò DˆÜ�dœDÔ!Øò J�Ø—
‘
Ð.°/À#ÀÐ0GÐHÕIñJàˆ\Ø�J‰JÐ*Ð,>Ð?Õ@à�J‰JÐ*¨l¸4¸&Ð,AÐBÕCðDð ‡J�J��iÐ Ô!ðÜ—‘ °D¸tÈRÔPˆØ×Ñ Ò!ÜÐ+¨F×,=Ñ,=Ð+>Ð?Ô@ØÜ�z‰z˜&Ÿ-™-Ó(ˆØ—‘˜ Ó$ˆØ—‘˜ !Ó$ˆØ�eˆ|ÐøÜ×%Ñ%¤t×';Ñ';Ð<ò ÜÐ$ Q CÐ(Ô)Üûðús    Â5A D= Ã6AD= Ä=#E8Å E3Å3E8c           	      óÚ   — | j                  dd«      } ddddddd	d
| g	}	 t        j                  |ddd¬«      }|j                  dk7  ry|j                  S # t        j
                  $ r Y yw xY w)u   èŽ·å�–è¯¦æƒ…é¡µHTMLzhttp://zhttps://r   z-sLr   r   r   r   r   r   Tr   r   r   N)Úreplacer!   r"   r#   r'   r)   )r-   r,   r0   s      r3   Ú
fetch_pager7   N   s~   € ð �+‰+�i Ó
,€Cà�Ð*¨D°$¸ØÐXØð€Cð
Ü—‘ °D¸tÈRÔPˆØ×Ñ Ò!ØØ�}‰}ÐøÜ×$Ñ$ò Ùðús   Ÿ(A ÁA ÁA*Á)A*c                 óF	  — 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«      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  �rÛ|�rØg }|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   èŽ·å�–è¯¦æƒ…é¡µå¹¶æ��å�–æ ‡é¢˜ã€�æ—¥æœŸã€�æ­£æ–‡)NNNzhtml.parserÚ zmeta[name=ArticleTitle]ÚcontentÚtitleT)Ústripu!    - ç¬¬äº”å¸ˆå�Œæ²³å¸‚äººæ°‘æ”¿åºœú&middot;ú&nbsp;õ   Â õ   ã€€zmeta[name=PubDate]Né
   zdiv.xxgk_contentz#xxgk_contentÚnameÚpÚtableÚbrz

iô  zimg[src]ÚsrcÚhttpú/u	   [å›¾ç‰‡] ziframe[src]u   [é™„ä»¶PDF] za[href]Úhrefú.ú?r   é   éÿÿÿÿ)
ÚpdfÚdocÚdocxÚxlsÚxlsxÚjpgÚpngÚgifÚzipÚraru	   [é™„ä»¶: ú] ú
)r7   r   Úselectr(   r<   ÚfindÚget_textr6   Ú
select_oneÚchildrenÚgetattrÚstrr   ÚjoinÚlenÚ
startswithr   ÚlowerÚsplitÚrsplit)Ú
detail_urlÚhtmlÚsoupr;   ÚmÚtÚdate_strÚcontent_divr   Ú
paragraphsÚchildrB   Úinner_tableÚnodeÚnnameÚt2Úp_textÚlinksÚimgrF   ÚiframeÚarI   ÚextÚfnames                            r3   Úfetch_detailr{   `   si  € ä�jÓ!€DÙØä˜˜}Ó-€Dð €EØ�[‰[Ð2Ó3ò ˆØ—‘�i Ó$×*Ñ*Ó,ˆÙðñ Ø�I‰I�gÓˆÙØ—J‘J T�JÓ*×2Ñ2Ð3VÐXZÓ[×aÑaÓcˆEð �M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐPRÓS×[Ñ[Ð\dÐfhÓi×oÑoÓq€Eð €HØ�[‰[Ð-Ó.ò ˆØ—5‘5˜ BÓ'×-Ñ-Ó/ˆÙðñ Ø˜C˜R�=ˆð —/‘/Ð"4Ó5ÒY¸¿¹ÈÓ9Y€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Ð*Õ+ð		,ð
 "×(Ñ(¨Ó7ò 	/ˆFØ—*‘*˜U BÓ'ˆCÙ˜3Ÿ>™>¨&Ô1Ø(+¯©°sÔ(;”h ’nÀ�Ø�L‰L˜<¨ uÐ-Õ.ð		/ð
 ×#Ñ# 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                  óÆ  — dd l } | j                  d¬«      }|j                  dt        t        dt        › d�¬«       |j                  «       }|j                  }t        d|› d	�«       g }d}t        d
|d
z   «      D ]¦  }t        |«      \  }}|€t        d|› d�«       Œ#|dkD  r|n|}|D ]X  }	|j                  |	j                  dd«      |	j                  dd«      |	j                  dd«      |	j                  dd«      dœ«       ŒZ t        d|› dt        |«      › d|› d�«       Œ¨ t        dt        |«      › d|› d�«       t        «       }
g }|D ].  }	|	d   }||
vsŒ|
j                  |«       |j                  |	«       Œ0 t        dt        |«      › d�«       t        d«       g }t        |d
«      D �]  \  }}	|	d   }|	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«      j+                  «       }|s	|r|d d( nd}|rt        d)t        |«      › d*�«       nt        d+«       |j                  |||||d,œ«       �Œ t        d-t        |«      › d.t,        › d	�«       t.        j0                  j3                  t,        «      sjt        d/t,        › �«       t        d0«       |d d1 D ],  }t        d2|d   › d3|d   d d4 › d3t        |d5   «      › d*�«       Œ. t        d6t        |«      › d7�«       y dd l}|j7                  t,        d8¬9«      }|j9                  «       }d}|D ]L  }	 |j;                  d:|d   |d5   |d   |d   |d;   t<        t>        t@        f«       |jB                  dkD  r|d
z  }ŒN |jG                  «        |dkD  r”t        d=|› d>�«       d?t<        z   d@z   }tI        jJ                  dAdB|t,        tM        |«      gdCdCd!¬D«      }t        dE|j"                  j+                  «       › �«       |jN                  r't        dF|jN                  d dG › �«       nt        dH«       |jQ                  «        t        dI«       tS        dJ„ |D «       «      }t        dKt        |«      › �«       t        dL|› �«       t        dM|› �«       t        dNt<        › �«       t        dO«       t        dPdQ› �«       t        dRdS›d"dTdU›d"dVdW›�«       t        dQ› «       |d d1 D ]E  }t        |d   «      dXkD  r|d   d dX n|d   }t        |d   dS›d"|dU›d"t        |d5   «      dW›�«       ŒG t        |«      d1kD  rt        dYt        |«      › d�«       t        dQ› «       y # tD        $ r}t        d<|› �«       Y d }~�ŒMd }~ww xY w)ZNr   u%   ç¬¬äº”å¸ˆå�Œæ²³å¸‚-æ‹›æ ‡å…¬å‘Šçˆ¬è™«)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°(æ¯�é¡µ20æ�¡,é»˜è®¤ú))ÚtypeÚdefaultÚhelpu   ðŸŒ� çˆ¬å�–APIåˆ—è¡¨é¡µ 1-z...rL   u     [ERROR] æ— æ³•èŽ·å�–ç¬¬u   é¡µr;   r9   r-   Ú	inputtimer~   )r;   r-   Údater~   u     ç¬¬u   é¡µ: u   æ�¡ (å…±u   æ�¡)u   
ðŸ“‹ å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®ï¼ˆæ€»è®¡u   æ�¡ï¼‰u   ðŸ”� åŽ»é‡�å�Ž u    æ�¡u   
ðŸ“„ çˆ¬å�–è¯¦æƒ…é¡µ...r„   z  [rH   rX   é   ú )Úendr=   r>   r?   r@   rA   u   âœ… u   å­—u   âš ï¸� æ­£æ–‡ä¸ºç©º)r;   r„   r:   r-   Ú
source_urlu   
ðŸ’¾ å…¥åº“ u    æ�¡åˆ° u     [ERROR] æ•°æ�®åº“ä¸�å­˜åœ¨: u   
ðŸ“Š ç»“æžœé¢„è§ˆ:r   z  z | é(   r:   u
   
  ...å…± u    æ�¡ (æœªå…¥åº“)é<   )r   zŒINSERT OR IGNORE INTO gov_raw (title, content, publish_date, page_url, source_url, site_name, group_name, industry) VALUES (?,?,?,?,?,?,?,?)rˆ   u     [ERROR] å…¥åº“å¤±è´¥: u   
ðŸ”� FTSå�Œæ­¥ u    æ�¡...zë
import sqlite3, sys
db = sys.argv[1]
conn = sqlite3.connect(db, timeout=60)
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:   rL   N© )Ú.0Úrs     r3   ú	<genexpr>zmain.<locals>.<genexpr>B  s   è ø€ Ò=˜A°°)³”aÑ=ùs   ‚
�u     æ€»æ�¡æ•°: u     æ–°å¢žå…¥åº“: u     ç©ºæ­£æ–‡: u
     ç«™ç‚¹: u     æ �ç›®: æ‹›æ ‡å…¬å‘ŠrY   u´   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   æ—¥æœŸz<14u   æ ‡é¢˜z<40u   å­—æ•°z>6é&   u
     ... å…± )*ÚargparseÚArgumentParserÚadd_argumentÚintÚPAGESÚ
parse_argsÚpagesr$   Úranger4   r   r(   rb   ÚsetÚaddÚ	enumerateÚsysr'   Úflushr{   r6   r<   ÚDB_PATHÚosÚpathÚexistsÚsqlite3ÚconnectÚcursorÚexecuteÚ	SITE_NAMEÚ
GROUP_NAMEÚINDUSTRYÚrowcountÚ	ExceptionÚcommitr!   r"   r`   ÚstderrÚcloseÚsum)r“   ÚparserÚargsÚ	max_pagesÚ	all_itemsÚ	total_allr+   r1   r   r.   Ú	seen_urlsÚunique_itemsr-   ÚresultsÚidxÚ
list_titleÚ	list_dater;   rl   r   r�   r¤   ÚconnÚcÚaddedr2   Úscriptr0   Úempty_countÚtitle_shorts                                 r3   ÚmainrÂ   ¿   s?  € ÛØ×$Ñ$Ð1XÐ$ÓY€FØ
×Ñ˜	¬´UÐCbÔchÐbiÐijÐAkÐÔlØ×ÑÓ€DØ—
‘
€Iô 
Ð& y k°Ð
5Ô6Ø€IØ€IÜ�a˜ Q™Ó'ò BˆÜ  “‰ˆˆuØˆ=ÜÐ-¨d¨V°3Ð7Ô8ØØ" QšY‘E¨Iˆ	àò 	ˆDØ×ÑØŸ™ '¨2Ó.Ø—x‘x  rÓ*ØŸ™ ¨bÓ1Ø#Ÿx™x¨°rÓ:ñ	õ ð	ô 	��d�V˜5¤ U£ ¨H°U°G¸4Ð@ÕAðBô  
Ðœc )›nÐ-Ð-FÀyÀkÐQWÐ
XÔYô “€IØ€LØò &ˆØ�5‰kˆØ�iÒØ�M‰M˜#ÔØ×Ñ Õ%ð	&ô
 
ˆOœC Ó-Ð.¨dÐ
3Ô4ô 
Ð
%Ô&Ø€GÜ˜|¨QÓ/ó ‰	ˆˆTØ�5‰kˆØ˜'‘]ˆ
Ø˜‘Lˆ	ä��C�5˜œ#˜lÓ+Ð,¨B¨z¸#¸2¨Ð.?¸sÐCÈÕMÜ�
‰
×ÑÔä ,¨SÓ 1Ñˆˆx˜áØˆEØ—M‘M *¨bÓ1×9Ñ9¸(ÀBÓG×OÑOÐPVÐXZÓ[×cÑcÐdlÐnpÓq×wÑwÓyˆEÙÙ)2�y  "‘~¸ˆ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¨Bˆ?Ó/€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	V>Ö>	W ×W×W Ú__main__)rL   )Ú__doc__rž   r¡   Úrer!   r%   Úbs4r   Úurllib.parseÚurllibr¢   r£   Ú
expanduserr    r   ÚDOMAINr   r—   r©   rª   r¨   r   r4   r7   r{   rÂ   Ú__name__rŽ   r|   r3   ú<module>rÌ      sÁ   ðñ
ó Û 	Û 	Û Û Ý Û ð $&§7¡7§>¡>Ð2GÔ#HÑ
ÈbÏgÉg×N`ÑN`ÐasÓNt€ð &€Ø	€Ø
Ð%Ñ
%€Ø	€Ø'€
Ø€Ø €	ð ˜S " f¨g°r¸2ÚIÈ4ðQ€ó$òNò$\!ò~Rðj ˆzÒÙ…Fð r|   