Ë
    ¸¬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ZddlmZm	Z	  ej                  dd«      ZdZdZdZd	d
iZd„ Zd„ Zd„ Zdd„Zdd„Zedk(  r?ej,                  dd Zer&ed   j1                  «       r e eed   «      ¬«       y e«        yy)u°   å¼€é˜³åŽ¿äººæ°‘æ”¿åºœ - é¡¹ç›®çŽ¯è¯„ çˆ¬è™«
é�™æ€�åˆ—è¡¨é¡µï¼Œ20æ�¡/é¡µï¼Œå…±3é¡µ~42æ�¡
åˆ—è¡¨: <a href="full_url">title</a><span>date</span>
è¯¦æƒ…: <div class="text"> æ­£æ–‡
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   kaiyang.gov.cn-é¡¹ç›®çŽ¯è¯„zhttps://www.kaiyang.gov.cnz
2023-06-16z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 ó&  — 	 t         j                  j                  | t        ¬«      }t         j                  j	                  |d¬«      }|j                  «       j                  dd¬«      S # t        $ r}t        d| dd	 › d
|› �«       Y d	}~y	d	}~ww xY w)u   èŽ·å�–é¡µé�¢HTML)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsu   [error] è¯·æ±‚å¤±è´¥: iÄÿÿÿNz, )	ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprint)ÚurlÚreqÚrespÚes       ú"/root/gov_crawler/crawl_kaiyang.pyÚ
fetch_pager      s„   € ðÜ�n‰n×$Ñ$ S´'Ð$Ó:ˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<Ð<øÜò ÜÐ& s¨3¨4 y k°°A°3Ð7Ô8Üûðús   ‚A&A) Á)	BÁ2BÂBc                 óV  — g }t        j                  d| «      D ]�  }t        j                  dd|j                  d«      «      j	                  «       }|sŒ:|j                  ||j                  d«      |j                  d«      r|j                  d«      j	                  «       nddœ«       Œ� |S )u*   è§£æž�åˆ—è¡¨ï¼Œæ��å�–æ ‡é¢˜ã€�URLã€�æ—¥æœŸzO<a[^>]*href="([^"]*t2026[^"]*)"[^>]*>([\s\S]*?)</a>\s*<span[^>]*>([^<]+)</span>z<[^>]+>Ú é   é   é   )Útitler   Údate)ÚreÚfinditerÚsubÚgroupÚstripÚappend)ÚhtmlÚitemsÚmr    s       r   Úparse_list_itemsr+   "   s�   € à€EÜ�[‰[ÐkÐmqÓrò ˆÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆÚØ�L‰LØØ—w‘w˜q“zØ./¯g©g°a¬j˜Ÿ™ ›
×(Ñ(Ô*¸bñõ ðð €Ló    c                 óŽ  — t        | «      }|syt        j                  d|«      }|s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)u   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡HTMLr   zM<div class="Article_zw">([\s\S]*?)</div>\s*</div>\s*<div class="share_jiucuo"z1<div class="Article_zw">([\s\S]*?)</div>\s*</div>r   z\n\s*\nú
zhref="(?!http|/)zhref="ú/zsrc="(?!http|/|data:)zsrc=")Úreferer)r   r"   Úsearchr%   r&   r$   ÚBASE_URLÚinline_images)r   r(   r*   Úcontents       r   Ú
get_detailr5   0   s²   € ä�c‹?€DÙØô 	�	‰	ÐbÐdhÓi€AÙÜ�I‰IÐJÈDÓQˆÙØ—'‘'˜!“*×"Ñ"Ó$ˆÜ—&‘&˜ T¨7Ó3ˆä—&‘&Ð,¨h¼Ñ.AÀCÑ.GÈÓQˆÜ—&‘&Ð1°7¼XÑ3EÈÑ3KÈWÓUˆä °Ô5ˆØˆØr,   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:NÚhttpr/   )Ú
startswithr2   )Úimg_urlÚfull_urls     r   Ú_resolve_urlz#inline_images.<locals>._resolve_urlJ   sV   € à×Ñ˜gÔ&Ø˜D�=Ð ØˆØ×"Ñ" 6Ô*Ø$,×$7Ñ$7¸Ô$<�Ä(ÈSÁ.ÐT\Ñ\ˆHØ˜Ð Ð r,   N© )Úhtml_contentr0   r<   s      r   r3   r3   E   s   € à�\Ñ!ØÐó!r,   c           	      ób  — 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        › �«       d}d}d
}	d}
	 |	r�nZt        › d�}|
