Ë
    H«£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mZ ddl	Z
 ej                  d«       ej                  j                  ej                  j                  e«      «      Zej                  j#                  de«       ej                  j#                  dej                  j%                  edd«      «       dZdZd	Z ej,                  d
d«      Zg d¢Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z dd„Z!e"dk(  rOdZ#ejH                  dd Z% e&e%«      D ])  \  Z'Z(e(dk(  sŒe'dz    e)e%«      k  sŒ	  e*e%e'dz      «      Z#Œ+  e!e#¬«       yy#  Y Œ;xY w)ur   
å�Œæ±ŸåŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥é€šå‘Š çˆ¬è™«
ç«™ç‚¹: www.shuangjiang.gov.cn
TLS å…¼å®¹: --ciphers AES128-GCM-SHA256
é    N©ÚBeautifulSoupÚignorez..Úcrawleru   å�Œæ±ŸåŽ¿-é€šçŸ¥é€šå‘Šzwww.shuangjiang.gov.cnzhttps://www.shuangjiang.gov.cnÚ	SEARCH_DBz/root/search.db)Úcurlz-sz-Lz
--max-timeÚ20z-kz	--cipherszAES128-GCM-SHA256c                 ó\   — t        j                  t        | gz   ddd¬«      }|j                  S )NTé   )Úcapture_outputÚtextÚtimeout)Ú
subprocessÚrunÚ	CURL_OPTSÚstdout)ÚurlÚresults     úcrawl_shuangjiang.pyr   r      s(   € Ü�^‰^œI¨¨Ñ-¸dÈÐWYÔZ€FØ�=‰=Ðó    c                 óÜ  — | sy t        j                  t        «      }|j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j	                  «        dx}}| D ]Ø  }	 |j                  d«      xs dd d	 }|j                  d
«      xs |d d	 }|j                  d«      xs d}|j                  d«      xs dd d }|j                  d«      xs d}	|j                  d«      xs |	}
|j                  d«      xs d}|j                  dt        |	|
||||d|f	«       |j                  dkD  r|dz  }n|dz  }ŒÚ |j	                  «        	 |j                  dt        f«       |j	                  «        |j                  «        t        d|› d|› �«       y #  |dz  }Y �Œ?xY w# t        $ r}t        d|› �«       Y d }~ŒKd }~ww xY w)NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=8000zPRAGMA synchronous=NORMALa"  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_name TEXT, source_url TEXT UNIQUE, page_url TEXT,
        title TEXT, publish_date TEXT, summary TEXT,
        content TEXT, status TEXT, category TEXT, tags TEXT,
        attachments TEXT
    )zˆCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(
        title, site_name, summary, content='gov_raw', content_rowid='id'
    )r   ÚtitleÚ iô  ÚsummaryÚcontentÚpublish_dateé
   Ú
source_urlr   ÚattachmentszÏINSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date,
                 summary, content, status, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)Úactiveé   zÛINSERT INTO gov_search(rowid, title, site_name, summary)
            SELECT r.id, r.title, r.site_name, r.summary
            FROM gov_raw r
            WHERE r.site_name=? AND r.id NOT IN (SELECT rowid FROM gov_search)z  [FTS ERROR] u     [DB] æ–°å¢ž: u
   , è·³è¿‡: )Úsqlite3Úconnectr   ÚexecuteÚcommitÚgetÚ	SITE_NAMEÚtotal_changesÚ	ExceptionÚprintÚclose)ÚitemsÚdbÚokÚskipÚitemr   r   r   Úpub_dater   Úpage_urlr   Úes                r   Ú	insert_dbr4      sø  € ÙØÜ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ)Ô*Ø‡J�JÐ*Ô+Ø‡J�Jð 	ô 
