Ë
    r]«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m	Z	 ddl
Z
ddlZddlZddlmZ  ej                  «        dZdZdZ ej$                  dd	«      Z ej(                  ej*                  «       e	d
¬«      z
  j-                  d«      ZdZddiZd„ Zd„ Zd„ Zdd„Zedk(  r2 eej@                  «      dkD  xr ej@                  d   dv Z! ee!¬«       yy)uÝ   
ç‹¬å±±å­�åŒº - ç”Ÿæ€�çŽ¯å¢ƒä¿¡æ�¯å…¬å¼€
https://www.dsz.gov.cn/dsz/sthj/zfxxgk.shtml
æ”¿åºœä¿¡æ�¯å…¬å¼€å¹³å�° - APIç›´å�–æ�œç´¢æŽ¥å�£: /search/{channelId}?page=N&_pageSize=15
channelId = dc418fb236024fbf81277f159a17ada5
é    N)ÚdatetimeÚtimezoneÚ	timedelta)ÚBeautifulSoupu   ç‹¬å±±å­�ç”Ÿæ€�çŽ¯å¢ƒzˆhttps://www.dsz.gov.cn/search/{channelId}?page={page}&_pageSize=15&_isAgg=true&_isJson=true&_template=index&_rangeTimeGte=&_channelName=Ú dc418fb236024fbf81277f159a17ada5Ú	SEARCH_DBz/root/search.dbiG  )Údaysz%Y-%m-%dé   z
User-Agentz:Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/125.0.0.0c                 óò   — t         j                  t        | ¬«      }	 t        j                  |t
        d¬«      }d|_        |j                  «       S # t        $ r}t        d| › d|› �d¬«       Y d }~y d }~ww xY w)	N)Ú	channelIdÚpageé   )ÚheadersÚtimeoutúutf-8u   
â�Œ APIè¯·æ±‚å¤±è´¥ page=ú: T)Úflush)
ÚLIST_URLÚformatÚ
CHANNEL_IDÚrequestsÚgetÚHEADERSÚencodingÚjsonÚ	ExceptionÚprint)r   ÚurlÚrÚes       úcrawl_dsz.pyÚ	fetch_apir"      sh   € Ü
�/‰/¤J°Tˆ/Ó
:€CðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰v‹xˆøÜò ÜÐ+¨D¨6°°A°3Ð7¸tÕDÜûðús   �2A Á	A6ÁA1Á1A6c                 óê  — 	 t        j                  | t        dd¬«      }d|_        t	        |j
                  d«      }|j                  d¬«      }|syg }|j                  d	«      D ]Ò  }|j                  d
¬«      }t        j                  dd|«      j                  «       }|sŒ=t        j                  d|«      rŒTt        j                  d|«      rt        |«      dk  rŒy|j                  d«      r8dj                  d„ |j                  dd
¬«      j                  d«      D «       «      }|j!                  |«       ŒÔ |rdj                  |«      S dS # t"        $ r}t%        d| › d|› �«       Y d}~yd}~ww xY w)uã   æŠ“è¯¦æƒ…é¡µæ­£æ–‡ â€”â€” API çš„ content å­—æ®µæ˜¯ã€�å¹³é“ºæ— åˆ†æ®µã€‘çš„ï¼Œ
    ç½‘é¡µ #zoomcon é‡Œæ‰�æ˜¯å¸¦ <p> åˆ†æ®µçš„åŽŸæ–‡ï¼ˆå®žæµ‹ 10 ä¸ª <p> â†’ 5 æ®µï¼‰ã€‚
    å¤±è´¥è¿”å›ž Noneï¼Œè°ƒç”¨æ–¹å›žè�½ API contentã€‚
    é   F)r   r   Úverifyr   zhtml.parserÚzoomcon)ÚidNÚpT©Ústripz[\ue000-\uf8ff]Ú uT   ^(ç´¢å¼•å�·|æœ‰æ•ˆæ€§|å�‘æ–‡æœºå…³|æ–‡å�·|æˆ�æ–‡æ—¥æœŸ|å�‘å¸ƒæ—¥æœŸ|å…³é”®å­—)[ï¼š:]u'   ^(æ—¥æœŸ|æ�¥æº�|ä½œè€…|è®¿é—®é‡�)[ï¼š:]é<   Úbrú
c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)Nr)   )Ú.0Úss     r!   ú	<genexpr>zfetch_detail.<locals>.<genexpr>8   s   è ø€ Ò_ AÐUV×U\ÑU\ÕU^œaÑ_ùs   ‚˜z

