Ë
    ¸¬ujŽ  ã                   óR  — 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Zddl	m	Z	m
Z
  ej                  dd«      ZdZdZdZd	Zd
ZddiZdddddddœZdd„Zd„ Zdd„Zdd„Zdd„Zedk(  r?ej4                  dd Zer&ed   j9                  «       r e eed   «      ¬«       y e«        yy)u÷   æ°¸æ˜ŒåŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
JPAAS CMS, APIåˆ†é¡µ, 15æ�¡/é¡µ, ~274é¡µå…±~4100æ�¡
åˆ—è¡¨: <li class="cf"><a class="fl" href="..."><i></i>title</a><span class="fr">date</span>
è¯¦æƒ…: <div class="ty-content"> æ­£æ–‡ (å�«HTML pæ ‡ç­¾)
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   yongchang.gov.cn-å…¬ç¤ºå…¬å‘Šzhttps://www.yongchang.gov.cnz7/api-gateway/jpaas-publish-server/front/page/build/unité   z
2023-06-16z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36ÚbulidstaticÚ b9dd4637b92748389b02b23ceafbcba4Ú 885c17997d1547f58f853025486081ceÚcolumnÚnullÚ 59a1a9ac060643cc8870be5e3035e04a)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚeditTypeÚpageIdc                 ó°  — t        t        «      }t        j                  | t        dœd¬«      |d<   t
        › t        › dt        j                  j                  |«      › �}t        |«      D ]m  }	 t        j                  j                  |t        ¬«      }t        j                  j                  |d¬«      }t        j                  |j!                  «       «      c S  y# t"        $ rq}||d	z
  k  rEd
|d	z   z  }t%        d| › d|d	z   › dt'        |«      dd › d|› d�	«       t)        j*                  |«       nt%        d| › d|› d|› �«       Y d}~ yY d}~Œæd}~ww xY w)u0   è°ƒç”¨JPAAS APIèŽ·å�–åˆ—è¡¨æ•°æ�®ï¼ˆå�«é‡�è¯•ï¼‰)ÚpageNoÚpageSizeF)Úensure_asciiÚ	paramJsonú?©Úheadersé   ©Útimeouté   é   u     [warn] APIç¬¬u   é¡µå¤±è´¥(ç¬¬õ   æ¬¡): Né<   ú, u   så�Žé‡�è¯•...u     [error] APIç¬¬u   é¡µè¯·æ±‚å¤±è´¥()ÚdictÚ
API_PARAMSÚjsonÚdumpsÚ	PAGE_SIZEÚBASE_URLÚAPI_URLÚurllibÚparseÚ	urlencodeÚrangeÚrequestÚRequestÚHEADERSÚurlopenÚloadsÚreadÚ	ExceptionÚprintÚstrÚtimeÚsleep)	Úpage_noÚretriesÚparamsÚurlÚattemptÚreqÚrespÚeÚwaits	            ú)/root/gov_crawler/crawl_yongchang_gsgg.pyÚfetch_api_pagerC   $   sF  € ä”*Ó€FÜŸ*™*°ÄYÑ%OÐ^cÔd€Fˆ;ÑÜˆJ”w�i˜q¤§¡×!7Ñ!7¸Ó!?Ð @Ð
A€CÜ˜“>ò ˆð	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°rÐ)Ó:ˆDÜ—:‘:˜dŸi™i›kÓ*Ò*ð	ð øô ò 	Ø˜ 1™Ò$Ø˜G a™KÑ(�Ü˜¨ y°¸gÀa¹i¸[ÈÌsÐSTËvÐVYÐWYÈ{ÈmÐ[]Ð^bÐ]cÐcpÐqÔrÜ—
‘
˜4Õ äÐ(¨¨	Ð1AÀ'ÀÈ&ÐQRÐPSÐTÔUÝô !ûð		ús   Á.A(CÃ	EÃ$A!EÅEc                 ó¶  — t        j                  d| t         j                  «      }g }|D ]¬  }t        j                  d|«      }t        j                  d|«      }t        j                  d|«      }|sŒH|sŒK|j	                  |j                  d«      j                  «       |j                  d«      |r|j                  d«      j                  «       nddœ«       Œ® |S )u.   è§£æž�åˆ—è¡¨HTMLï¼Œæ��å�–æ ‡é¢˜ã€�URLã€�æ—¥æœŸz<li class="cf">(.*?)</li>zhref="([^"]+)"z<span class="fr">([^<]+)</span>z<a[^>]*><i></i>([^<]+)</a>r   Ú )Útitler<   Údate)ÚreÚfindallÚDOTALLÚsearchÚappendÚgroupÚstrip)ÚhtmlÚitemsÚresultsÚitemÚurl_mÚdate_mÚtitle_ms          rB   Úparse_list_itemsrV   9   sµ   € ä�J‰JÐ3°T¼2¿9¹9ÓE€EØ€GØò 	ˆÜ—	‘	Ð+¨TÓ2ˆÜ—‘Ð=¸tÓDˆÜ—)‘)Ð9¸4Ó@ˆÚ’WØ�N‰NØ Ÿ™ qÓ)×/Ñ/Ó1Ø—{‘{ 1“~Ù39˜Ÿ™ Q›×-Ñ-Ô/¸rñõ ð	ð €Nó    c           
      óP  — t        |«      D ]…  }	 | j                  d«      s	t        | z   } t        j                  j                  | t        ¬«      }t        j                  j                  |d¬«      }|j                  «       j                  dd¬«      } n yt        j                   d|«      }|r‡|j#                  d«      j%                  «       }t        j&                  dd|«      }t        j&                  ddt        z   dz   |«      }t        j&                  ddt        z   dz   |«      }t)        || ¬«      }|S y# t        $ rg}||dz
  k  r7t        d	|dz   › d
