Ë
    Ë-Œ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mZ ddlZdZ	dZ
ej                  Zd„ Zee_         ej                  dd«      Zd	ZdZd
ZdZdZddiZ ej,                  «       j/                  d«      Z ej,                  «        ed¬«      z
  j/                  d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u†   
Crawl æœ�é˜³åŽ¿ - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·å®¡æ‰¹
https://www.cyx.gov.cn/cyxzf/zwgk/zwgkbzhgfhzl/gkly/sthj/xzxk/jsxm/glist.html
é    N)ÚdatetimeÚ	timedeltaz
42.4.4.248zwww.cyx.gov.cnc                 ó>   — | t         k(  rt        } t        | g|¢­i |¤ŽS )N)Ú	_CYX_HOSTÚ_CYX_IPÚ_orig_getaddrinfo)ÚhostÚargsÚkwargss      ú/root/gov_crawler/crawl_cyx.pyÚ_patched_getaddrinfor      s$   € ØŒyÒÜˆÜ˜TÐ3 DÒ3¨FÑ3Ð3ó    Ú	SEARCH_DBz/root/search.dbu"   æœ�é˜³åŽ¿-å»ºè®¾é¡¹ç›®çŽ¯è¯„å®¡æ‰¹zhttps://www.cyx.gov.cnz2/cyxzf/zwgk/zwgkbzhgfhzl/gkly/sthj/xzxk/jsxm/glisté   z
User-AgentzMMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0z%Y-%m-%d %H:%M:%SiG  )Údaysú%Y-%m-%dc                 óÈ  — | j                  d«      }|dk  ry| j                  dd|«      }|dk  ry| |d }d}d}t        t        |«      «      D ]l  }|||dz    dk(  r!|dz   t        |«      k\  s
||dz      dv r|dz  }Œ/|||d	z    d
k(  sŒ;|dz  }|dk(  sŒF|j                  dd|«      }|dkD  r	||dz   | }n|d| } n 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 )zExtract from main-info-info divzclass="main-info-info"r   Ú z<divNr   z >
	é   é   z</div>ú>é   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z
<!--.*?-->)	ÚfindÚrfindÚrangeÚlenÚreÚsubÚDOTALLÚIÚstrip)ÚhtmlÚidxÚ	div_startÚsectionÚdepthÚcontentÚiÚgt_poss           r   Úextract_contentr+       sc  € à
�)‰)Ð,Ó
-€CØ
ˆQ‚wØà—
‘
˜6 1 cÓ*€IØ�1‚}Øà�9�:Ð€GØ€EØ€GÜ”3�w“<Ó ò ˆØ�1�Q�q‘Sˆ>˜VÒ#¨¨1©´°G³Ò)<ÀÈÈ!ÉÁÐPZÑ@ZØ�Q‰J‰EØ�Q�q˜‘sˆ^˜xÓ'Ø�Q‰JˆEØ˜‹zØ Ÿ™ c¨1¨aÓ0�Ø˜A’:Ø% f¨Q¡h¨qÐ1‘Gà% a¨˜l�GÙðô �f‰fÐ1°2°wÄbÇiÁiÔPR×PTÑPTÁnÔU€GÜ�f‰fÐ/°°WÄBÇIÁIÌbÏdÉdÁNÔS€GÜ�f‰f�] B¨´r·y±yÔA€GØ�=‰=‹?Ðr   c                 óê  — 	 | j                  |d¬«      }|j                  dk7  ryd|_        |j                  }t	        |«      }d}t        j                  d|«      }|rD|j                  d«      j                  «       }t        j                  d	d|«      j                  «       }d}d
D ]u  }t        j                  ||«      }	|	sŒ|	j                  d«      j                  «       j                  d«      d   }
	 t        j                  |
