Ë
    ¸¬ujZ  ã                   ó
  — 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
Z
ddlmZmZ ddlmZ e	j                  j!                  dd«      ZdZdZd	Zd
ZddiZ ej.                  «        ed¬«      z
  j1                  d«      ZdZ ej6                  «       Zej:                  j<                  e_        ejA                  d«       de_!        ejD                  e_#         e$«       Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+e,dk(  r e+«        yy)u  
crawl_ynzk.py â€” é•‡é›„åŽ¿-çŽ¯å¢ƒä¿�æŠ¤ (ynzk.gov.cn)
CMS: é•‡é›„åŽ¿ä¿¡æ�¯å…¬å¼€å¹³å�°ï¼ˆè‡ªå»ºï¼‰
åˆ—è¡¨: é�™æ€�HTMLåˆ†é¡µ /zfxxgk_zkx_sthjj/hjbh.html (é¦–é¡µ) / .../index_2~5.html
      <dd class="even"><a ... href=".../artview/263/XXXXX.html" title="TITLE">TITLE</a><span>YYYY-MM-DD</span></dd>
è¯¦æƒ…: <meta ArticleTitle> / <meta PubDate> / <div class="xxgk-articleBox">æ­£æ–‡HTML</div>
é¡µæ•°: 5é¡µ, ~15æ�¡/é¡µ, å…±çº¦75æ�¡
æ³¨æ„�: SSLè¯�ä¹¦ä½¿ç”¨å›½å¯†æ›²çº¿ï¼Œéœ€Pythonè‡ªå®šä¹‰SSL context (curlçš„OpenSSL 3.xæ— æ³•å…¼å®¹)
é    N)ÚdatetimeÚ	timedelta)ÚurljoinÚ	SEARCH_DBz/root/search.dbu   é•‡é›„åŽ¿-çŽ¯å¢ƒä¿�æŠ¤u   é•‡é›„åŽ¿äººæ°‘æ”¿åºœz.https://ynzk.gov.cn/zfxxgk_zkx_sthjj/hjbh.htmlz)https://ynzk.gov.cn/zfxxgk_zkx_sthjj/hjbhz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36iG  )Údaysz%Y-%m-%dé   z#AES128-GCM-SHA256:AES256-GCM-SHA384Fc                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú/root/gov_crawler/crawl_ynzk.pyÚlogr   "   s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 ó0  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |dt
        ¬«      }|j                  «       j                  dd¬«      S # t        $ r}t        d| dd  › d	|› �«       Y d }~y d }~ww xY w)
N)Úheadersé   )ÚtimeoutÚcontextzutf-8Úreplace)Úerrorsu   è¯·æ±‚å¤±è´¥: iÄÿÿÿú: )
ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚCTXÚreadÚdecodeÚ	Exceptionr   )ÚurlÚreqÚrespÚes       r   Úfetchr'   %   s…   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2¼sÐ%ÓCˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<Ð<øÜò Üˆn˜S  ˜Y˜K r¨!¨Ð-Ô.Üûðús   §AA. Á.	BÁ7BÂBc                 ó2  — g }t        j                  d| t         j                  «      }|D ]ê  }t        j                  d|t         j                  «      }t        j                  d|«      }|sŒA|sŒD|j	                  d«      }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j                  d«      rd|z   nt        t        |«      }	|	t        v rŒÂt        j                  |	«       |j                  |	||f«       Œì |S )Nz<dd[^>]*>(.*?)</dd>zBhref="(/zfxxgk_zkx_sthjj/artview/\d+/\d+\.html)".*?title="([^"]*)"z <span>(\d{4}-\d{2}-\d{2})</span>é   é   ú/zhttps://ynzk.gov.cn)ÚreÚfindallÚDOTALLÚsearchÚgroupÚstripÚ
startswithr   Ú	LIST_BASEÚ	seen_urlsÚaddÚappend)
ÚhtmlÚitemsÚddsÚddÚmÚm2Úrel_urlÚtitleÚdate_strÚfull_urls
             r   Úextract_listrA   .   sì   € Ø€EÜ