t        |«      dd › d�«       t        j                  d«       nt        d|› d
| dd › d|› �«       Y d}~ yY d}~�Œ”d}~ww xY w)u+   ä»Žè¯¦æƒ…é¡µæ��å�–æ­£æ–‡HTMLï¼ˆå�«é‡�è¯•ï¼‰Úhttpr   r   r   zutf-8Úreplace)Úerrorsr   u     [warn] è¯¦æƒ…é¡µå¤±è´¥(ç¬¬r    Nr!   u   , é‡�è¯•...r   u     [warn] è¯¦æƒ…é¡µè¯·æ±‚å¤±è´¥(iÄÿÿÿr"   rE   z@<div class="ty-content">([\s\S]*?)</div>\s*<div class="ty-close"z\n\s*\nú
zhref="(?!http|/)zhref="ú/zsrc="(?!http|/|data:)zsrc=")Úreferer)r-   Ú
startswithr(   r*   r.   r/   r0   r1   r3   Údecoder4   r5   r6   r7   r8   rH   rK   rM   rN   ÚsubÚinline_images)	r<   r:   r=   r>   r?   rO   r@   ÚmÚcontents	            rB   Úfetch_detail_contentre   J   sŒ  € ä˜“>ò ˆð	Ø—>‘> &Ô)Ü ‘n�Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°rÐ)Ó:ˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@ˆDÙðð  ä
�	‰	ÐUÐW[Ó\€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆÜ—&‘&˜ T¨7Ó3ˆÜ—&‘&Ð,¨h¼Ñ.AÀCÑ.GÈÓQˆä—&‘&Ð1°7¼XÑ3EÈÑ3KÈWÓUˆÜ °Ô5ˆØˆØøô' ò 	Ø˜ 1™Ò$ÜÐ4°W¸Q±Y°K¸vÄcÈ!ÃfÈSÈbÀkÀ]ÐR]Ð^Ô_Ü—
‘
˜1•äÐ7¸°yÀÀsÈ3È4ÀyÀkÐQSÐTUÐSVÐWÔXÝõ ûð	ús   �BD5Ä5	F%Ä>AF Æ F%c                 ó   — d| vr| S d„ }y)u9   å°†imgæ ‡ç­¾çš„srcè½¬ä¸ºç»�å¯¹URLï¼ˆåŽ»æŽ‰base64å†…åµŒï¼‰z<imgc                 ó    — | j                  d«      r| dfS | }|j                  d«      s#|j                  d«      rt        nt        dz   |z   }| |fS )u!   å°†ç›¸å¯¹è·¯å¾„è§£æž�ä¸ºç»�å¯¹URLzdata:NrY   r]   )r_   r(   )Úimg_urlÚfull_urls     rB   Ú_resolve_urlz#inline_images.<locals>._resolve_urlo   sV   € à×Ñ˜gÔ&Ø˜D�=Ð ØˆØ×"Ñ" 6Ô*Ø$,×$7Ñ$7¸Ô$<�Ä(ÈSÁ.ÐT\Ñ\ˆHØ˜Ð Ð rW   N© )Úhtml_contentr^   rj   s      rB   rb   rb   j   s   € à�\Ñ!ØÐó!rW   c           	      óÎ  — dd l }|j                  t        «      }|j                  «       }|j	                  d«       |j	                  d«       |j                  «        t        «       }|j	                  dt        f«      D ]  }|j                  |d   «       Œ | rBt        j                  «       t        | ¬«      z
  j                  d«      }t        d| › d|› �«       nt        }t        d	t        › �«       t        d
