Ë
    H«£j(  ã                   ó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”  é„¯å–„åŽ¿äººæ°‘æ”¿åºœ-å…¬å‘Šé€šçŸ¥çˆ¬è™«

æ–°ç–†æ”¿åºœCMSï¼ˆç±»UCAPï¼‰
åˆ—è¡¨: /ssx/c106131/list.shtml (ç¬¬1é¡µ, 15æ�¡/é¡µ)
      ç¬¬Né¡µ: list_{N}.shtml (N=2~49)
è¯¦æƒ…: /ssx/c106131/YYYYMM/uuid.shtml
æ ‡é¢˜: <h1> æˆ– meta ArticleTitle
æ—¥æœŸ: <PUBLISHTIME> æˆ– å�‘å¸ƒæ—¶é—´ï¼š

Usage:
  python3 crawl_shanshan_tzgg.py --pages 5    # å‰�5é¡µ
  python3 crawl_shanshan_tzgg.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_shanshan_tzgg.pyÚget_db_connectionr   "   sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttp://www.xjss.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ssx/c106131c                 ó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   è§£æž�åˆ—è¡¨é¡µzY<a[^>]*href="(/ssx/[^"]+\.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   B   sª   € à€Eä�j‰jØdÜ
�	‰	ó€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   U   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	«      xs |j                  d
«      }|r|j                  d¬«      }|s;|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }|s| d   }| j                  dd«      }	|j                  d«      xs |j                  d«      }
|
r-|
j                  d¬«      dd }t        j                  d|«      r|}	|	sb|j                  dddi¬«      }|rK|j                  d«      r:t        j                  d|d   j                  «       «      }|r|j                  d«      }	|	s9|j                  «       }t        j                  d|«      }|r|j                  d«      }	d}|j                  d«      xs |j                  d«      }|r|}|s|j                  dd¬«      }|s|j                  dd ¬!«      }|s|j                  dd¬«      }d}g }|�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/|› d0�«       �Œ@ d1j1                  |«      }|j                  d2d¬3«      D ]�  }|j                  d4d«      }|j                  d¬«      }|sŒ*|sŒ-t        j                  d5|t        j2                  «      sŒS|j-                  d-«      st/        ||«      }|j)                  ||d6œ«       |d7|› d8|› d9�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):u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r%   r&   r8   Nr6   Ú	UCAPTITLEÚ	ucaptitleT©r,   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1ÚPUBLISHTIMEÚpublishtimeé
   z\d{4}-\d{2}-\d{2}ÚPubDatez(\d{4}-\d{2}-\d{2})r"   u:   (?:å�‘å¸ƒæ—¶é—´|å�‘å¸ƒæ—¥æœŸ)[ï¼š:]?\s*(\d{4}-\d{2}-\d{2})ÚUCAPCONTENTÚucapcontentÚdivÚ
contentbox)Úclass_ÚZoom)Úid)ÚprD   r<   )Ú	recursiveÚstylezdisplay:noneú r]   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+   ÚsearchÚsetr@   ÚreplacerM   Úfind_parentr?   ÚaddrG   r.   Ú_extract_p_textrA   r   ÚjoinÚI)Úitemr   r/   r   Úsoupr%   ÚuctÚmtrQ   r&   ÚptÚdÚmdr2   ÚtxtÚcontent_viewÚucaprP   ÚattachmentsÚpartsÚseen_tablesÚelemr_   Ú	table_strÚmd_tabler=   rb   Úfull_srcr7   r3   r   s                                  r   Úfetch_detailr‚   d   sn  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð €Eà
�)‰)�KÓ
 Ò
: D§I¡I¨kÓ$:€CÙ
Ø—‘ 4�Ó(ˆÙØ�Y‰Y�v f¨nÐ%=ˆYÓ>ˆÙ�"—&‘&˜Ô#Ø�y‘M×'Ñ'Ó)ˆEÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEÙØ�W‘ˆð �x‰x˜
 BÓ'€Hà	�‰�=Ó	!Ò	= T§Y¡Y¨}Ó%=€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›:�ÙØ�m‰m‹oˆÜ�I‰IÐSÐUXÓYˆÙØ—w‘w˜q“zˆHð €LØ�9‰9�]Ó#Ò? t§y¡y°Ó'?€DÙØˆÙØ—y‘y ¨|�yÓ<ˆÙØ—y‘y ¨6�yÓ2ˆÙØ—y‘y ¨y�yÓ9ˆà€GØ€KâàˆÜ“eˆà ×)Ñ)Ò*?È4Ð)ÓPó 	:ˆ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°Ð&Ó6ò 	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øôI ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡Q Ñ	RÑ)RÒRÒR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   r`   Úbrú
r<   r=   rb   r9   rc   rd   z) r7   r3   TrK   ú[)ÚspanÚstrongÚbÚemÚuÚfontz[ \t]+õ   Â )rf   ÚchildrenÚ
isinstancer   r?   r,   rM   r   rA   r   rg   r'   Úsubrk   )Úp_tagrE   rx   ÚchildÚtr=   rb   r�   Úa_hrefÚa_textÚ	full_hrefs              r   rn   rn   Ð   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=å…¨é‡�49é¡µ)ÚtypeÚdefaultÚhelpé1   r"   ú/z/list.shtmlz/list_z.shtmlzPage z...z  empty, stopz  found z itemsz  WARN: g333333Ó?z
Total list: zNo items found, abortz  [z] r%   é(   z\s+r`   iô  r8   r   F)Úensure_ascii)r   Ú
source_urlr%   rP   Úsummaryr&   Ú	site_namer{   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Ú	enumerater‚   r'   r�   r,   Ú	SITE_NAMEÚjsonÚdumpsr.   r   r   r   ÚfetchoneÚclose)ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpager   r/   r0   r   ÚrecordsÚirq   r%   r&   rP   r{   r¡   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                         r   ÚmainrÁ   ð   s  € Ü×$Ñ$Ð1IÔJ€FØ
×Ñ˜	¬°QÐ=UÐÔVØ×ÑÓ€Dà"Ÿj™j¨1šn�—
’
°"€IØ€Iä�a˜ Q™Ó'ò ˆØ�1Š9Ü�J˜a¤	˜{¨+Ð6‰Cä�J˜a¤	˜{¨&°°°fÐ=ˆ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øôe ò 	Ü�H˜Q˜C�.Ô!Þûð	ûôZ ò 	+ÜÐ% 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   r‚   rn   rÁ   Ú__name__© r    r   ú<module>rÑ      sÌ   ðñó Û 	Û 
Û Û Û 	Û ß .Ý  à ‡�‡��Ð&Ô 'Ý (Û Û à
€òð $€ð DØOØ0ñ€ð %€	Ø€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òòó&òi1òXò@IðX ˆzÒÙ…Fð r    