Ë
    ¸¬uj8  ã                   ó^  — 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mZmZ ddlm	Z	 ddl
mZmZ ddlZ ej                  dd«      ZdZd	Z ej$                  d
d«      ZdZdZdZ ej.                  «       Zej2                  j5                  ddi«       d„ Zd„ Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)uz   
é•‡è¿œåŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
CMS: TRSï¼ˆæ‹“å°”æ€�ï¼‰
åˆ†é¡µ: createPageHTML(92, 0, "index", "html", 1367)
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu   é•‡è¿œåŽ¿-é€šçŸ¥å…¬å‘Šz"https://www.zygov.gov.cn/xwzx/tzggz
2023-06-18ú%Y-%m-%dé   g      à?é\   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                  ó4   — dd l } | j                  t        «      S )Nr   )Úsqlite3ÚconnectÚDB_PATH)r   s    ú /root/gov_crawler/crawl_zygov.pyÚget_connr      s   € ÛØ�?‰?œ7Ó#Ð#ó    c                 óL   — | j                  d|f«      }|j                  «       d uS )Nz)SELECT id FROM gov_raw WHERE page_url = ?)ÚexecuteÚfetchone)ÚconnÚurlÚcurs      r   Úexistsr       s&   € Ø
�,‰,ÐBÀSÀFÓ
K€CØ�<‰<‹> Ð%Ð%r   c                 ó�  — t        j                  «       j                  d«      }d}	 t        j                  |d d d«      }t	        |j                  d«      «      }	 | j                  dt        ||d|d d |ddd	|f
«      }|j                  dkD  S #  Y Œ7xY w# t        $ r(}	t        d
|	› �t        j                  ¬«       Y d }	~	yd }	~	ww xY w)Nz%Y-%m-%d %H:%M:%Sr   é
   r	   z%Y%m%dzÚINSERT OR IGNORE INTO gov_raw 
            (site_name, title, page_url, source_url, publish_date, date_rank, 
             summary, status, category, content, visits, tags)
            VALUES (?,?,?,?,?,?,?,?,?,?,0,'')Ú Ú	publishedu   é€šçŸ¥å…¬å‘Šz  [DB] ©ÚfileF)r   ÚnowÚstrftimeÚstrptimeÚintr   Ú	SITE_NAMEÚrowcountÚ	ExceptionÚprintÚsysÚstderr)
r   ÚtitleÚcontentÚpub_dateÚpage_urlr    Ú	date_rankÚdr   Úes
             r   Úinsertr1   $   sÌ   € Ü
�,‰,‹.×
!Ñ
!Ð"5Ó
6€CØ€IðÜ×Ñ˜h s¨˜m¨ZÓ8ˆÜ˜Ÿ
™
 8Ó,Ó-ˆ	ð
Ø�l‰lð 1ô ˜˜x¨¨X°c°r¨]¸IØ�˜n¨gð7ó	8ˆð �|‰|˜aÑÐøðÙûô ò Ü�˜�sˆm¤#§*¡*Õ-Üûðús#   §3B Á1B ÂBÂ	CÂC Ã Cc                 óì  — | dk(  r
t         › d�}nt         › d| › d�}	 t        j                  |d¬«      }d|_        |j                  }g }t        |d«      }|j                  dd¬«      }|sg S |j                  d«      D ]»  }|j                  dd¬«      }	|	sŒ|	d   j                  «       }
|
sŒ/|	j                  dd«      xs |	j                  d¬«      }|j                  d«      }|r|j                  d¬«      nd}|
j                  d«      r|
n|
j                  d«      rd|
› �n|
}|j                  |||dœ«       Œ½ |S # t
        $ r-}t        d|› d	|› �t        j                  ¬
«       g cY d}~S d}~ww xY w)zEFetch list page. page_num=0 -> index.html, page_num=1 -> index_1.htmlr   z/index.htmlz/index_z.htmlé   ©Útimeoutúutf-8u     [é”™è¯¯] z: r   Núhtml.parserÚulÚNewsList©Úclass_ÚliÚaT)Úhrefr>   r*   r   )ÚstripÚspanÚhttpú/zhttps://www.zygov.gov.cn)r   r*   r,   )ÚBASE_URLÚsessionÚgetÚencodingÚtextr&   r'   r(   r)   r   ÚfindÚfind_allr?   Úget_textÚ
startswithÚappend)Úpage_numr   ÚrespÚhtmlr0   ÚitemsÚsoupr8   r<   r=   r>   r*   Ú	date_spanr,   Úfull_urls                  r   Úfetch_list_pagerT   8   s�  € à�1‚}Ü�
˜+Ð&‰ä�
˜' ( ¨5Ð1ˆðÜ�{‰{˜3¨ˆ{Ó+ˆØˆŒØ�y‰yˆð
 €EÜ˜˜}Ó-€DØ	�‰�4 