«      }|r|j!                  d«      st        d«       |j#                  «        y |j!                  di «      j!                  dd«      }t%        |«      }	|	st        d«       |j#                  «        y d}
d}d}d
}	 |r�n‹t        d|› dt'        |	«      › d�«       |	D ]ô  }|d   d d }|r%|t        k  r| sd}t        dt        › d|› d�«        nÅ| r|r||k  rd}t        d|› d|› d�«        n¦|d   }|j)                  d«      s	t*        |z   }||v r|d
z  }Œzt-        |«      }|st        d|d   d d  › �«       |d
z  }Œ¡	 |j	                  d!|d   |||t        f«       |j.                  dkD  r|
d
z  }
|j                  |«       |j                  «        Œö |rnt|d
z  }t        |«      }|r|j!                  d«      st        d|› d#�«       nA|j!                  di «      j!                  dd«      }t%        |«      }	|	st        d|› d$�«       n�Œ�|j#                  «        t        d%|
› d&|› d'�«       y # t0        $ r)}t        d"|› �«       |j3                  «        Y d }~�Œ¾d }~ww xY w)(Nr   zPRAGMA journal_mode=WALad  
        CREATE TABLE IF NOT EXISTS gov_raw (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            title TEXT,
            page_url TEXT UNIQUE,
            content TEXT,
            publish_date TEXT,
            site_name TEXT DEFAULT '',
            crawl_time TEXT DEFAULT (datetime('now', '+8 hours')),
            similar TEXT
        )
    z0SELECT page_url FROM gov_raw WHERE site_name = ?)Údaysz%Y-%m-%du   [info] å¢žé‡�æ¨¡å¼�: æœ€è¿‘ u    å¤© >= u   [info] å…¨é‡�æ¨¡å¼�: æˆªæ­¢ r   Úsuccessu#   [error] æ— æ³•èŽ·å�–æ•°æ�®ï¼Œé€€å‡ºÚdatarO   rE   u    [warn] ç¬¬1é¡µæ— æ•°æ�®ï¼Œé€€å‡ºFTu
   [info] ç¬¬u   é¡µ (u   æ�¡)...rG   é
   u     [info] æˆªæ­¢æ—¥æœŸ u	    (å½“å‰� u   )ï¼Œè·³è¿‡å�Žç»­u     [info] å¢žé‡�æˆªæ­¢ r<   rY   u     [warn] ç©ºæ­£æ–‡: rF   é(   zhINSERT OR IGNORE INTO gov_raw (title, page_url, content, publish_date, site_name) VALUES (?, ?, ?, ?, ?)u     [error] DBå†™å…¥å¤±è´¥: u   é¡µæ— å“�åº”ï¼Œç»“æ�Ÿu   é¡µæ— æ•°æ�®ï¼Œç»“æ�Ÿu   [done] å®Œæˆ�: æ–°å¢ž u    æ�¡, è·³è¿‡ u    æ�¡)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚsetÚ	SITE_NAMEÚaddr   Únowr   Ústrftimer5   ÚCUTOFF_DATErC   ÚgetÚcloserV   Úlenr_   r(   re   Úrowcountr4   Úrollback)Úincremental_daysrs   ÚconnÚcÚexisting_urlsÚrowÚ