u      âš ï¸� è¯¦æƒ…é¡µå¤±è´¥ r   )r   r   r   r   r   ÚtextÚfindÚfind_allÚget_textÚreÚsubr*   ÚmatchÚlenÚjoinÚsplitÚappendr   r   )r   r   ÚsoupÚboxÚpartsr(   Útr    s           r!   Úfetch_detailrB   !   sJ  € ð
Ü�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ü˜QŸV™V ]Ó3ˆØ�i‰i˜9ˆiÓ%ˆÙØØˆØ—‘˜cÓ"ò 	ˆAØ—
‘
 �
Ó&ˆAÜ—‘Ð)¨2¨qÓ1×7Ñ7Ó9ˆAÙØÜ�x‰xÐoÐqrÔsØÜ�x‰xÐBÀAÔFÌ3ÈqË6ÐTVÊ;ØØ�v‰v�dŒ|Ø—I‘IÑ_¨¯©°DÀ¨Ó)E×)KÑ)KÈDÓ)QÔ_Ó_�Ø�L‰L˜�Oð	ñ &+ˆv�{‰{˜5Ó!Ð4°Ð4øÜò ÜÐ*¨3¨%¨r°!°Ð5Ô6Üûðús%   ‚AE ÁC:E ÅE Å	E2ÅE-Å-E2c                 ó,  — | sy t        j                  t        d¬«      }|j                  d«       |j                  d«       d\  }}| D ]Ô  }	 |j                  d|j	                  dd«      d d	 |j	                  d
d«      |j	                  d
d«      |j	                  d«      xs dd d |j	                  d«      xs dd d |j	                  d«      xs dd d |j	                  dd«      dd|j	                  d«      xs dd d f
«       |j
                  dkD  r|dz  }n|dz  }ŒÖ |j                  «        | d   j	                  dd«      }|j                  d|f«       |j                  «        |j                  «        t        d|› d|› �«       y #  |dz  }Y �ŒKxY w)Nr,   )r   zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMAL)r   r   z›INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, summary, content, status, category, tags) VALUES (?,?,?,?,?,?,?,?,?,?)Ú	site_namer+   éÈ   r   Útitleiô  Úpub_dateé
   ÚsummaryÚcontentÚactiveÚtagséd   r   é   z·INSERT INTO gov_search(rowid, title, site_name, summary) SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?u   
ðŸ’¾ å…¥åº“: æ–°å¢žu   , è·³è¿‡)	Úsqlite3Úconnectr   Úexecuter   Útotal_changesÚcommitÚcloser   )ÚitemsÚdbÚokÚskipÚitemrD   s         r!   Úinsert_to_dbrZ   @   sš  € ÙØÜ	�‰œ¨BÔ	/€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð /ð —‘˜ RÓ(¨¨#Ð.°·±¸¸rÓ0BØ—‘˜˜rÓ" T§X¡X¨gÓ%6Ò%<¸"¸d¸sÐ$CØ—‘˜*Ó%Ò+¨¨S¨bÐ1Ø—‘˜)Ó$Ò*¨¨D¨SÐ1Ø—‘˜ 2Ó&¨°"Ø—‘˜&Ó!Ò' R¨¨#Ð.ð1ô	ð ×Ñ !Ò# R¨1¡W¡RØ˜!‘)�$øðð ‡I�I„KØ�a‘—‘˜[¨"Ó-€IØ‡J�Jð MàOXÈlô\ð ‡I�I„KØ‡H�H„JÜ	Ð! "  X¨d¨VÐ
4Õ5øð 	�˜‘	“ús   ÁCF	Æ	Fc                 ó@  — t        j                   «       }t        dt        › dd› �«       | rdnt        }d}t	        d|dz   «      D �]�  }t        d|› d�dd¬	«       t        |«      }|r|j                  d
«      st        d«        �nQ|d
   }|j                  dg «      }|st        d«        �n*t        dt        |«      › d|j                  dd«      › d�«       |j                  dd«      }g }|D �]´  }	|	j                  dd«      j                  «       }
|	j                  dd«      j                  «       }|	j                  d«      xs dd d }|	j                  dd«      xs d}|
r|sŒw|r
|t        k  rŒƒt        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }	 ddlm}  ||«      }t        j                  dd|«      }t#        |«      }|rt        |«      t        |«      dz  kD  r|}n|j                  «       }t        j                  dd|«      d d j                  «       }|j%                  d «      rd!|d"d  z   }|j'                  t        |
||||t        d#œ«       �Œ· |rt)        |«       d$}||z  |k\  r nt        j*                  d%«       �Œ’ t        d&t-        || d$z   «      › d't        j                   «       |z
  d(›d)�«       y # t         $ r Y �Œw xY w)*Nr.   z(========================================rN   r   u	   
