Ë
    ¸¬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mZmZ ddlm	Z	m
Z
 ej                  j                  dd«      ZdZdZd	Zd
ZddddœZdZdZ ej*                  «        ed¬«      z
  Zej/                  d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)ul  
crawl_yzq.py â€” è¢�å·žåŒºäººæ°‘æ”¿åºœ-å…¬å‘Šå…¬ç¤º
CMS: æ•°èž� CMS (å�Œå®œæ˜¥/é“œé¼“)
åˆ—è¡¨: POST /queryList JSON API (channelId, pageSize, current)
è¯¦æƒ…: æ­£æ–‡å·²åŒ…å�«åœ¨åˆ—è¡¨APIè¿”å›žçš„ content.content å­—æ®µï¼Œæ— éœ€é¢�å¤–è¯·æ±‚
WAF: æ— 

è¿�è¡Œ: python3 crawl_yzq.py [--full]
  --full: å…¨é‡� (6é¡µ ~105æ�¡è¿‘3å¹´)
  ä¸�åŠ : ä»…ç¬¬1é¡µ (æ—¥è·‘å¢žé‡�)
é    N)ÚdatetimeÚ	timedelta)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu"   è¢�å·žåŒºäººæ°‘æ”¿åºœ-å…¬å‘Šå…¬ç¤ºu   è¢�å·žåŒºäººæ°‘æ”¿åºœz https://www.yzq.gov.cn/queryListÚ1996809602120392704zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36zapplication/json;charset=UTF-8z0https://www.yzq.gov.cn/yzqrmzf/gggs/pc/list.html)z
User-AgentzContent-TypeÚRefereré   é   iG  )Údaysz%Y-%m-%dc                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú/root/gov_crawler/crawl_yzq.pyÚlogr   $   s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 óâ  — dd l }t        j                  t        d| dœ«      j	                  d«      }|j
                  j                  t        |t        ¬«      }	 |j
                  j                  |d¬«      }t        j                  |j                  «       j                  «       «      }|j                  di «      j                  dg «      S # t        $ r}t        d	| › d
|› �«       g cY d }~S d }~ww xY w)Nr   é   )Ú	channelIdÚpageSizeÚcurrentzutf-8)ÚdataÚheaders)Útimeoutr   Úresultsõ   ç¬¬u   é¡µè¯·æ±‚å¤±è´¥: )Úurllib.requestÚjsonÚdumpsÚ
CHANNEL_IDÚencodeÚrequestÚRequestÚAPI_URLÚHEADERSÚurlopenÚloadsÚreadÚdecodeÚgetÚ	Exceptionr   )Úpage_noÚurllibÚpayloadÚreqÚrespÚresultÚes          r   Ú
fetch_pager6   (   sÐ   € ÛÜ�j‰jÜØØñó ÷ �vˆgƒð	 ð
 �.‰.×
 Ñ
 ¤¨wÄÐ
 Ó
H€CðØ�~‰~×%Ñ% c°2Ð%Ó6ˆÜ—‘˜DŸI™I›K×.Ñ.Ó0Ó1ˆØ�z‰z˜& "Ó%×)Ñ)¨)°RÓ8Ð8øÜò Üˆc�'�Ð+¨A¨3Ð/Ô0Ø�	ûðús   ÁA/C Ã	C.ÃC)Ã#C.Ã)C.c                 óÎ  — g }| D ]Ý  }|j                  di «      }|j                  dd«      }|sŒ*|j                  d«      xs dj                  «       }|j                  d«      xs dd d }|r|sŒj|t        k  rŒt|j                  di «      j                  dd«      }|r&t        j                  dd	|«      j                  «       }nd}d
|› d|› d�}|j                  ||||f«       Œß |S )NÚsourceÚidÚ ÚtitleÚpubDateé
   Úcontentz\s+ú z/https://www.yzq.gov.cn/yzqrmzf/gggs/pc/content/z	/content_z.html)r-   ÚstripÚTHREE_YEARS_STRÚreÚsubÚappend)	ÚitemsÚarticlesÚitemÚsrcÚart_idr;   Úpub_dater>   Úpage_urls	            r   Úparse_itemsrL   9   sÿ   € Ø€HØò >ˆØ�h‰h�x Ó$ˆØ—‘˜$ Ó#ˆÙØà—‘˜Ó!Ò' R×.Ñ.Ó0ˆØ—G‘G˜IÓ&Ò,¨"¨c¨rÐ2ˆá™HØð ”oÒ%Øð —'‘'˜) RÓ(×,Ñ,¨Y¸Ó;ˆÙÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:‰GàˆGð EÀVÀHÈIÐV\ÐU]Ð]bÐcˆà�‰˜ 5¨(°GÐ<Õ=ð5>ð6 €Or   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 (?, ?, ?, ?, ?, ?)r:   é   u   å…¥åº“å¤±è´¥: é2   z... )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuter   ÚSOURCEÚrowcountr.   r   ÚcommitÚclose)