inc_cutoffrp   rO   rP   Útotal_addedÚtotal_skippedÚcutoff_reachedÚpagerR   Úpubr<   rd   r@   s                      rB   Úcrawlr�   y   s‚  € Ûà�?‰?œ7Ó#€DØ�‰‹€AØ‡I�IÐ'Ô(à‡I�Ið ô 	ð 	‡K�K„Mä“E€MØ�y‰yÐKÌiÈ\ÓZò "ˆØ×Ñ˜#˜a™&Õ!ð"ñ Ü—l‘l“n¤yÐ6FÔ'GÑG×QÑQÐR\Ó]ˆ
ÜÐ,Ð-=Ð,>¸hÀzÀlÐSÕTä ˆ
ÜÐ,¬[¨MÐ:Ô;ä˜!Ó€DÙ�t—x‘x 	Ô*ÜÐ3Ô4Ø�
‰
ŒØà�8‰8�F˜BÓ×#Ñ# F¨BÓ/€DÜ˜TÓ"€EÙÜÐ0Ô1Ø�
‰
ŒØà€KØ€MØ€NØ€Dà
ÙÙÜ�
˜4˜& ¤c¨%£j \°Ð9Ô:àò $	 ˆDØ�v‘,˜s Ð#ˆCÙ�sœ[Ò(Ñ1AØ!%�ÜÐ.¬{¨m¸9ÀSÀEÐIYÐZÔ[ÙÙ¡C¨C°*Ò,<Ø!%�ÜÐ.¨z¨l¸)ÀCÀ5ÐHXÐYÔZÙà�u‘+ˆCØ—>‘> &Ô)Ü ‘n�à�mÑ#Ø Ñ"�Øä*¨3Ó/ˆGÙÜÐ,¨T°'©]¸3¸BÐ-?Ð,@ÐAÔBØ Ñ"�Øð Ø—	‘	Ø~Ø˜'‘] C¨°#´yÐAôð —:‘: ’>Ø 1Ñ$�KØ!×%Ñ% cÔ*Ø—‘•ðC$	 ñL Øà�‰	ˆÜ˜dÓ#ˆÙ˜4Ÿ8™8 IÔ.Ü�J˜t˜fÐ$9Ð:Ô;ØØ�x‰x˜ Ó#×'Ñ'¨°Ó3ˆÜ  Ó&ˆÙÜ�J˜t˜fÐ$9Ð:Ô;Øño ðr 	‡J�J„LÜ	Ð" ; -¨}¸]¸OÈ4Ð
PÕQøô' ò  ÜÐ2°1°#Ð6Ô7Ø—‘—’ûð ús   ÉAL2Ì2	M$Ì;MÍM$Ú__main__r   )r„   )é   )r   )N)Ú__doc__ÚosÚsysrH   r%   r7   Úurllib.requestr*   Úurllib.parser   r   Úgetenvru   rz   r(   r)   r'   r~   r0   r$   rC   rV   re   rb   r�   Ú__name__ÚargvÚargsÚisdigitÚintrk   rW   rB   ú<module>r�      sÖ   ðñó
 
Û 
Û 	Û Û Û Û ß (à
ˆ"�)‰)�KÐ!2Ó
3€Ø+€	Ø)€à
C€Ø€	Ø€àÐWÐ
X€ð Ø/Ø2ØØØ0ñ€
óò*ó"ó@!ólRð^ ˆzÒØ�8‰8�A�Bˆ<€DÙ��Q‘—‘Ô!Ù™s 4¨¡7›|Ö,á�ð rW   