Ë
    H«£j7&  ã                   ój  — 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ZddlZddlm	Z	m
Z
 ddlmZ ej                  j                  dd«       ddlmZ ddlZddlZdZd„ Zd	Zd
dddœZdZdZ ej2                  «       Zej6                  j9                  e«       d„ Zd„ Zdd„Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)u¹  çŽ‰å±±åŽ¿-ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šçˆ¬è™«

UCAP CMS
åˆ—è¡¨: /yssthjj/c121087/xxgklist.shtml (ç¬¬1é¡µ)
      ç¬¬Né¡µ: xxgklist_{N}.shtml (N=2~53)
è¯¦æƒ…: /yssthjj/c121087/YYYYMM/xxxx.shtml
æ ‡é¢˜: <h1><ucaptitle>...</ucaptitle></h1>
æ—¥æœŸ: <PUBLISHTIME>YYYY-MM-DD</PUBLISHTIME>
æ­£æ–‡: <UCAPCONTENT>...</UCAPCONTENT>

Usage:
  python3 crawl_yushan_sthj.py --pages 5    # å‰�5é¡µ
  python3 crawl_yushan_sthj.py --pages 1    # æ—¥è·‘å¢žé‡�
é    N)ÚBeautifulSoupÚNavigableString)Úurljoinz/root/gov_crawler)Úpush_to_searchdbz/root/search.dbc                  óÊ   — 	 t        j                  t        d¬«      } | j                  d«       | j                  d«       | S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   ©ÚtimeoutzPRAGMA busy_timeout=30000zPRAGMA journal_mode=WALz  WARN DB connect: )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚ	ExceptionÚprint)ÚconnÚes     úcrawl_yushan_sthj.pyÚget_db_connectionr   #   sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttps://www.zgys.gov.cnzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageõ&   çŽ‰å±±åŽ¿-ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šzyssthjj/c121087c                 óV   — t         j                  | d¬«      }d|_        |j                  S )Né   r	   zutf-8)ÚsessÚgetÚencodingÚtext)ÚurlÚresps     r   Ú
fetch_pager   =   s%   € Ü�8‰8�C ˆ8Ó$€DØ€D„MØ�9‰9Ðó    c                 ó~  — g }t        j                  dt         j                  «      }|j                  | «      D ]‚  }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|r|sŒet        |z   }|j                  |||dœ«       Œ„ |S )u   è§£æž�åˆ—è¡¨é¡µzi<a[^>]*href="(/yssthjj/c121087/\d+/[a-f0-9]+\.shtml)"[^>]*>([^<]+)</a>\s*<span>(\d{4}-\d{2}-\d{2})</span>é   é   é   )Útitler   Úpub_date)ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚBASE_URLÚappend)ÚhtmlÚitemsÚpatternÚmÚhrefr%   r&   r   s           r   Ú
parse_listr4   C   s®   € à€Eô �j‰jð	:ä
�	‰	ó€Gð
 ×Ñ˜dÓ#ò IˆØ�w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:×#Ñ#Ó%ˆÙ™DØÜ˜‰oˆØ�‰˜u¨S¸hÑGÕHðIð €Lr    c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   )r   úhtml.parserÚar3   Ú )ÚhttpÚ