�*‰*Ð+¨T´2·9±9Ó
=€CØò 6ˆÜ�I‰IÐ[Ð]_Ôac×ajÑajÓkˆÜ�Y‰YÐ:¸BÓ?ˆÚ’Ø—g‘g˜a“jˆGØ—G‘G˜A“J×$Ñ$Ó&ˆEØ—x‘x “{×(Ñ(Ó*ˆHØ:A×:LÑ:LÈSÔ:QÐ,¨wÒ6ÔW^Ô_hÐjqÓWrˆHØœ9Ñ$ØÜ�M‰M˜(Ô#Ø�L‰L˜( E¨8Ð4Õ5ð6ð €Lr   c                 ó€  — d}d}d}t        j                  d| «      }|r|j                  d«      j                  «       }t        j                  d| «      }|r|j                  d«      j                  «       }t        j                  d| t         j                  «      }|r|j                  d«      j                  «       }|||fS )NÚ z!ArticleTitle"\s*content="([^"]+)"r)   zPubDate"\s*content="([^"]+)"z#class="xxgk-articleBox">(.*?)</div>)r,   r/   r0   r1   r.   )r7   r>   ÚcontentÚpub_dater;   s        r   Úextract_detailrF   ?   s¢   € Ø€EØ€GØ€HÜ
�	‰	Ð6¸Ó=€AÙØ—‘˜“
× Ñ Ó"ˆÜ
�	‰	Ð1°4Ó8€AÙØ—7‘7˜1“:×#Ñ#Ó%ˆÜ
�	‰	Ð8¸$ÄÇ	Á	ÓJ€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆØ�'˜8Ð#Ð#r   c                 óŽ  — t        j                  t        «      }|j                  «       }d}d}| D ]F  \  }}}}	 |j	                  dt
        |||t        |xs df«       |j                  dkD  r|dz  }n|dz  }ŒH |j                  «        |j                  «        ||fS # t        $ r}	t        d|dd  › d|	› �«       Y d }	~	Œ�d }	~	ww xY w)Nr   z�INSERT OR IGNORE INTO gov_raw
                   (site_name, title, page_url, publish_date, source_url, content)
                   VALUES (?, ?, ?, ?, ?, ?)rC   r)   u   å…¥åº“å¤±è´¥: iÎÿÿÿr   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuter   ÚSOURCEÚrowcountr"   r   ÚcommitÚclose)
ÚarticlesÚconnrK   ÚinsertedÚskippedr#   r>   ÚdaterD   r&   s
             r   Ú
save_to_dbrV   N   sÙ   € Ü�?‰?œ7Ó#€DØ�[‰[‹]€FØ€HØ€GØ%-ò 3Ñ!ˆˆU�D˜'ð	3Ø�N‰Nð0ô ˜E 3¨¬f°g²mÀÐDô	ð �‰ Ò"Ø˜A‘‘à˜1‘�øð3ð 	‡K�K„MØ‡J�J„LØ�WÐÐøô	 ò 	3Ü�.  S T  ¨2¨a¨SÐ1×2Ñ2ûð	3ús   ¹>BÂ	CÂ&B?Â?Cc            
      óè  — t         gt        dt        dz   «      D � cg c]  } t        › d| › d�‘Œ c} z   }g }|D �]  }t	        d|› �«       t        |«      }|sŒ t        |«      }|st	        d«        nÐt	        dt        |«      › d�«       |D ]›  \  }}}|t        k  rt	        d	|› d
|d d › �«       Œ%t        j                  t        j                  dd«      «       t        |«      }	|	sŒ\t        |	«      \  }
}}|
s|}
|s|}|st	        d|
d d › �«       Œ‡|j                  ||
||f«       Œ� t        j                  d«       �Œ	 t        |«      \  }}t	        d|› d|› dt        |«      › d�«       y c c} w )Nr*   r)   z/index_z.htmlu   å�–åˆ—è¡¨: u     æ— å†…å®¹ï¼Œå�œæ­¢åˆ†é¡µu     å…±u   æ�¡u     è·³è¿‡(æ—§): ú é(   g333333Ó?gš™™™™™é?u     æ— æ­£æ–‡: u   å®Œæˆ�ï¼�æ–°å¢žu   æ�¡ï¼Œè·³è¿‡u   æ�¡ï¼ˆæ€»è®¡u   æ�¡ï¼‰)ÚBASE_URLÚrangeÚ	MAX_PAGESr3   r   r'   rA   ÚlenÚCUTOFFÚtimeÚsleepÚrandomÚuniformrF   r6   rV   )ÚiÚpagesÚtotal_articlesÚpage_urlr7   r8   r#   r>   r?   Údetail_htmlÚd_titlerD   Úd_daterS   rT   s                  r   Úmainrj   e   s“  € ÜˆJÄÀqÌ)ÐVWÉ-ÓAXÖY¸AœY˜K w¨q¨c°Ò7ÒYÑY€EØ€Nàó ˆÜˆk˜(˜Ð$Ô%Ü�X‹ˆÙØÜ˜TÓ"ˆÙÜÐ,Ô.ÙÜˆe”C˜“J�<˜sÐ#Ô$à$)ò 	CÑ ˆC�˜Øœ&Ò Ü�o h Z¨q°°s¸°°Ð=Ô>Øä�J‰J”v—~‘~ c¨3Ó/Ô0Ü ›*ˆKÙØÜ'5°kÓ'BÑ$ˆG�W˜fÙØ�ÙØ!�ÙÜ�m G¨C¨R L >Ð2Ô3Øà×!Ñ! 3¨°¸Ð"AÕBð%	Cô( 	�
‰
�3Žð?ôB # >Ó2Ñ€HˆgÜˆ/˜(˜ <°¨y¸ÄSÈÓEXÐDYÐY_Ð`ÕaùòK Zs   œE/Ú__main__)-Ú__doc__ÚsslÚurllib.requestr   r,   rH   Újsonr_   ra   ÚosÚsysr   r   Úurllib.parser   ÚenvironÚgetrJ   r   rM   rZ   r3   r   ÚnowÚstrftimer^   r\   Úcreate_default_contextr   Ú
TLSVersionÚTLSv1_2Úminimum_versionÚset_ciphersÚcheck_hostnameÚ	CERT_NONEÚverify_modeÚsetr4   r   r'   rA   rF   rV   rj   Ú__name__© r   r   ú<module>r‚      sü   ðñ÷ E× D× D× DÓ Dß (Ý  à
�*‰*�.‰.˜Ð&7Ó
8€Ø$€	Ø	 €Ø;€Ø7€	ØÐWÐ
X€Ø
ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€Ø€	ð !€c× Ñ Ó"€Ø—n‘n×,Ñ,€Ô Ø ‡�Ð5Ô 6Ø€Ô Ø—-‘-€„á‹E€	ò.òòò"$òò.&bðP ˆzÒÙ…Fð r   