Ë
    ¸¬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ZddlZddlZddl	m	Z	 ddl
mZ ddlZdZdZdZdZd	Zd
ZdZddiZ ej*                  «       Zej.                  j1                  e«       d„ Zd„ Zdd„Zd„ Zdd„Zefd„Zedk(  rP ej@                  d¬«      Z!e!jE                  de#ede› d�¬«       e!jI                  «       Z% ee%jL                  ¬«       yy)u¡   
å®•æ˜ŒåŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
CMS: é¾™è®¯Lonsun
åˆ—è¡¨: /content/column/52673537?pageIndex={n} (24æ�¡/é¡µ, å…±23é¡µ)
è¯¦æƒ…: /zwxx/tzgg/{id}.html
é    N)Údatetime)Úurljoinzhttps://www.tanchang.gov.cnz3https://www.tanchang.gov.cn/content/column/52673537u"   å®•æ˜ŒåŽ¿äººæ°‘æ”¿åºœ_é€šçŸ¥å…¬å‘Šu   åŽ¿åŒºz/mnt/data/search.dbé   é   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 óô   — t        d«      D ]T  }	 t        j                  | d¬«      }d|_        |j                  dk(  r|j
                  c S 	 t        j                  d«       ŒV y # t        $ r
}Y d }~Œ&d }~ww xY w)Né   é   )Útimeoutzutf-8éÈ   é   )	ÚrangeÚSESSIONÚgetÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚattemptÚrespÚes       ú(/root/gov_crawler/crawl_tanchang_tzgg.pyÚfetchr      sw   € Ü˜“8ò ˆð	Ü—;‘;˜s¨B�;Ó/ˆDØ#ˆDŒMØ×Ñ 3Ò&Ø—y‘yÒ ð 'ô 	�
‰
�1�ðð øô ò 	Üûð	ús   �8A$Á$	A7Á2A7c                 ó†  — g }t        j                  d| t         j                  «      }|s|S |j                  d«      }t        j                  d|t         j                  «      D ]Ü  }|j                  d«      j                  «       }t        j                  dd|j                  d«      «      j                  «       }|j                  dd«      j                  d	d«      }t        j                  d
d|«      j                  «       }|r|sŒ¢d|vrŒ§|j                  d«      r|nt        t        |«      }|j                  ||f«       ŒÞ |S )u   ä»Žåˆ—è¡¨é¡µæ��å�– (title, url)z2<ul[^>]*class="[^"]*doc_list[^"]*"[^>]*>(.*?)</ul>é   z*<a[^>]*href="([^"]+)"[^>]*>\s*(.*?)\s*</a>ú<[^>]+>Ú r   ú&nbsp;ú õ   Â ú\s+z/zwxx/tzgg/Úhttp)ÚreÚsearchÚDOTALLÚgroupÚfinditerÚstripÚsubÚreplaceÚ
startswithr   ÚBASE_URLÚappend)ÚhtmlÚitemsÚmÚul_htmlÚm2ÚhrefÚ	raw_titleÚfull_urls           r   Ú
parse_listr8   ,   s  € à€EÜ
�	‰	ÐGÈÌrÏyÉyÓY€AÙØˆØ�g‰g�a‹j€GÜ�k‰kÐGÈÔRT×R[ÑR[Ó\ò 
,ˆØ�x‰x˜‹{× Ñ Ó"ˆÜ—F‘F˜: r¨2¯8©8°A«;Ó7×=Ñ=Ó?ˆ	Ø×%Ñ% h°Ó4×<Ñ<¸XÀsÓKˆ	Ü—F‘F˜6 3¨	Ó2×8Ñ8Ó:ˆ	Ù¡ØØ Ñ$ØØŸ?™?¨6Ô2‘4¼ÄÈ$Ó8OˆØ�‰�i Ð*Õ+ð
,ð €Ló    c           	      óL  — d}t        j                  d| «      }|r|j                  d«      j                  «       }|sot        j                  d| t         j                  «      }|rH|j                  d«      j                  «       }t        j
                  dd|«      j                  «       }|r|}|s_t        j                  d| t         j                  «      }|r8t        j
                  dd|j                  d«      «      j                  «       }|r|}|s|}|j                  dd	«      j                  d
d	«      j                  «       }d}t        j                  d| «      }|r"|j                  d«      j                  «       dd }|s)t        j                  d| «      }|r|j                  d«      }d}t        j                  d| «      }|r|j                  d«      j                  «       }|s7t        j                  d| «      }|r|j                  d«      j                  «       }d}t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|�r†|j                  d«      j                  «       }	t        j
                  dd|	«      j                  «       }