javascriptú#ÚimgÚsrc)r9   z//zdata:)	Úbs4r   ÚstrÚfind_allr   Ú
startswithÚurllibÚparser   )ÚtableÚbase_urlr   Útblr7   r3   r<   r=   s           r   Úhtml_table_to_htmlrG   X   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Or    c                 óÚ  — | d   }	 t        |«      }t	        |d«      }d}|j                  d	«      }|r8|j                  d
«      }|r|j                  d¬«      }n|j                  d¬«      }|s;|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s| d   }| j                  dd«      }	|j                  d«      }
|
r.|
j                  d¬«      dd }t        j                  d|«      re|}	nb|j                  dddi¬«      }|rK|j                  d«      r:t        j                  d|d   j                  «       «      }|r|j                  d«      }	d}g }|j                  d«      xs |j                  d«      }|�rg }t        «       }|j                  g d¢d¬«      D �]=  }|j                  dd«      }d|j                  dd«      v rŒ+|j                  dk(  r|j                  d «      rŒL|j                  d k(  rDt!        |«      dd! }||v rŒn|j#                  |«       t%        |«      }|sŒ�|j'                  |«       ŒŸ|j                  dk(  r!t)        ||«      }|sŒ½|j'                  |«       ŒÏ|j                  d"k(  sŒß|j                  d#d«      }|j                  d$d«      }|s�Œ|j+                  d%«      r|nt-        ||«      }|j'                  d&|› d'|› d(�«       �Œ@ d)j/                  |«      }|j                  d*d¬+«      D ]�  }|j                  d,d«      }|j                  d¬«      }|sŒ*|sŒ-t        j0                  d-|t        j2                  «      sŒS|j+                  d%«      st-        ||«      }|j'                  ||d.œ«       |d/|› d0|› d1�z  }Œ‘ ||	||fS # t        $ r4}t        d|› d|› �«       | d   | j                  dd«      dg fcY d}~S d}~ww xY w)2u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r%   r&   r8   Nr6   Úh1Ú	ucaptitleT©r,   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚpublishtimeé
   z\d{4}-\d{2}-\d{2}ÚPubDatez(\d{4}-\d{2}-\d{2})r"   ÚUCAPCONTENTÚucapcontent)ÚprD   r<   )Ú	recursiveÚstylezdisplay:noneú rV   rD   éd   r<   r=   Úaltr9   ú![ú](ú)z

r7   )r3   r3   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$)rM   r   u   

é™„ä»¶ï¼š<p><a href="z">z</a></p>)r   r   r   r   r   ÚfindÚget_textr,   r'   Úmatchr+   Úsetr@   ÚreplacerM   Úfind_parentr?   ÚaddrG   r.   Ú_extract_p_textrA   r   ÚjoinÚsearchÚI)Úitemr   r/   r   Úsoupr%   rI   ÚucapÚmtr&   ÚptÚdÚmdr2   rP   ÚattachmentsÚpartsÚseen_tablesÚelemrX   Ú	table_strÚmd_tableÚtxtr=   r[   Úfull_srcr7   r3   r   s                                r   Úfetch_detailry   g   sÌ  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð €EØ	�‰�4‹€BÙ	Ø�w‰w�{Ó#ˆÙØ—M‘M¨�MÓ-‰Eà—K‘K d�KÓ+ˆEÙà�Y‰Y�v f¨nÐ%=ˆYÓ>ˆÙ�"—&‘&˜Ô#Ø�y‘M×'Ñ'Ó)ˆEÙØ�W‘ˆð �x‰x˜
 BÓ'€HØ	�‰�=Ó	!€BÙ	Ø�K‰K˜dˆKÓ# C RÐ(ˆÜ�8‰8Ð(¨!Ô,Ø‰Hð �Y‰Y�v f¨iÐ%8ˆYÓ9ˆÙ�"—&‘&˜Ô#Ü—‘Ð/°°I±×1DÑ1DÓ1FÓGˆAÙØŸ7™7 1›:�ð €GØ€KØ�9‰9�]Ó#Ò? t§y¡y°Ó'?€DÚØˆÜ“eˆà—M‘MÒ"7À4�MÓHó 	:ˆDØ—H‘H˜W bÓ)ˆEØ §¡¨s°BÓ!7Ñ7ØØ�y‰y˜CÒ D×$4Ñ$4°WÔ$=ØØ�y‰y˜GÒ#Ü ›I d s˜O�	Ø Ñ+ØØ—‘ 	Ô*Ü-¨dÓ3�ÚØ—L‘L Õ*Ø—‘˜cÒ!Ü% d¨CÓ0�ÚØ—L‘L Õ%Ø—‘˜eÓ#Ø—h‘h˜u bÓ)�Ø—h‘h˜u bÓ)�ÛØ&)§n¡n°VÔ&<™sÄ'È#ÈsÓBS�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Ö9ð/	:ð2 —+‘+˜eÓ$ˆð —‘˜s¨�Ó.ò 	NˆAØ—5‘5˜ Ó$ˆDØ—:‘: D�:Ó)ˆDÚš¤§¡Ð+PÐRVÔXZ×X\ÑX\Õ!]Ø—‘ vÔ.Ü" 3¨Ó-�DØ×"Ñ"¨D¸Ñ#>Ô?ØÐ6°t°f¸B¸t¸fÀHÐMÑM‘ð	Nð �(˜G [Ð0Ð0øôg ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡N- Î-	O*Î6)O%ÏO*Ï%O*c                 ó„  — | j                  dg«      ryd}| j                  D �]>  }t        |t        «      r%t	        |«      j                  «       }|sŒ0||dz   z  }Œ9|j                  dk(  r|dz  }ŒN|j                  dk(  rS|j                  dd«      }|j                  dd«      }|sŒ„|j                  d	«      r|nt        ||«      }|d
