Ë
    ¸¬ujû  ã                   ón  — 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	m
Z
 ddlmZmZ ddlZ ej                  dd«      ZdZd	Zd
ZdZdZdZ ej.                  dd«      ZdZ ej4                  «       Zej8                  j;                  ddi«       d„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#e$dk(  r e#«        yy)uM   
å¯Ÿå“ˆå°”å�³ç¿¼å‰�æ—— - é€šçŸ¥å…¬å‘Š çˆ¬è™«
CMS: NmghlPagination (API POST)
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu   å¯Ÿå�³å‰�æ——-é€šçŸ¥å…¬å‘Šzuhttps://www.cyqq.gov.cn/rmt/tmpl/api/site/5c921a9a07e246f189220e98ad430dec/channelid/6ad3b180cab6428da44de94d8b5c7aa6Á   5186ec152b6fdbf8f9925254821388e33f1bf26f04b05fd746e5575a4111485e17dfbdc2e13666401fa60e98f783528276699fa580e601be852d2feac106fe9e0fff607a5aed63d1003c194190192c80b4299bdcb70d22818e92317f41b240666b09a4cbad3eeb99aac8bd71796d1895a0bb14c482c642ae7d2ce1d41492fb7501ecd379aae27643ae4ed1342128b7ee8d4d00a342fbdc88038447bd54b40880c2193091eb0d5614b7b03e9e766cacfd5a5ab8639a392eb94a37b75ebd810216752dbf729663b703e62ae4d766adb9ebab1dd89d2f63d6d53584676662f91b09e4451ee8e1572b61ea3ae04b4a70201bd8945cd536a47376dce5f0db44e65bc2a1142513b9411021fd1dfbd83179d1a5zhttps://www.cyqq.gov.cn/tzggé
   é‹   z
2023-06-18ú%Y-%m-%dé   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_cyqq.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
   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   Úinsertr2   %   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                 ó:  — | t         t        dœ}	 t        j                  t        |d¬«      }|j                  «       }|j                  d«      dk(  r|j                  dg «      S 	 g S # t        $ r,}t        d| › d|› �t        j                  ¬	«       Y d
}~g S d
}~ww xY w)zFetch one page of list via API.)ÚcurrpageÚpagesizeÚparamsé   )ÚjsonÚtimeoutÚerrcoder   Údatau     [API] ç¬¬u   é¡µ: r   N)Ú	PAGE_SIZEÚPARAMSÚsessionÚpostÚAPI_URLr8   Úgetr'   r(   r)   r*   )ÚpageÚbodyÚrr;   r1   s        r   Úfetch_list_pagerE   9   s•   € à¬)¼vÑF€Dð=Ü�L‰Lœ t°RˆLÓ8ˆØ�v‰v‹xˆØ�8‰8�IÓ !Ò#Ø—8‘8˜F BÓ'Ð'ð $ð €Iøô ò =Ü�˜D˜6  q cÐ*´·±×<Ñ<Ø€Iûð=ús   �AA% Á%	BÁ.!BÂBc                 óˆ  — | j                  dd«      }t        › d|› d�}	 t        j                  |d¬«      }d|_        |j                  }t        |d	«      }| j                  d
d«      }|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}| j                  d«      }	|	r't        j                  |	dz  «      j                  d«      }|s0|j                  dddi¬«      }
|
r|
j                  d«      r|
d   dd }|j                  dd¬«      }|rt        |«      nd}|r||||dœS y#  Y yxY w)zFetch detail page.Údocnor   ú/ú.htmlr7   )r9   zutf-8Nzhtml.parserr+   ÚmetaÚnameÚArticleTitle)Úattrsr,   ÚpublishTimeéè  r   ÚPubDater
   Údiv)Úid)r   r+   r-   r,   )rA   ÚBASE_URLr>   ÚencodingÚtextr   ÚfindÚstripr   Úfromtimestampr"   Ústr)ÚitemrG   r   rD   ÚhtmlÚsoupr+   Úmeta_tr-   ÚptÚmeta_dÚcontent_divr,   s                r   Úfetch_detailra   E   sT  € à�H‰H�W˜bÓ!€EÜˆJ�a˜�w˜eÐ
$€CðÜ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆô ˜˜}Ó-€Dð �H‰H�W˜bÓ!€EØ�Y‰Y�v f¨nÐ%=ˆYÓ>€FÙ�&—*‘*˜YÔ'Ø�yÑ!×'Ñ'Ó)ˆð €HØ	�‰�-Ó	 €BÙ	Ü×)Ñ)¨"¨t©)Ó4×=Ñ=¸jÓIˆÙØ—‘˜6¨&°)Ð)<�Ó=ˆÙ�f—j‘j Ô+Ø˜iÑ(¨¨"Ð-ˆHð —)‘)˜E i�)Ó0€KÙ"-Œc�+Ô°2€GáØ U¸ÈWÑUÐUØøð7Ùús    *D= Ä=Ec                  óf  — t         t        z   dz
  t        z  } t        d| › dt         › d�«       g }t        d| dz   «      D ]]  }t	        |«      }|j                  |«       t        d|› d| › dt        |«      › dt        |«      › d�	«       t        j                  d	«       Œ_ t        d