ð ‡J�Jð 	ô 
ð ‡I�I„KØ€M€BˆØò ˆð	Ø—X‘X˜gÓ&Ò,¨"¨d¨sÐ3ˆEØ—x‘x 	Ó*Ò3¨e°T°cÐ:ˆGØ—h‘h˜yÓ)Ò/¨RˆGØŸ™ Ó0Ò6°B¸¸Ð<ˆHØŸ™ ,Ó/Ò5°2ˆJØ—x‘x “Ò4¨*ˆHØŸ(™( =Ó1Ò7°RˆKØ�J‰Jð 6ô ˜J¨°%¸Ø˜' 8¨[ð:ô	;ð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð%ð* ‡I�I„Kð$Ø
�
‰
ð Rô ˆLô		ð
 	�	‰	Œð ‡H�H„JÜ	ˆO˜B˜4˜z¨$¨Ð
0Õ1øð	Ø�A‰I‹Dûô ò $Ü�˜q˜cÐ"×#Ñ#ûð$ús%   ÂCF=Å4'G
 Æ=GÇ
	G+ÇG&Ç&G+c                 óP  — t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  ¬«      } | j	                  «       S )Nz<style[^>]*>.*?</style>r   ©Úflagsz<script[^>]*>.*?</script>z
<!--.*?-->)ÚreÚsubÚDOTALLÚ
IGNORECASEÚstrip)Úhtmls    r   Ú
clean_htmlr>   S   sj   € Ü�6‰6Ð,¨b°$¼b¿i¹iÌ"Ï-É-Ñ>WÔX€DÜ�6‰6Ð.°°DÄÇ	Á	ÌBÏMÉMÑ@YÔZ€DÜ�6‰6�-  T´·±Ô;€DØ�:‰:‹<Ðr   c                 ó¸  — | sy| }t        j                  d|t         j                  t         j                  z  «      }g }t	        |«      D ]1  \  }}d|› d�}|j                  ||f«       |j                  ||d«      }Œ3 t        j                  dd|t         j                  ¬«      }t        j                  d	d
|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd
|«      }t        j                  dd|«      }t        j                  dd|«      }|D ](  \  }}t        |«      }|j                  |d|z   dz   «      }Œ* |j                  «       S )Nr   z<table[^>]*>.*?</table>Ú__TABLE_Ú__r!   z	<br\s*/?>ú
r6   z</p>z

z</div>z</tr>z</th>z</td>z5<(?!/?(?:table|tr|td|th|thead|tbody|tfoot|img))[^>]*>z&nbsp;ú z&lt;ú<z&gt;ú>z&amp;ú&z\n{3,}z[ \t]+z-(?<=[\u4e00-\u9fff])[ \t]+(?=[\u4e00-\u9fff]))
r8   Úfindallr:   r;   Ú	enumerateÚappendÚreplacer9   Úhtml_table_to_htmlr<   )r=   r   ÚtablesÚplaceholdersÚiÚtblÚphÚmds           r   Úextract_textrR   Z   så  € ÙØØ€Dä�Z‰ZÐ2°D¼"¿)¹)ÄbÇmÁmÑ:SÓT€FØ€LÜ˜FÓ#ò (‰ˆˆ3Ø˜�s˜"ÐˆØ×Ñ˜R ˜IÔ&Ø�|‰|˜C  QÓ'‰ð(ô �6‰6�,  d´"·-±-Ô@€DÜ�6‰6�'˜6 4¬r¯}©}Ô=€DÜ�6‰6�)˜T 4¬r¯}©}Ô=€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6ÐJÈBÐPTÓU€DÜ�6‰6�)˜S $Ó'€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�(˜C Ó&€DÜ�6‰6�)˜V TÓ*€DÜ�6‰6�)˜S $Ó'€DÜ�6‰6ÐBÀBÈÓM€DØò 2‰ˆˆCÜ Ó$ˆØ�|‰|˜B  r¡	¨DÑ 0Ó1‰ð2ð �:‰:‹<Ðr   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   zhtml.parserÚaÚhrefr   )ÚhttpÚ
javascriptú#ÚimgÚsrc)rV   z//zdata:)	Úbs4r   ÚstrÚfind_allr&   Ú
startswithÚurllibÚparseÚurljoin)ÚtableÚbase_urlr   rO   rT   rU   rY   rZ   s           r   rK   rK   y   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                 óZ  — t        | «      }g }t        j                  d|t        j                  «      }|sg S |j	                  d«      }t        j
                  d|t        j                  «      D ]»  }|j	                  d«      }t        j                  d|«      }t        j                  d|«      }|r|sŒE|j	                  d«      j                  «       }	|j	                  d«      }