|› d|› d�z  }Œ°|j                  dk(  rW|j                  dd«      }|j                  d¬«      }	|sŒæ|	sŒé|j                  d	«      r|nt        ||«      }
|d|	› d|
› d�z  }�Œ|j                  dv s�Œ&||j                  dd¬«      dz   z  }�ŒA t        j                  dd|«      j                  «       }|j                  dd«      }t        j                  dd|«      j                  «       }|S )u    ä»Ž <p> æ ‡ç­¾ä¸­æ��å�–çº¯æ–‡æœ¬rD   r8   rY   Úbrú
r<   r=   r[   r9   r\   r]   z) r7   r3   TrK   ú[)ÚspanÚstrongÚbÚemÚuÚfontz[ \t]+õ   Â )r_   ÚchildrenÚ
isinstancer   r?   r,   rM   r   rA   r   r`   r'   Úsubrc   )Úp_tagrE   rw   ÚchildÚtr=   r[   rx   Úa_hrefÚa_textÚ	full_hrefs              r   rf   rf   Â   sª  € à‡z�z�7�)ÔØØ
€CØ—‘ó 9ˆÜ�eœ_Ô-Ü�E“
× Ñ Ó"ˆAÚØ�q˜3‘w‘‘Ø�Z‰Z˜4ÒØ�4‰K‰CØ�Z‰Z˜5Ò Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÚØ"%§.¡.°Ô"8™3¼gÀhÐPSÓ>T�Ø˜˜C˜5  8 *¨BÐ/Ñ/‘Ø�Z‰Z˜3ÒØ—Y‘Y˜v rÓ*ˆFØ—^‘^¨$�^Ó/ˆFÚš&Ø&,×&7Ñ&7¸Ô&?™FÄWÈXÐW]ÓE^�	Ø˜˜6˜( " Y K¨rÐ2Ñ2’Ø�Z‰ZÐEÓEØ�5—>‘> #¨T�>Ó2°SÑ8Ñ8ŠCð)9ô* �&‰&�˜C Ó
%×
+Ñ
+Ó
-€CØ
�+‰+�f˜cÓ
"€CÜ
�&‰&�˜C Ó
%×
+Ñ
+Ó
-€CØ€Jr    c                  óJ  — t        j                  d¬«      } | j                  dt        dd¬«       | j	                  «       }|j
                  dkD  r|j
                  nd}g }t        d|dz   «      D ]¡  }|dk(  rt        › d	t        › d
�}nt        › d	t        › d|› d�}t        d|› d	|› d�«       	 t        |«      }t        |«      }|st        d«        n@t        dt        |«      › d�«       |j                  |«       t        j                   d«       Œ£ t        dt        |«      › d�«       |st        d«       y g }	t#        |«      D ]Å  \  }
}t        d|
dz   › d	t        |«      › d|d   d d › d�«       t%        |«      \  }}}}|s|d   }t'        j(                  dd|«      j+                  «       }|r|d d nd}|d   |d   ||||t,        |rt/        j0                  |d¬ «      ndd!œ}|	j3                  |«       t        j                   d"«       ŒÇ t        d#t        |	«      › d$�«       |	rt5        |	t,        «       t7        «       }|rw	 |j9                  d%t,        f«      }|j;                  «       d   }|j9                  d&t,        f«      }|j;                  «       d   }t        d'|› d(|› d)�«       |j=                  «        t        d+«       y # t        $ r}t        d|› �«       Y d }~ �ŒÒd }~ww xY w# t        $ r}t        d*|› �«       Y d }~Œ^d }~ww xY w# |j=                  «        w xY w),Nr   )Údescriptionz--pagesr   u   é¡µæ•°ï¼Œ0=å…¨é‡�53é¡µ)ÚtypeÚdefaultÚhelpé5   r"   ú/z/xxgklist.shtmlz
/xxgklist_z.shtmlzPage z...z  empty, stopz  found z itemsz  WARN: g333333Ó?z
Total list: zNo items found, abortz  [z] r%   é(   z\s+rY   iô  r8   r   F)Úensure_ascii)r   Ú
source_urlr%   rP   Úsummaryr&   Ú	site_namerq   gš™™™™™É?z
Inserting z records...z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?zDB: z rows (FTS: z rows)z  WARN DB query: ÚDONE)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚpagesÚranger-   Ú	LIST_PATHr   r   r4   ÚlenÚextendr   ÚtimeÚsleepÚ	enumeratery   r'   r‡   r,   Ú	SITE_NAMEÚjsonÚdumpsr.   r   r   r   ÚfetchoneÚclose)ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpager   r/   r0   r   ÚrecordsÚirj   r%   r&   rP   rq   r˜   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                         r   Úmainr¸   â   s  € Ü×$Ñ$Ð1YÔZ€FØ
×Ñ˜	¬°QÐ=UÐÔVØ×ÑÓ€Dà"Ÿj™j¨1šn�—
’
°"€IØ€Iä�a˜ Q™Ó'ò ˆØ�1Š9Ü�J˜a¤	˜{¨/Ð:‰Cä�J˜a¤	˜{¨*°T°F¸&ÐAˆCä��d�V˜1˜Y˜K sÐ+Ô,ð
	Ü˜c“?ˆDÜ˜tÓ$ˆEÙÜ˜Ô'ÙÜ�HœS ›Z˜L¨Ð/Ô0Ø×Ñ˜UÔ#ô 	�
‰
�3�ð%ô( 
ˆNœ3˜y›>Ð*¨&Ð
1Ô2áÜÐ%Ô&Øà€GÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDÜ0<¸TÓ0BÑ-ˆˆx˜ +ÙØ˜‘MˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙ#*�'˜$˜3‘-°ˆà˜‘;Ø˜u™+ØØØØ Ü"ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ˆð 	�‰�vÔÜ�
‰
�3�ð%ô( 
ˆLœ˜W›˜ kÐ
2Ô3ÙÜ˜¤)Ô,äÓ€DÙð		Ø—\‘\Ð"RÔU^ÐT`ÓaˆFØŸ™Ó)¨!Ñ,ˆIØ—\‘\Ð"UÔXaÐWcÓdˆFØŸ™Ó)¨!Ñ,ˆIÜ�D˜˜ <°	¨{¸&ÐAÔBð �J‰JŒLä	ˆ&…Møôc ò 	Ü�H˜Q˜C�.Ô!Þûð	ûôX ò 	+ÜÐ% a SÐ)×*Ñ*ûð	+ûð �J‰J�LúsI   Â-#KÃ)KÉA&K, Ë	K)ËK$Ë$K)Ë,	LË5LÌL ÌLÌL ÌL"Ú__main__)r8   )$Ú__doc__Úrequestsr'   Úsysr©   r¥   Úosr›   r>   r   r   Úurllib.parser   ÚpathÚinsertÚcrawler_libr   r   rB   r   r   r-   ÚHEADERSr¨   r¢   ÚSessionr   ÚheadersÚupdater   r4   rG   ry   rf   r¸   Ú__name__© r    r   ú<module>rÈ      sÌ   ðñó Û 	Û 
Û Û Û 	Û ß .Ý  à ‡�‡��Ð&Ô 'Ý (Û Û à
€òð %€ð DØOØ0ñ€ð 5€	Ø€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òòó*òX1òvò@HðV ˆzÒÙ…Fð r    