ðŸ“„ ç¬¬u   é¡µ...ú T)Úendr   Údatau   â�Œ æ— æ•°æ�®Úresultsu	   ç©ºç»“æžœu   ðŸ“Š u	    æ�¡ (å…±Útotalu   æ�¡)rF   r+   r   ÚpublishedTimeStrrH   rJ   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)Úunescapez[\u00a0\u2000-\u200a\u3000]+gš™™™™™Ù?z<[^>]+>rE   zhttp://zhttps://é   )rD   rF   r   rJ   rI   rG   rL   é   g      à?u   
âœ… å®Œæˆ�! å…±æ‰«æ�� u	    é¡µ
â�± z.1fr1   )Útimer   Ú	SITE_NAMEÚ	MAX_PAGESÚranger"   r   r:   r*   ÚCUTOFFr7   r8   ÚSÚIÚhtmlrc   r   rB   Ú
startswithr=   rZ   ÚsleepÚmin)ÚincrementalÚt0Ú
page_limitÚtotal_recordsr   r^   Údr_   rU   rY   rF   r   rG   rJ   Úcontent_cleanÚ_unescÚdetailrI   Ú	page_sizes                      r!   Úmainrz   _   s  € Ü	�‰‹€BÜ	ˆBŒyˆk˜˜F˜8Ð
$Ô%á!‘¤y€JØ€Mä�a˜ a™Ó(ó AˆÜ�
˜4˜& Ð'¨S¸Õ=Ü˜‹ˆÙ˜4Ÿ8™8 FÔ+Ü�/Ô"Úà�‰LˆØ—%‘%˜	 2Ó&ˆÙÜ�+ÔÚä�”c˜'“l�^ 9¨Q¯U©U°7¸1Ó-=Ð,>¸dÐCÔDØŸ™˜g qÓ)ˆð ˆØó %	:ˆDØ—H‘H˜W bÓ)×/Ñ/Ó1ˆEØ—(‘(˜5 "Ó%×+Ñ+Ó-ˆCØŸ™Ð!3Ó4Ò:¸¸C¸RÐ@ˆHØ—h‘h˜y¨"Ó-Ò3°ˆGá¡ØÙ˜H¤vÒ-Øô ŸF™FÐ#?ÀÀWÔTV×TXÑTXÔY[×Y]ÑY]ÑT]Ô^ˆMÜŸF™FÐ#=¸rÀ=ÔXZ×X\ÑX\Ô]_×]aÑ]aÑXaÔbˆMðÝ3Ù & }Ó 5�Ü "§¡Ð'FÈÈ]Ó [�ô
 " #Ó&ˆFÙœ#˜f›+¬¨MÓ(:¸SÑ(@Ò@Ø &‘à -× 3Ñ 3Ó 5�ä—f‘f˜Z¨¨]Ó;¸D¸SÐA×GÑGÓIˆGð �~‰~˜iÔ(Ø  3 q r 7Ñ*�à�L‰L¤y¸5Ø }ÀØ$¬iñ9ö :ðG%	:ñN Ü˜Ôð ˆ	Ø�)Ñ˜}Ò,Ùä�
‰
�3ŽðCAôF 
Ð$¤S¨¸°~ÈÑ7KÐ5LÓ%MÐ$NÈjÔY]×YbÑYbÓYdÐegÑYgÐhkÐXlÐlmÐ
nÕoøô= ò Úðús   Ç#%LÌ	LÌLÚ__main__rN   )Ú1z--incremental)rq   )F)"Ú__doc__ÚsysÚosr7   rf   r   rO   r   r   r   r   Úurllib3Úbs4r   Údisable_warningsrg   r   r   Úgetenvr   ÚnowÚutcÚstrftimerj   rh   r   r"   rB   rZ   rz   Ú__name__r:   Úargvrq   © ó    r!   ú<module>r‹      sã   ðñ÷ (× '× 'ß 2Ñ 2ß Û 	Ý Ø €× Ñ Ô à#€	ð V€Ø/€
ØˆB�I‰I�kÐ#4Ó5€	Ø
ˆ(�,‰,�x—|‘|Ó
$¡y°eÔ'<Ñ
<×	FÑ	FÀzÓ	R€Ø€	ØÐUÐ
V€òòò>6ó>JpðX ˆzÒÙ�c—h‘h“- !Ñ#ÒM¨¯©°©Ð7MÐ(M€KÙ�[Ö!ð rŠ   