d«      }|j                  d«      } n |rt        j                  dd|«      dd nd}t        j                  dd|«      j                  «       }|||fS #  Y yxY w#  |
}Y ŒXxY w)zFetch detail pageé   ©ÚtimeoutéÈ   )NNNúutf-8r   z<title>(.*?)<r   z-.*$)z*<meta name="PubDate"[^>]*content="([^"]+)"u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})ú r   r   ú<[^>]+>Nú\s+)ÚgetÚstatus_codeÚencodingÚtextr+   r   ÚsearchÚgroupr"   r   Úsplitr   ÚstrptimeÚstrftime)ÚsessionÚurlÚrr#   r(   ÚtitleÚtmÚdate_strÚpatÚdmÚrawÚdtÚsummarys                r   Úfetch_detailrI   ?   sj  € ð Ø�K‰K˜ RˆKÓ(ˆØ�=‰=˜CÒØ#ØˆŒ
Ø�v‰vˆô ˜dÓ#€Gð €EÜ	�‰Ð# TÓ	*€BÙ	Ø—‘˜“×!Ñ!Ó#ˆä—‘�w  EÓ*×0Ñ0Ó2ˆð €Hðò ˆô �Y‰Y�s˜DÓ!ˆÚØ—(‘(˜1“+×#Ñ#Ó%×+Ñ+¨CÓ0°Ñ3ˆCðÜ×&Ñ& s¨JÓ7�ØŸ;™; zÓ2�ñ ðñ 8?Œb�f‰f�Z  WÓ-¨d¨sÑ3ÀB€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€Gà�(˜GÐ#Ð#øðA Ùûð0Ø’ús   ‚"E% ¥E% Ã3'E,Å%E)Å,E2c                 óv  — g }t        j                  d| t         j                  «      D ]Ž  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      s	t        |z   }|j                  |||dœ«       Œ� |S )zExtract items from list pagezH<li><a[^>]*href="([^"]+)"[^>]*>(.*?)</a><span>(\d{4}-\d{2}-\d{2})</span>r   é   é   Úhttp)r?   rA   Údate)r   Úfinditerr    r:   r"   Ú
startswithÚBASEÚappend)r#   ÚitemsÚmr?   rA   rN   s         r   Ú
parse_listrU   i   s    € à€EÜ�[‰[ØSØŒb�i‰ióò 	Aˆð �g‰g�a‹j×ÑÓ ˆØ—‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�~‰~˜fÔ%Ü˜‘*ˆCØ�‰˜S¨5¸$Ñ?Õ@ð	Að €Lr   c                 ó�  — |d   j                  dd«      }|d   j                  dd«      }|j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      }d	}	 t        t        j                  |d
«      j                  «       «      }dt        › d|› d|› d|› d|› d|› d|› d�}	 | j                  |«       | j                  «        y#  t        t        j                  «       «      }Y Œ`xY w# t        $ r}	t        d|	› �«       Y d}	~	yd}	~	ww xY w)zInsert or replace one recordrA   ú'z''r?   r(   r   rH   rN   r   r   zŠINSERT OR REPLACE INTO gov_raw
        (site_name, page_url, title, publish_date, content, summary, date_rank, category)
        VALUES ('z', 'z',
                'z', u   , 'çŽ¯è¯„å®¡æ‰¹')Tu       â�Œ DB: NF)Úreplacer5   Úintr   r<   Ú	timestampÚtimeÚNAMEÚexecuteÚcommitÚ	ExceptionÚprint)
ÚconnÚitemrA   Úpage_urlr(   rH   rN   Ú	date_rankÚsqlÚes
             r   Úinsert_itemrg   x   sC  € à�‰M×!Ñ! # tÓ,€EØ�E‰{×"Ñ" 3¨Ó-€HØ�h‰h�y "Ó%×-Ñ-¨c°4Ó8€GØ�h‰h�y "Ó%×-Ñ-¨c°4Ó8€GØ�8‰8�F˜BÓ×'Ñ'¨¨TÓ2€Dà€Ið%Üœ×)Ñ)¨$°
Ó;×EÑEÓGÓHˆ	ðä��t˜H˜: T¨%¨°°T°Fð ;Ø�˜$˜w˜i s¨9¨+Ð5FðJ€CðØ�‰�SÔØ�‰ŒØøð%ÜœŸ	™	›Ó$Š	ûô ò Ü�˜Q˜CÐ Ô!Üûðús$   Â-D  Ã!D$ Ä D!Ä$	EÄ-E Å Ec                  ó”  — t        dd› �«       t        dt        › �«       t        dt        › �«       t        dt        › �«       t        d› d�«       t	        j
                  «       } | j                  j                  t        «       t        j                  t        «      }|j                  d«       d}t        j                  «       }t        dt        «      D �]d  }|dk(  rt        › t         › d�}nt        › t         › |d	z   › d�}t        d
|d	z   › dt        › d�«       	 | j#                  |d¬«      }|j$                  dk7  rt        d|j$                  › �«       Œ‚d|_        t)        |j*                  «      }|st        d«       Œ¬t        dt/        |«      › d�«       t1        |«      D �]ˆ  \  }	}
|
d   t        k  rŒ|j                  d|
d   f«      j3                  «       }|r(t        d|	d	z   › dt/        |«      › d|
d   d d › d�«       Œbt        d|	d	z   › dt/        |«      › d|
d   d d › d�dd ¬!«       t5        | |
d   «      \  }}}|r£||
d"<   |rt7        j8                  d#d$|«      d d n|
d   |
d%<   t7        j8                  d&d|
d%   «      j;                  «       |
d%<   |xs |
d   |
d<   |xs |
d   |
d<   t=        ||
«      r|d	z  }t        d't/        |«      d(›d)�«       n<t        d*«       n0d$|
d"<   |
d   |
d%<   t=        ||
«      rt        d+«       nt        d*«       t        j>                  d,«       �Œ‹ t        «        �Œg t        j                  «       |z
  }t        d› «       t        d-|› d�«       t        d.|d/›d0|d1z  d2›d3�«       t        d› «       |jA                  «        |S # t,        $ r}t        d|› �«       Y d }~�Œìd }~ww xY w)4Nú