rF   ÚconnrS   ÚinsertedÚskippedÚurlr;   Údater>   r5   s
             r   Ú
save_to_dbr^   Y   sÙ   € Ü�?‰?œ7Ó#€DØ�[‰[‹]€FØ€HØ€Gà%-ò 4Ñ!ˆˆU�D˜'ð	4Ø�N‰Nð0ô ˜E 3¨¬f°g²mÀÐDô	ð �‰ Ò"Ø˜A‘‘à˜1‘�øð4ð 	‡K�K„MØ‡J�J„LØ�WÐÐøô ò 	4Ü�.  S b  
¨$¨q¨cÐ2×3Ñ3ûð	4ús   ¹>BÂ	CÂ&B?Â?Cc                  óü  — dt         j                  v } t        d| rdnd› d�«       | rt        dt        dz   «      ndg}g }|D ]s  }t        |«      }|st        d|› d�«        nUt        |«      }t        d|› d	t        |«      › d
t        |«      › d�«       |j                  |«       t        |«      dk(  sŒs n t        dt        |«      › d�«       |st        d«       y t        |«      \  }}t        d|› d|› �«       y )Nz--fullu   å¼€å§‹u   å…¨é‡�u   å¢žé‡�u	   çˆ¬å�–...rN   r   u   é¡µæ— æ•°æ�®ï¼Œç»“æ�Ÿu   é¡µ: u   æ�¡ï¼ˆè¿‘3å¹´: u   æ�¡ï¼‰r   u
   å…±èŽ·å�– u    æ�¡æ•°æ�®ï¼ˆè¿‘3å¹´ï¼‰u   æ²¡æœ‰æ•°æ�®ï¼Œé€€å‡ºu   å…¥åº“å®Œæˆ�: æ–°å¢ž u	   , è·³è¿‡ )
ÚsysÚargvr   ÚrangeÚ	MAX_PAGESr6   rL   ÚlenÚextendr^   )Úis_fullÚpages_to_crawlÚall_articlesr/   rE   rF   rZ   r[   s           r   Úmainri   s   s  € Øœ#Ÿ(™(Ð"€GÜˆ&™W‘¨(Ð3°9Ð=Ô>á07”U˜1œi¨!™mÔ,¸a¸S€Nà€LØ!ò ˆÜ˜7Ó#ˆÙÜ�#�g�YÐ3Ð4Ô5ÙÜ˜uÓ%ˆÜˆc�'�˜%¤ E£
˜|¨?¼3¸x»=¸/ÈÐPÔQØ×Ñ˜HÔ%ô ˆx‹=˜AÓÙðô ˆ*”S˜Ó&Ð'Ð'>Ð?Ô@áÜÐ#Ô$Øä" <Ó0Ñ€HˆgÜÐ
 ˜z¨°7°)Ð<Õ=r   Ú__main__)Ú__doc__r`   r!   rP   ÚosrB   r   r   Úconcurrent.futuresr   r   Úenvironr-   rR   r   rU   r'   r#   r(   rc   ÚNUM_THREADSÚnowÚTHREE_YEARS_AGOÚstrftimerA   r   r6   rL   r^   ri   Ú__name__© r   r   ú<module>ru      s¸   ðñ
÷ "× !Ó !ß (ß ?à
�*‰*�.‰.˜Ð&7Ó
8€Ø0€	Ø	 €à
,€Ø"€
ð DØ4ØAñ€ð €	Ø€Ø�(—,‘,“.¡9°'Ô#:Ñ:€Ø!×*Ñ*¨:Ó6€ò.òò"ò@ò4>ð< ˆzÒÙ…Fð r   