dkD  rt        › d|
› d�}t!        |«      }|st        d|
› d�«       �n"t#        |«      }|st        d|
› d�«       �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   }||v r|dz  }Œ`t'        |«      }|st        d|d   d d › �«       |dz  }Œ‡	 |j	                  d|d   |||t        f«       |j(                  dkD  r|dz  }|j                  |«       |j                  «        ŒÜ |	rn|
dz  }
�Œ^|j/                  «        t        d!|› d"|› d#�«       y # t*        $ r)}t        d |› �«       |j-                  «        Y d }~�Œ7d }~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] å…¨é‡�æ¨¡å¼�: æˆªæ­¢ Fr   Tz!/zwgk/zdlyxxgk/hjbh_5777165/xmhp/z'/zwgk/zdlyxxgk/hjbh_5777165/xmhp/index_z.htmlu
   [info] ç¬¬u   é¡µæ— å“�åº”ï¼Œç»“æ�Ÿu   é¡µæ— æ•°æ�®ï¼Œç»“æ�Ÿu   é¡µ (u   æ�¡)...r!   é
   u     [info] æˆªæ­¢æ—¥æœŸ u	    (å½“å‰� u   )ï¼Œè·³è¿‡å�Žç»­u     [info] å¢žé‡�æˆªæ­¢ r   u     [warn] ç©ºæ­£æ–‡: r    é(   zhINSERT OR IGNORE INTO gov_raw (title, page_url, content, publish_date, site_name) VALUES (?, ?, ?, ?, ?)u     [error] DBå†™å…¥å¤±è´¥: u   [done] å®Œæˆ�: æ–°å¢ž u    æ�¡, è·³è¿‡ u    æ�¡)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚsetÚ	SITE_NAMEÚaddr   Únowr   Ústrftimer   ÚCUTOFF_DATEr2   r   r+   Úlenr5   Úrowcountr   ÚrollbackÚclose)Úincremental_daysrC   ÚconnÚcÚexisting_urlsÚrowÚ
inc_cutoffÚtotal_addedÚtotal_skippedÚcutoff_reachedÚpager   r(   r)   ÚitemÚpubÚ
detail_urlr4   r   s                      r   Úcrawlr`   T   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Ð:Ô;à€KØ€MØ€NØ€Dà
ÙÙä�
Ð;Ð<ˆØ�!Š8Ü�JÐEÀdÀVÈ5ÐQˆCä˜#‹ˆÙÜ�J˜t˜fÐ$9Ð:Ô;Ùä  Ó&ˆÙÜ�J˜t˜fÐ$9Ð:Ô;Ùä�
˜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Ùà˜e™ˆJØ˜]Ñ*Ø Ñ"�Øä  Ó,ˆGÙÜÐ,¨T°'©]¸3¸BÐ-?Ð,@ÐAÔBØ Ñ"�Øð Ø—	‘	Ø~Ø˜'‘] J°¸¼iÐHôð —:‘: ’>Ø 1Ñ$�KØ!×%Ñ% jÔ1Ø—‘•ð=!	 ñF ØØ�‰	ˆñs ðv 	‡J�J„LÜ	Ð" ; -¨}¸]¸OÈ4Ð
PÕQøô ò  ÜÐ2°1°#Ð6Ô7Ø—‘—’ûð ús   Ç:AI<É<	J.ÊJ)Ê)J.Ú__main__r   )rS   )N)Ú__doc__ÚosÚsysr"   ÚjsonÚurllib.requestr   Úurllib.parser   r   ÚgetenvrE   rJ   r2   rN   r   r   r+   r5   r3   r`   Ú__name__ÚargvÚargsÚisdigitÚintr=   r,   r   ú<module>rn      s­   ðñó
 
Û 
Û 	Û Û Û ß (à
ˆ"�)‰)�KÐ!2Ó
3€Ø)€	Ø'€Ø€àÐWÐ
X€òòòó*!óaRðH ˆzÒØ�8‰8�A�Bˆ<€DÙ��Q‘—‘Ô!Ù™s 4¨¡7›|Ö,á�ð r,   