t        j                  d|«      }|r|j	                  d«      nd}|j                  |	t        |
z   |dœ«       Œ½ |S )	u   èŽ·å�–åˆ—è¡¨é¡µz)<dl[^>]*class="textList1"[^>]*>(.*?)</dl>r!   z<dd[^>]*>(.*?)</dd>ztitle="([^"]*)"zhref="(/artview/\d+/\d+\.html)"ú%<span[^>]*>(\d{4}-\d{2}-\d{2})</span>r   )r   r   Údate)	r   r8   Úsearchr:   ÚgroupÚfinditerr<   rI   ÚBASE_URL)r2   r=   r,   Údl_mÚareaÚmÚddÚtitle_mÚhref_mr   rU   Údate_mÚdate_strs                r   Úfetch_list_pagers   ˆ   s  € ä�‹>€DØ€Eä�9‰9ÐAÀ4ÌÏÉÓS€DÙØˆ	à�:‰:�a‹=€DÜ�[‰[Ð/°´r·y±yÓAò ˆØ�W‰W�Q‹Zˆô —)‘)Ð.°Ó3ˆÜ—‘Ð=¸rÓBˆÙ™fØØ—‘˜aÓ ×&Ñ&Ó(ˆØ�|‰|˜A‹ˆô —‘ÐCÀRÓHˆÙ&,�6—<‘< ”?°"ˆà�‰ØÜ˜d‘?Øñ
õ 	ðð( €Lr   c                 óÔ  — t        j                  d| t         j                  «      }|rŽ|j                  d«      }t        j                  d|«      }|r3|j                  d«      }|j	                  d«      s	t
        |z   }d|› d�}|S t        t        |«      «      }t        |«      dkD  r|j                  «       S t        j                  d| t         j                  «      }|rŒ|j                  d«      }t        j                  d|«      }|r1|j                  d«      }|j	                  d«      s	t
        |z   }d|› d�S t        t        |«      «      }t        |«      dkD  r|j                  «       S y	)
u   è¯¦æƒ…é¡µæ­£æ–‡æ��å�–zA<div[^>]*class="articleBox"[^>]*>(.*?)<div[^>]*class="text"[^>]*>r!   z<iframe[^>]*src="([^"]*\.pdf)"rV   u   [é™„ä»¶ï¼šPDFæ–‡ä»¶](ú)é   z,<div[^>]*class="articleBox"[^>]*>(.*?)</div>r   )
r8   rg   r:   rh   r^   rj   rR   r>   Úlenr<   )r=   rm   ÚinnerÚpdf_mÚpdf_urlr   s         r   Úextract_content_from_detailr{   ©   s7  € ä
�	‰	ÐVÐX\Ô^`×^gÑ^gÓh€AÙØ—‘˜“
ˆä—	‘	Ð;¸UÓCˆÙØ—k‘k !“nˆGØ×%Ñ% fÔ-Ü" WÑ,�Ø*¨7¨)°1Ð5ˆDØˆKÜœJ uÓ-Ó.ˆÜˆt‹9�qŠ=Ø—:‘:“<Ðä
�	‰	ÐAÀ4ÌÏÉÓS€AÙØ—‘˜“
ˆÜ—	‘	Ð;¸UÓCˆÙØ—k‘k !“nˆGØ×%Ñ% fÔ-Ü" WÑ,�Ø*¨7¨)°1Ð5Ð5ÜœJ uÓ-Ó.ˆÜˆt‹9�qŠ=Ø—:‘:“<ÐØr   c                 ó"  — t        | «      }|syd}t        j                  d|«      }|r|j                  d«      j	                  «       }|s`t        j                  d|«      }|rH|j                  d«      j	                  «       }t        j
                  dd|«      j	                  «       }|r|}d}t        j                  d|«      }|r|j                  d«      }|s)t        j                  d|«      }|r|j                  d«      }t        |«      }|||d	œS )