t        j
                  dd|
«      j                  «       }
d|	v xs
 d|	v xs d|	v }|
rt        |
«      dk  �r|�r g }t        j                  d|	t         j                  «      D ]Ã  }|j                  d«      j                  «       }t        j
                  dd|j                  d«      «      j                  «       }|s1t        j                  j                  |j                  d«      d   «      }|j                  d«      r|nt        t        |«      }|j!                  d|› d|› d �«       ŒÅ d!j#                  |«      }�nùg }t        j                  d"|	t         j                  «      D �]@  }|j                  d«      j                  «       }t        j
                  dd|«      j                  «       }|sŒKd|v sd#|v sd|v sd|v rºt        j                  d|t         j                  «      D ]�  }|j                  d«      j                  «       }t        j
                  dd|j                  d«      «      j                  «       }|j                  d«      r|nt        t        |«      }|j!                  d|› d|› d �«       Œ’ �Œt        j
                  d$d|«      }|j!                  d%|› d&�«       �ŒC t        j                  d'|	t         j                  «      D ]$  }|j                  d«      }|j!                  |«       Œ& t        j                  d(|	«      D ]2  }|j                  d«      }d|vsŒd#|vsŒ|j!                  d)|› d�«       Œ4 t%        «       }t        j                  d|	t         j                  «      D ]­  }|j                  d«      j                  «       }||vsŒ'|j'                  |«       t        j
                  dd|j                  d«      «      j                  «       }|j                  d«      r|nt        t        |«      }d|› d|› d �}||vsŒ�|j!                  |«       Œ¯ d*j#                  d+„ |D «       «      }|||xs t(        |d,œS )-u   æ��å�–è¯¦æƒ…é¡µä¿¡æ�¯r   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"r   z<title>(.*?)</title>u   _å®•æ˜ŒåŽ¿äººæ°‘æ”¿åºœ$z<h1[^>]*>(.*?)</h1>r   r    r!   r"   z*<meta\s+name="PubDate"\s+content="([^"]*)"Né
   u,   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})z0<meta\s+name="ContentSource"\s+content="([^"]*)"u$   ä¿¡æ�¯æ�¥æº�[ï¼š:]?\s*([^<]{2,20}?)<zf<div[^>]*class="[^"]*wzcon[^"]*j-fontContent[^"]*"[^>]*>(.*?)</div>\s*<div[^>]*class="[^"]*clear[^"]*"zL<div[^>]*class="[^"]*wzcon[^"]*j-fontContent[^"]*"[^>]*>(.*?)</div>\s*<div\bzC<div[^>]*class="[^"]*wzcon[^"]*j-fontContent[^"]*"[^>]*>(.*?)</div>uU   å¦‚æžœå†…å®¹ä¸�èƒ½æ­£å¸¸æ˜¾ç¤º.*?PDFæ–‡æ¡£|é¼ æ ‡å�³é”®ç‚¹å‡»æ­¤å¤„.*?|è¯·å®‰è£…pdf.*z<objectz<embedzpdf.gifé   z.<a[^>]*href="([^"]+\.pdf[^"]*)"[^>]*>(.*?)</a>r   ú?r   r$   z	<a href="z">z</a>ú
z<p[^>]*>(.*?)</p>zpdf.pngz\sstyle="[^"]*"z<p>z</p>z(<table[^>]*>.*?</table>)z<img[^>]*src="([^"]+)"[^>]*>z
<img src="z

c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)N)r*   )Ú.0Úps     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>«   s   è ø€ Ò#B¨!¸¿¹½	¤AÑ#Bùs   ‚˜)ÚtitleÚpublish_dateÚsourceÚ	body_text)r%   r&   r(   r*   r'   r+   r,   Úlenr)   ÚosÚpathÚbasenameÚsplitr-   r   r.   r/   ÚjoinÚsetÚaddÚ	SITE_NAME)r0   Úpage_urlÚ
list_titlerC   r2   ÚtrD   rE   rF   ÚinnerÚ	text_onlyÚhas_pdf_objÚlinksÚm_pdfÚpdf_urlÚ	pdf_titler7   ÚpartsÚm_pÚp_htmlÚp_textÚm_aÚcleanedÚm_tÚtblÚm_iÚsrcÚseen_pdfÚlinks                                r   Úparse_detailrf   A   sJ  € ð €EÜ
�	‰	ÐDÀdÓK€AÙØ—‘˜“
× Ñ Ó"ˆÙÜ�I‰IÐ-¨t´R·Y±YÓ?ˆÙØ—‘˜“
× Ñ Ó"ˆAÜ—‘Ð1°2°qÓ9×?Ñ?ÓAˆAÙØ�ÙÜ�I‰IÐ,¨d´B·I±IÓ>ˆÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆAÙØ�ÙØˆØ�M‰M˜( CÓ(×0Ñ0°¸3Ó?×EÑEÓG€Eð €LÜ
�	‰	Ð?ÀÓF€AÙØ—w‘w˜q“z×'Ñ'Ó)¨#¨2Ð.ˆÙÜ�I‰IÐEÀtÓLˆÙØŸ7™7 1›:ˆLð €FÜ
�	‰	ÐEÀtÓL€AÙØ—‘˜“×!Ñ!Ó#ˆÙÜ�I‰IÐ=¸tÓDˆÙØ—W‘W˜Q“Z×%Ñ%Ó'ˆFð €IÜ
�	‰	Ð{ð  ~Bô  DF÷  DMñ  DMó  	N€AÙÜ�I‰IÐeÐgkÔmo×mvÑmvÓwˆÙÜ�I‰IÐ\Ð^bÔdf×dmÑdmÓnˆâØ—‘˜“
× Ñ Ó"ˆÜ—F‘F˜: r¨5Ó1×7Ñ7Ó9ˆ	Ü—F‘FÐsÐuwð  zCó  D÷  Jñ  Jó  Lˆ	Ø 5Ð(ÒS¨H¸Ð,=ÒSÀÈeÐASˆáœS ›^¨bÓ0²kàˆEÜŸ™Ð%VÐX]Ô_a×_hÑ_hÓiò F�ØŸ+™+ a›.×.Ñ.Ó0�ÜŸF™F :¨r°5·;±;¸q³>ÓB×HÑHÓJ�	Ù Ü "§¡× 0Ñ 0°·±¸sÓ1CÀAÑ1FÓ G�IØ&-×&8Ñ&8¸Ô&@™7ÄgÌhÐX_ÓF`�Ø—‘˜y¨¨
°"°Y°K¸tÐDÕEðFð Ÿ	™	 %Ó(ŠIàˆEÜ—{‘{Ð#7¸ÄÇ	Á	ÓJó 2�ØŸ™ 1›×+Ñ+Ó-�ÜŸ™ 
¨B°Ó7×=Ñ=Ó?�ÙØØ Ñ&¨)°vÑ*=ÀÈfÑATÐX`ÐdjÑXjÜ!Ÿ{™{Ð+\Ð^dÔfh×foÑfoÓpò N˜Ø"%§)¡)¨A£,×"4Ñ"4Ó"6˜Ü$&§F¡F¨:°r¸3¿9¹9ÀQ»<Ó$H×$NÑ$NÓ$P˜	Ø.5×.@Ñ.@ÀÔ.H¡7ÌgÔV^Ð`gÓNh˜ØŸ™ y°°
¸"¸Y¸KÀtÐ%LÕMð	Nñ
 ÜŸ&™&Ð!3°R¸Ó@�Ø—‘˜s 7 )¨4Ð0Ö1ð2ô —{‘{Ð#?ÀÌÏ	É	ÓRò "�Ø—i‘i “l�Ø—‘˜SÕ!ð"ô —{‘{Ð#BÀEÓJò 7�Ø—i‘i “l�Ø CÒ'¨I¸SÒ,@Ø—L‘L :¨c¨U°"Ð!5Õ6ð7ô
 “uˆHÜ—{‘{Ð#TÐV[Ô]_×]fÑ]fÓgò +�ØŸ)™) A›,×,Ñ,Ó.�Ø (Ò*Ø—L‘L Ô)Ü "§¡ z°2°s·y±yÀ³|Ó D× JÑ JÓ L�IØ*1×*<Ñ*<¸VÔ*D™wÌ'ÔRZÐ\cÓJd�HØ& x j°°9°+¸TÐB�DØ 5Ò(ØŸ™ TÕ*ð+ð Ÿ™Ñ#B¨uÔ#BÓBˆIð Ø$ØÒ%œIØñ	ð r9   c                 ó  — | syt        j                  dt        | «      «      }|r[t        |j	                  d«      «      t        |j	                  d«      «      t        |j	                  d«      «      }}}|d›d|d›d|d›�S y)	Nr   z(\d{4})-(\d{1,2})-(\d{1,2})r   r   r   Ú04dú-Ú02d)r%   ÚmatchÚstrÚintr(   )Údate_strr2   ÚyÚmoÚds        r   Ú	safe_daterr   µ   sq   € ÙØÜ
�‰Ð/´°X³Ó?€AÙÜ�q—w‘w˜q“z“?¤C¨¯©°«
£O´S¸¿¹À»³_ˆqˆ2ˆØ�C�˜˜"˜S˜  1 S 'Ð*Ð*Ør9   c                 óŠ   — | syt        j                  dd| «      }t        j                  dd|«      j                  «       }|d | S )Nr   r   r!   r#   )r%   r+   r*   )r   Úmax_lenÚss      r   Útruncate_summaryrv   ¿   sA   € ÙØÜ
�‰ˆz˜3 Ó%€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØˆXˆgˆ;Ðr9   c                 ól  — t        j                  t        «      }|j                  d«       |j                  d«       |j                  dt        f«      }t        d„ |j                  «       D «       «      }dx}x}}t        | t        «      }t        dt        |«      › d|› d�«       t        d	|d	z   «      D �]0  }t        › d
|› �}	t        d|› d|› d|	› �d¬«       t        |	«      }
|
st        d«       |d	z  }ŒCt        |
«      }t        dt        |«      › d�d¬«       |st        d«        �n¼|D �]ž  \  }}||v r|d	z  }Œt        |«      }|st        d|dd › d�«       |d	z  }Œ6d|dd v r d|v sd|v rt        d|dd › d�«       |d	z  }Œ]t        |||«      }|d   }t!        |d   «      }|d    }t#        |«      }	 |j                  d!t        |||d"   dd ||dd |d#d$t$        d$f«      }|j&                  dkD  rº|j                  d%|f«      j)                  «       }|rp|d   }|d"   j+                  d&d'«      }t        j+                  d&d'«      }|j+                  d&d'«      }d(|› d)|› d*|› d*|› d+�	}t-        j.                  d,t        |gdd¬-«       |j1                  |«       |j3                  «        |d	z  }n|d	z  }t7        j8                  d/«       �Œ¡ t7        j8                  d	«       �Œ3 |j;                  «        t        d0|› d1|› d2|› �«       |S # t4        $ r}t        d.|› �«       |d	z  }Y d}~Œwd}~ww xY w)3u   ä¸»çˆ¬å�–é€»è¾‘zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz.SELECT page_url FROM gov_raw WHERE site_name=?c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )r@   Úrows     r   rB   zcrawl.<locals>.<genexpr>Ï   s   è ø€ Ò=˜c�3�q•6Ñ=ùs   ‚r   u,   [å®•æ˜ŒÂ·é€šçŸ¥å…¬å‘Š] å¼€å§‹çˆ¬å�–, å·²æœ‰ u    æ�¡, ç›®æ ‡ u    é¡µr   z?pageIndex=u     ç¬¬ ú/u    é¡µ: T)Úflushu       è¯·æ±‚å¤±è´¥u       å�‘çŽ° u    æ�¡u       æ— æ�¡ç›®, å�œæ­¢ç¿»é¡µu       âœ— Nr	   u   ... è¯·æ±‚å¤±è´¥Ú404iô  u   é¡µé�¢ä¸�å‡ºæ�¥u	   æœªæ‰¾åˆ°u       âš  z... 404rF   rD   rE   z÷INSERT OR IGNORE INTO gov_raw
                    (site_name, source_url, page_url, title, publish_date,
                     summary, content, status, category, group_name, attachments)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)rC   Úactiver   z'SELECT id FROM gov_raw WHERE page_url=?ú'z''z@INSERT INTO gov_search(rowid, title, site_name, summary) VALUES(z,'z','z')Úsqlite3)Úcapture_outputr
   u       âœ— DB error: g      à?u(   
[å®•æ˜ŒÂ·é€šçŸ¥å…¬å‘Š] å®Œæˆ�ï¼�æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ )r€   ÚconnectÚDB_PATHÚexecuterO   rM   ÚfetchallÚminÚ	MAX_PAGESÚprintrG   r   ÚLIST_APIr   r8   rf   rr   rv   ÚGROUPÚrowcountÚfetchoner,   Ú
subprocessÚrunrN   Úcommitr   r   r   Úclose)Ú	max_pagesÚdbÚexisting_curÚexistingÚ	total_newÚ
total_skipÚtotal_errorÚpages_to_crawlÚpagerP   r0   r1   rQ   r   Údetail_htmlÚinfoÚbodyÚpub_daterE   ÚsummaryÚcurrz   ÚridÚ	esc_titleÚesc_siteÚesc_summaryÚsqlr   s                               r   Úcrawlr¥   Ç   s»  € ä	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+ð —:‘:ÐNÔQZÐP\Ó]€LÜÑ= \×%:Ñ%:Ó%<Ô=Ó=€Hà+,Ð,€IÐ,�
˜[Ü˜¤IÓ.€NÜ	Ð8¼¸X»¸À}ÐUcÐTdÐdhÐ
iÔjä�a˜¨!Ñ+Ó,ó CˆÜ�Z˜{¨4¨&Ð1ˆÜ��t�f˜A˜nÐ-¨V°H°:Ð>ÀdÕKä�X‹ˆÙÜÐ$Ô&Ø˜1ÑˆKØä˜4Ó ˆÜ�œC ›J˜< tÐ,°DÕ9ÙÜÐ/Ô0Úà$ó 1	‰OˆJ˜Ø�h‰Ø˜a‘�
Øä ›*ˆKÙÜ˜ ¨C¨R Ð 1Ð1AÐBÔCØ˜qÑ �Øà˜ D SÐ)Ñ)Ð/@ÀKÑ/OÐS^ÐbmÑSmÜ˜ ¨C¨R Ð 1°Ð9Ô:Ø˜qÑ �Øä ¨S°*Ó=ˆDØ˜Ñ$ˆDÜ   nÑ!5Ó6ˆHØ˜(‘^ˆFÜ& tÓ,ˆGð!Ø—j‘jð "@ô ˜s C¨¨g©°t¸Ð)<¸hØ˜D˜S�M 4¨°2´u¸bðBó�ð —<‘< !Ò#àŸ*™*Ð%NÐQTÐPVÓW×`Ñ`Ób�CÙØ! !™f˜Ø$(¨¡M×$9Ñ$9¸#¸tÓ$D˜	Ü#,×#4Ñ#4°S¸$Ó#?˜Ø&-§o¡o°c¸4Ó&@˜Ø `ÐadÐ`eÐegÐhqÐgrÐruÐv~Ðuð  @Cð  DOð  CPð  PRð  S˜Ü"Ÿ™¨	´7¸CÐ'@ÐQUÐ_aÕbØ—L‘L Ô%Ø—I‘I”KØ ‘N‘Ià !‘O�Jô
 �J‰J�sŽOðc1	ôf 	�
‰
�1ŽðGCðJ ‡H�H„JÜ	Ð5°i°[À	È*ÈÐU^Ð_jÐ^kÐ
lÔmØÐøô ò !ÜÐ*¨1¨#Ð.Ô/Ø˜qÑ •ûð!ús   Æ;C<LÌ	L3ÌL.Ì.L3Ú__main__u   å®•æ˜ŒåŽ¿Â·é€šçŸ¥å…¬å‘Šçˆ¬è™«)Údescriptionz--max-pagesu   æœ€å¤§é¡µæ•° (é»˜è®¤ ú))ÚtypeÚdefaultÚhelp)r‘   )r   )i,  )'Ú__doc__ÚsysrH   r%   r   r€   r�   ÚhashlibÚargparser   Úurllib.parser   Úrequestsr.   r‰   rO   rŠ   rƒ   ÚITEMS_PER_PAGEr‡   ÚHEADERSÚSessionr   ÚheadersÚupdater   r8   rf   rr   rv   r¥   Ú__name__ÚArgumentParserÚparserÚadd_argumentrm   Ú
parse_argsÚargsr‘   ry   r9   r   ú<module>r½      s  ðñ÷ A× @× @× @Ý Ý  Û à(€Ø@€Ø0€	Ø€Ø
€Ø€Ø€	ð ð Gð€ð
 ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ò
òó*qòhóð ó Uðp ˆzÒØ$ˆX×$Ñ$Ð1PÔQ€FØ
×Ñ˜¨C¸ÐK`ÐajÐ`kÐklÐImÐÔnØ×ÑÓ€DÙ	�D—N‘NÖ#ð	 r9   