z<============================================================u   ðŸš€ u      é¡µé�¢: 1~u      æ—¥æœŸæˆªæ­¢: zPRAGMA journal_mode=WALr   z.htmlr   u   ðŸ“„ ç¬¬ú/u   é¡µé   r.   r0   u     â�Œ HTTP r1   u     â�Œ é”™è¯¯: u     âš ï¸� æ— æ•°æ�®u     ðŸ“‹ u    æ�¡rN   zPSELECT 1 FROM gov_raw WHERE page_url=? AND content IS NOT NULL AND content != ''r?   z  [u	   ] â�­ï¸� rA   é#   z...z] r2   T)ÚendÚflushr(   r3   r   rH   r4   u   âœ… ú,u   å­—u   â�Œ DBå¤±è´¥u   âš ï¸� æ— æ­£æ–‡g      à?u   ðŸ“Š å®Œæˆ�ï¼�æ–°å¢ž u   â�± è€—æ—¶: z.0fzs (é<   z.1fzmin))!r`   r\   ÚPAGESÚCUTOFF_DATEÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚsqlite3Úconnectr   r]   r[   r   rQ   ÚLIST_URLr5   r6   r7   rU   r8   r_   r   Ú	enumerateÚfetchonerI   r   r   r"   rg   ÚsleepÚclose)r>   ra   Ú	total_newÚ
start_timeÚpageÚlist_urlr@   rS   rf   r$   rb   ÚhasrA   rN   r(   Úelapseds                   r   Úmainr…   ’   s½  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”$�ˆ.ÔÜ	ˆMœ%˜Ð
!Ô"Ü	Ðœk˜]Ð
+Ô,Ü	ˆVˆH�Bˆ-Ôä×ÑÓ €GØ‡O�O×Ñœ7Ô#Ü�?‰?œ9Ó%€DØ‡L�LÐ*Ô+à€IÜ—‘“€Jä�aœ“ó ?ˆØ�1Š9Ü˜¤˜z¨Ð/‰Hä˜¤˜z¨$¨q©&¨°Ð7ˆHä�˜˜a™˜ ¤% ¨Ð,Ô-ð		Ø—‘˜H¨b�Ó1ˆAØ�}‰} Ò#Ü˜ A§M¡M ?Ð3Ô4ØØ ˆAŒJÜ˜qŸv™vÓ&ˆEñ
 ÜÐ&Ô(Øä�œ˜E›
�| 4Ð(Ô)ä" 5Ó)ó $	‰IˆC�Ø�F‰|œkÒ)Øà—,‘,ØbØ�e‘�ó÷ ‰h‹jð ñ
 Ü˜˜C ™E˜7 !¤C¨£J <¨y¸¸g¹ÀsÈÐ9KÐ8LÈCÐPÔQØä�C˜˜A™�w˜a¤ E£
˜|¨2¨d°7©m¸C¸RÐ.@Ð-AÀÐEÈ3ÐVZÕ[ä#/°¸¸e¹Ó#EÑ ˆE�4˜áØ")��Y‘ÙKR¤"§&¡&¨°R¸Ó"AÀ$À3Ñ"GÐX\Ð]dÑXe��Y‘Ü"$§&¡&¨°°d¸9±oÓ"F×"LÑ"LÓ"N��Y‘Ø %Ò 6¨¨g©��W‘Ø#Ò3 t¨F¡|��V‘Ü˜t TÔ*Ø ‘N�IÜ˜D¤ W£¨aÐ 0°Ð4Õ5ä˜LÕ*à"$��Y‘Ø"& w¡-��Y‘Ü˜t TÔ*ÜÐ,Õ.ä˜LÔ*ä�J‰J�sŽOðI$	ôL 	Žð?ôB �i‰i‹k˜JÑ&€GÜ	ˆVˆHÔÜ	Ð! ) ¨DÐ
1Ô2Ü	ˆL˜ ˜ S¨°©°CÐ(8¸Ð
=Ô>Ü	ˆVˆHÔØ‡J�J„LØÐøôq ò 	Ü�N 1 #Ð&Ô'Ýûð	ús   Ä:N%ÅN%Î%	OÎ.OÏOÚ__main__) Ú__doc__rs   r   rx   Úosr[   Úsocketr   r   r   r   Úgetaddrinfor   r   Úgetenvr   r\   ÚDOMAINrQ   rz   rq   rw   Únowr=   ÚNOWrr   r+   rI   rU   rg   r…   Ú__name__© r   r   ú<module>r‘      sä   ðñ÷ /× .× .ß (Û 	ð €Ø€	Ø×&Ñ&Ð ò4ð *€Ô àˆB�I‰I�kÐ#4Ó5€	Ø+€Ø	€Ø€Ø?€à	€ØÐhÐ
i€Ø€h‡l�lƒn×ÑÐ1Ó2€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€òò>($òTòò4Vðp ˆzÒÙ…Fð r   