u   èŽ·å�–è¯¦æƒ…Nz.<div[^>]*class="articleTitle"[^>]*>(.*?)</div>r!   z<title>([^<]+)</title>u#   [-â€“â€”|]\s*å�Œæ±ŸåŽ¿äººæ°‘æ”¿åºœ$r   re   u   (\d{4}-\d{2}-\d{2})\s+æ�¥æº�)r   r   rf   )r   r8   rg   rh   r<   r9   r{   )r   r=   r   ÚttÚtrr   Údpr   s           r   Úfetch_detailr€   É   sö   € ä�‹9€DÙØð €EÜ	�‰ÐDÀdÓ	K€BÙ	Ø—‘˜“×!Ñ!Ó#ˆÙÜ�Y‰YÐ0°$Ó7ˆÙØ—‘˜“×!Ñ!Ó#ˆAÜ—‘Ð=¸rÀ1ÓE×KÑKÓMˆAÙØ�ð €HÜ	�‰Ð;¸TÓ	B€BÙ	Ø—8‘8˜A“;ˆÙÜ�Y‰YÐ6¸Ó=ˆÙØ—x‘x “{ˆHä)¨$Ó/€GØ w¸ÑAÐAr   c                 ó  — t        dd› �«       t        dt        › �«       t        d› «       t        d«       t        t        › d�«      }t        dt	        |«      › d�«       t        t        › d�«      }d}t        j                  d	|«      }|rt        |j                  d
«      «      }t        j                  d|«      }|rd}| r| |k  r| }t        d|› �«       t        |«      }t        d|d
z   «      D ]’  }t        › d|› d�}t        |«      }	|	st        d|› d|› d�«       Œ/|D �
ch c]  }
|
d   ’Œ	 }}
|	D �
cg c]  }
|
d   |vsŒ|
‘Œ }}
|j                  |«       t        d|› d|› dt	        |	«      › dt	        |«      › d�	«       Œ” t        dt	        |«      › d�«       dx}}g }t        |d
«      D ]ñ  \  }
}t        d|
› dt	        |«      › d|d   d d › d�«       t        |d   «      }|st        d«       |d
z  }ŒK|j                  dd «      }|rt	        |«      d!k  rt        d"«       |d
z  }Œ~|j                  d«      xs |d   }|j                  d#«      xs |d#   }|j!                  ||d   |d   |d d$ |d d% |d d&œ«       |d
z  }t        d't	        |«      › d(|› �«       Œó t        dd› �«       t        d)|› d*|› �«       |rt#        |«       t        d› «       t        d+t	        |«      › d,|› d-|› �«       y c c}
w c c}
w ).NrB   z<============================================================u   ðŸš€ u   
ðŸ“¥ èŽ·å�–åˆ—è¡¨...z
/tztg.htmlu     ç¬¬1é¡µ: u    æ�¡é   zmax\s*=\s*"(\d+)"r!   u   /24é¡µu     æ€»é¡µæ•°: é   z/tztg/index_z.htmlu     ç¬¬ ú/u	    é¡µ: ç©ºr   u    é¡µ: u    æ�¡ (æ–°å¢ž ru   u   
  å…±èŽ·å�–: r   z
[z] r   é<   z...u      â�Œ è¯·æ±‚å¤±è´¥r   r   é   u      â�Œ æ­£æ–‡ä¸ºç©ºrf   r   éÈ   )r   r   r   r   r   r   r   u      âœ… æ­£æ–‡: u    å­—, æ—¥æœŸ: u    ðŸ“¦ å†™å…¥æ•°æ�®åº“... æˆ�åŠŸ: u
   , å¤±è´¥: u   âœ… å®Œæˆ�! å…±å¤„ç�† u    æ�¡, æˆ�åŠŸ u	   , å¤±è´¥ )r*   r'   rs   rj   rw   r   r8   rg   Úintrh   ÚlistÚrangeÚextendrH   r€   r&   rI   r4   )Ú	max_pagesÚitems1Úhtml1Útotal_pagesÚmmÚmm2Ú	all_itemsÚpnr   r,   rN   Ú	seen_urlsÚ	new_itemsÚsuccessÚfailÚdb_itemsr0   ÚdetailÚcontent_textÚdb_titler1   s                        r   r   r   ê   s^  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔô 