ˆÓ	+€BÙØˆ	Ø�k‰k˜$Óò NˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆÙØØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ—G‘G˜F“Oˆ	Ù5>�9×%Ñ%¨DÐ%Ô1ÀBˆØŸ?™?¨6Ô2‘4Ð]a×]lÑ]lÐmpÔ]qÐ:RÐSWÐRXÑ8YÐw{ˆØ�‰˜X°À8ÑLÕMðNð €Løô+ ò Ü�˜C˜5  1 #Ð&¬S¯Z©ZÕ8Ø�	ûðús   �*D= Ä=	E3Å"E.Å(E3Å.E3c                 óh  — | d   }	 t         j                  |d¬«      }d|_        |j                  }t	        |d«      }| d   }|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }| d   }|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }|j                  dd¬«      }	|	s|j                  dd¬«      }	|	s|j                  dd¬«      }	|	s|j                  dd¬«      }	|	rt        |	«      nd}
||||
dœS #  i | ¥ddi¥cY S xY w)zFetch detail page content.r   r3   r4   r6   r+   r   r7   r*   ÚmetaÚnameÚArticleTitle)Úattrsr,   ÚPubDateÚdivÚtrs_editor_viewr:   ÚTRS_UEDITORÚ
Article_zwÚc)Úid)r   r*   r,   r+   )rD   rE   rF   rG   r   rH   r?   Ústr)Úitemr   rN   rO   rQ   r*   Úmeta_tr,   Úmeta_dÚcontent_divr+   s              r   Úfetch_detailrf   Y   sQ  € à
ˆu‰+€Cð'Ü�{‰{˜3¨ˆ{Ó+ˆØˆŒØ�y‰yˆô ˜˜}Ó-€Dð �‰M€EØ�Y‰Y�v f¨nÐ%=ˆYÓ>€FÙ�&—*‘*˜YÔ'Ø�yÑ!×'Ñ'Ó)ˆð �JÑ€HØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙ�&—*‘*˜YÔ'Ø˜)Ñ$×*Ñ*Ó,ˆð —)‘)˜EÐ*;�)Ó<€KÙØ—i‘i ¨m�iÓ<ˆÙØ—i‘i ¨l�iÓ;ˆÙØ—i‘i ¨#�iÓ.ˆá"-Œc�+Ô°2€GØ °HÈÑQÐQøð7'Ø&�$Ð&˜	 2Ñ&Ò&ús   ‡*D% Ä%
D1c                  ó`  — t        dt        › d�«       g } t        t        «      D ]h  }t        |«      }| j	                  |«       t        d|dz   › dt        › dt        |«      › dt        | «      › d�	«       t        j                  t        «       Œj t        d	t        | «      › d
�«       g }d}| D ]=  }	 t        j                  |d   d«      }|t        k  r|dz  }Œ,	 |j                  |«       Œ? t        d|› dt        |«      › �«       |st        d«       y t        «       }g }d}	|D ](  }t        ||d   «      r|	dz  }	Œ|j                  |«       Œ* |j                  «        t        d|	› dt        |«      › �«       |st        d«       y t        dt        |«      › dt         › d�«       d}
t        «       }t#        t         ¬«      5 }|D �cg c]  }|j%                  t&        |«      ‘Œ }}t)        t+        |«      d«      D ]m  \  }}|j-                  «       }|j/                  d«      r t1        ||d   |d   |d   |d   «      r|
dz  }
|dz  dk(  sŒPt        d|› dt        |«      › d|
› d�«       Œo 	 d d d «       |j3                  «        |j                  «        t        dd › �«       t        d!t4        › �«       t        d"|
› d
�«       t        d#|› �«       t        d$|	› �«       |
dkD  r$|d%d  D ]  }t        d&|d   › d'|d   d d( › �«       Œ t        d › «       y #  Y �ŒAxY wc c}w # 1 sw Y   Œ·xY w))Nu+   [ä¿¡æ�¯] é•‡è¿œåŽ¿-é€šçŸ¥å…¬å‘Š, TRSåˆ†é¡µ u   é¡µu     ç¬¬é   rB   u   é¡µ -> u   æ�¡ (ç´¯è®¡u   æ�¡)u   [åˆ—è¡¨] å…± u    æ�¡r   r,   r	   u   [è¿‡æ»¤] è¶…3å¹´: u
   , æœ‰æ•ˆ: u   [å®Œæˆ�] æ— æ•°æ�®r   u   [åŽ»é‡�] å·²å­˜åœ¨: u
   , æ–°å¢ž: u   [å®Œæˆ�] æ— æ–°å¢žu   [è¯¦æƒ…] èŽ·å�–u   æ�¡è¯¦æƒ… (å¹¶å�‘z)...)Úmax_workersr+   r*   é   u
     è¿›åº¦: u    (å…¥åº“ú)ú
z<============================================================u   ç«™ç‚¹: u   æ–°å¢ž: u   è·³è¿‡(è¶…3å¹´): u   è·³è¿‡(é‡�å¤�): éýÿÿÿz  [z] é2   )r'   Ú	MAX_PAGESÚrangerT   ÚextendÚlenÚtimeÚsleepÚ
PAGE_DELAYr   r"   ÚCUTOFF_DATErL   r   r   ÚcloseÚMAX_WORKERSr   Úsubmitrf   Ú	enumerater   ÚresultrE   r1   Úcommitr$   )Ú	all_itemsÚpirP   ÚfilteredÚskipped_oldrb   r/   r   Ú	new_itemsÚskipped_dupÚokÚexÚfuturesÚiÚfÚrÚr_s                    r   ÚmainrŠ   }   s^  € Ü	Ð7¼	°{À#Ð
FÔGð €IÜ”IÓò ˆÜ Ó#ˆØ×Ñ˜ÔÜ��b˜‘d�V˜1œY˜K w¬s°5«z¨l¸+ÄcÈ)ÃnÐEUÐUYÐZÔ[Ü�
‰
”:Õð	ô 
ˆMœ#˜i›.Ð)¨Ð
.Ô/ð €HØ€KØò ˆð	Ü×!Ñ! $ zÑ"2°JÓ?ˆAØ”;ŠØ˜qÑ �Øð ð
 	�‰˜Õðô 
Ð˜{˜m¨:´c¸(³m°_Ð
EÔFáÜÐ"Ô#Øô ‹:€DØ€IØ€KØò #ˆÜ�$˜˜U™Ô$Ø˜1Ñ‰Kà×Ñ˜TÕ"ð	#ð
 	‡J�J„LÜ	Ð   ¨Z¼¸I»Ð7GÐ
HÔIáÜÐ"Ô#Øô 
ˆOœC 	›NÐ+Ð+<¼[¸MÈÐ
NÔOØ	
€BÜ‹:€DÜ	¬Ô	4ð F¸Ø=FÖG°T�2—9‘9œ\¨4Õ0ÐGˆÐGÜœl¨7Ó3°QÓ7ò 	F‰DˆAˆqØ—‘“
ˆAØ�u‰u�YÔ¤F¨4°°7±¸Q¸y¹\È1ÈZÉ=ÐZ[Ð\aÑZbÔ$cØ�a‘�Ø�2‰v˜‹{Ü˜
 1 # Q¤s¨9£~Ð&6°h¸r¸dÀ!ÐDÕEñ	F÷Fð 	‡K�K„MØ‡J�J„Lô 
ˆBˆvˆhˆ-ÔÜ	ˆH”Y�KÐ
 Ô!Ü	ˆH�R�D˜Ð
ÔÜ	Ð˜k˜]Ð
+Ô,Ü	Ð˜[˜MÐ
*Ô+Ø	ˆA‚vØ˜B˜C�.ò 	>ˆBÜ�C˜˜:™Ð' r¨"¨W©+°c°rÐ*:Ð);Ð<Õ=ð	>ä	ˆVˆHÕøðc	Úüò: H÷Fð Fús1   Â2'LÇL$Ç	LÇ&A&L$É L$ÌLÌL$Ì$L-Ú__main__)"Ú__doc__Úosr(   Úrers   Úhashlibr   r   Úbs4r   Úconcurrent.futuresr   r   ÚrequestsÚgetenvr   r$   rC   r"   rv   rx   ru   ro   ÚSessionrD   ÚheadersÚupdater   r   r1   rT   rf   rŠ   Ú__name__© r   r   ú<module>r™      sÅ   ðñ÷ "× !Ó !ß (Ý ß ?Û à
ˆ"�)‰)�KÐ!2Ó
3€Ø$€	Ø/€àˆh×Ñ ¨jÓ9€Ø€Ø€
Ø€	à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ ØÐPðô ò$ò&òò(òB"RòHGðR ˆzÒÙ…Fð r   