t        |«      › d�«       |st        d«       y g }d}|D ]N  }|j                  dd«      }|r't        j                  |dz  «      }|t        k  r|dz  }Œ>|j                  |«       ŒP t        d|› dt        |«      › �«       |st        d«       y t        «       }	g }
d}|D ]C  }|j                  dd«      }t        › d|› d�}t!        |	|«      r|dz  }Œ3|
j                  |«       ŒE |	j#                  «        t        d|› dt        |
«      › �«       |
st        d«       y t        dt        |
«      › d�«       d}t        «       }	t%        t&        ¬«      5 }|
D �ci c]  }|j)                  t*        |«      |“Œ }}t-        t/        |«      d«      D ]^  \  }}|j1                  «       }|r t3        |	|d   |d   |d   |d   «      r|dz  }|dz  dk(  sŒAt        d |› dt        |
«      › d!|› d"�«       Œ` 	 d d d «       |	j5                  «        |	j#                  «        t        d#d$› �«       t        d%t6        › �«       t        d&|› d�«       t        d'|› �«       t        d(|› �«       t        d$› «       y c c}w # 1 sw Y   Œ†xY w))Né   u.   [ä¿¡æ�¯] å¯Ÿå�³å‰�æ——-é€šçŸ¥å…¬å‘Š, APIåˆ†é¡µ u   é¡µ (u   æ�¡)u     ç¬¬rH   u   é¡µ -> u   æ�¡ (ç´¯è®¡g333333Ó?u   [åˆ—è¡¨] å…± u    æ�¡u   [å®Œæˆ�] æ— æ•°æ�®r   rN   rO   u   [è¿‡æ»¤] è¶…3å¹´: u
   , æœ‰æ•ˆ: u   [å®Œæˆ�] æ— æ–°å¢žrG   r   rI   u   [åŽ»é‡�] å·²å­˜åœ¨: u
   , æ–°å¢ž: u   [è¯¦æƒ…] èŽ·å�–u   æ�¡...)Úmax_workersr+   r,   r-   r   é   u
     è¿›åº¦: u    (å…¥åº“ú)ú
z<============================================================u   ç«™ç‚¹: u   æ–°å¢ž: u   è·³è¿‡(è¶…3å¹´): u   è·³è¿‡(é‡�å¤�): )ÚTOTAL_COUNTr<   r(   ÚrangerE   ÚextendÚlenÚtimeÚsleeprA   r   rX   ÚCUTOFF_DATEÚappendr   rS   r   Úcloser   ÚMAX_WORKERSÚsubmitra   Ú	enumerater   Úresultr2   Úcommitr%   )Útotal_pagesÚ	all_itemsÚpiÚitemsÚfilteredÚskipped_oldrZ   r^   r0   r   Ú	new_itemsÚskipped_duprG   r   ÚokÚexÚfuturesÚiÚfrD   s                       r   Úmainrƒ   j   sO  € Ü¤Ñ*¨QÑ.´9Ñ<€KÜ	Ð:¸;¸-ÀuÌ[ÈMÐY]Ð
^Ô_ð €IÜ�A�{ Q‘Ó'ò ˆÜ Ó#ˆØ×Ñ˜ÔÜ��b�T˜˜;˜- w¬s°5«z¨l¸+ÄcÈ)ÃnÐEUÐUYÐZÔ[Ü�
‰
�3�ð	ô 
ˆMœ#˜i›.Ð)¨Ð
.Ô/áÜÐ"Ô#Øð €HØ€KØò ˆØ�X‰X�m QÓ'ˆÙÜ×&Ñ& r¨D¡yÓ1ˆAØ”;ŠØ˜qÑ �ØØ�‰˜Õðô 
Ð˜{˜m¨:´c¸(³m°_Ð
EÔFáÜÐ"Ô#Øô ‹:€DØ€IØ€KØò #ˆØ—‘˜ "Ó%ˆÜ�
˜!˜E˜7 %Ð(ˆÜ�$˜ÔØ˜1Ñ‰Kà×Ñ˜TÕ"ð#ð 	‡J�J„LÜ	Ð   ¨Z¼¸I»Ð7GÐ
HÔIáÜÐ"Ô#Øô 
ˆOœC 	›NÐ+¨6Ð
2Ô3Ø	
€BÜ‹:€DÜ	¬Ô	4ð F¸ØCLÖM¸4�2—9‘9œ\¨4Ó0°$Ñ6ÐMˆÐMÜœl¨7Ó3°QÓ7ò 	F‰DˆAˆqØ—‘“
ˆAÙ”V˜D ! G¡*¨a°	©l¸A¸j¹MÈ1ÈUÉ8ÔTØ�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Ð
*Ô+Ü	ˆVˆHÕùò N÷Fð Fús%   ÈL'ÈL"È)AL'Ê L'Ì"L'Ì'L0Ú__main__)%Ú__doc__Úosr)   Úrer8   rl   Úhashlibr   r   Úbs4r   Úconcurrent.futuresr   r   ÚrequestsÚgetenvr   r%   r@   r=   rS   r<   rh   r#   rn   rq   ÚSessionr>   ÚheadersÚupdater   r   r2   rE   ra   rƒ   Ú__name__© r   r   ú<module>r’      sÓ   ðñ÷
 (× '× 'ß (Ý ß ?Û à
ˆ"�)‰)�KÐ!2Ó
3€Ø'€	ð B€ð 
l€Ø)€Ø€	Ø€àˆh×Ñ ¨jÓ9€Ø€à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ ØÐPðô ò$ò&òò(
ò#òJIðV ˆzÒÙ…Fð r   