Ð
"Ô#Ü¤˜z¨Ð4Ó5€FÜ	ˆKœ˜F›�} DÐ
)Ô*ô ”H�:˜ZÐ(Ó)€EØ€KÜ	�‰Ð'¨Ó	/€BÙ	Ü˜"Ÿ(™( 1›+Ó&ˆÜ
�)‰)�I˜uÓ
%€CÙ
ØˆÙ�Y Ò,ØˆÜ	ˆM˜+˜Ð
'Ô(ä�V“€IÜ�A�{ Q‘Ó'ò 	[ˆÜ�
˜, r d¨%Ð0ˆÜ Ó$ˆÙÜ�F˜2˜$˜a ˜}¨IÐ6Ô7ØØ'0Ö1 !�Q�u“XÐ1ˆ	Ð1Ø %ÖC˜1¨¨5©¸Ò)B’QÐCˆ	ÐCØ×Ñ˜Ô#Ü��r�d˜!˜K˜=¨¬s°5«z¨l¸-ÌÈIËÐGWÐWXÐYÕZð	[ô 
ˆOœC 	›NÐ+¨4Ð
0Ô1ð Ð€GˆdØ€Hä˜Y¨Ó*ò M‰ˆˆ4Ü��A�3�aœ˜I›Ð' r¨$¨w©-¸¸Ð*<Ð)=¸SÐAÔBÜ˜d 5™kÓ*ˆÙÜÐ'Ô)Ø�A‰IˆDØà—z‘z )¨RÓ0ˆÙœs <Ó0°1Ò4ÜÐ'Ô)Ø�A‰IˆDØà—:‘:˜gÓ&Ò7¨$¨w©-ˆØ—:‘:˜fÓ%Ò5¨¨f©ˆà�‰ØØ˜u™+Ø˜‘;Ø$ S b˜MØ  �~Ø#Øñ
ô 	ð 	�1‰ˆÜ�¤ LÓ 1Ð2°.ÀÀ
ÐKÕLð7Mô: 
ˆBˆvˆhˆ-ÔÜ	Ð,¨W¨I°ZÀ¸vÐ
FÔGÙÜ�(ÔÜ	ˆVˆHÔÜ	Ð"¤3 y£>Ð"2°-À¸yÈ	ÐRVÐQWÐ
XÕYùò[ 2ùÚCs   Ä&K<Ä8LÅLÚ__main__r!   z--pages)rŒ   )r   )N)+Ú__doc__ÚsysÚosr8   r   r"   Úwarningsr[   r   Úurllib.parser_   ÚfilterwarningsÚpathÚdirnameÚabspathÚ__file__Ú_HEREÚinsertÚjoinr'   ÚDOMAINrj   Úgetenvr   r   r   r4   r>   rR   rK   rs   r{   r€   r   Ú__name__Úmax_pÚargvÚargsrH   rN   Úargrw   rˆ   © r   r   ú<module>r²      sW  ðñ÷
 2× 1× 1Ý Û Ø €× Ñ ˜Ô !à
�‰�‰˜Ÿ™Ÿ™¨Ó1Ó2€Ø ‡�‡���5Ô Ø ‡�‡���2—7‘7—<‘<  t¨YÓ7Ô 8à$€	Ø	!€Ø+€ØˆB�I‰I�kÐ#4Ó5€	Ú\€	òò
32òlòó>òòBò@BóBKZð\ ˆzÒØ€EØ�8‰8�A�Bˆ<€DÙ˜D“/ò ‰ˆˆ3Ø�)Ó  A¡©¨D«	Ó 1ðÙ˜D  Q¡™KÓ(‘ðñ �%Öð øðÙús   Ä2EÅE