Ë
    ¸¬ujE  ã                   óú   — 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	Z	dZ
dZdZedz   ZdadZ ej                   d	d
«      Z e	j$                  «       ZddiZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)ué  
äº”åŽŸåŽ¿äººæ°‘æ”¿åºœ â€” é€šçŸ¥å…¬å‘Š çˆ¬è™«
site: www.wuyuan.gov.cn
æ �ç›®: /tzgg/ (å†…è’™å�¤äº”åŽŸåŽ¿ï¼Œé�žæ±Ÿè¥¿å©ºæº�)
åˆ—è¡¨: JS API POST /rmt/tmpl/api/site/{siteId}/channelid/{channelId}
      body: {"currpage":N,"pagesize":10,"params":"..."} â†’ {"errcode":0,"data":[{docno,title,inputTime(ms),...}]}
      1069æ�¡, 10æ�¡/é¡µ, 107é¡µ
è¯¦æƒ…: http://www.wuyuan.gov.cn/tzgg/{docno}.html
è¯¦æƒ…ç»“æž„: meta ArticleTitle/PubDate, div#content.hl_data=hlText(æ­£æ–‡, æ ‡é¢˜é¦–p+è¡¨æ ¼)
é    Nu   äº”åŽŸåŽ¿-é€šçŸ¥å…¬å‘Šzwww.wuyuan.gov.cnzhttp://www.wuyuan.gov.cnz^/rmt/tmpl/api/site/f4f8152cf0cd47c0a69f16be6bce423f/channelid/14bd7ef54c7f4a6f987f96e9e45d4c97Ú i-  Ú	SEARCH_DBz/root/search.dbú
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36c                 óú   — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |dt
        ¬«      }|j                  «       j                  dd¬«      S # t        $ r Y y w xY w)N)Úheadersé   ©ÚtimeoutÚcontextúutf-8Úreplace©Úerrors)	ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚCTXÚreadÚdecodeÚ	Exception)ÚurlÚreqÚresps      ú&/root/gov_crawler/crawl_wuyuan_tzgg.pyÚhttp_getr      si   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2¼sÐ%ÓCˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<Ð<øÜò Ùðús   §AA. Á.	A:Á9A:c                 óv  — t        j                  |«      j                  d«      }t        j                  j                  | |t        d   ddœ¬«      }	 t        j                  j                  |dt        ¬«      }t        j                  |j                  «       j                  dd¬	«      «      S # t        $ r Y y w xY w)
Nr   r   zapplication/json;charset=utf-8)r   zContent-Type)Údatar   r   r	   r   r   )ÚjsonÚdumpsÚencoder   r   r   r   r   r   Úloadsr   r   r   )r   Úpayloadr   r   r   s        r   Úhttp_post_jsonr%   #   s�   € Ü�:‰:�gÓ×%Ñ% gÓ.€DÜ
�.‰.×
 Ñ
  ¨4Ü˜lÑ+Ø8ñ:Ð
 ó €CðÜ�~‰~×%Ñ% c°2¼sÐ%ÓCˆÜ�z‰z˜$Ÿ)™)›+×,Ñ,¨W¸YÐ,ÓGÓHÐHøÜò Ùðús   ÁAB, Â,	B8Â7B8c                  ó‚   — t        t        dz   «      } | syt        j                  d| «      }|r|j	                  d«      S dS )u    ä»Žåˆ—è¡¨é¡µæ��å�– params ç­¾å��ú/tzgg/Nzparams:\s*"([^"]+)"é   )r   ÚBASE_URLÚreÚsearchÚgroup)ÚhtmlÚms     r   Úget_api_paramsr/   /   s=   € ä”H˜xÑ'Ó(€DÙØÜ
�	‰	Ð(¨$Ó/€AÙˆ1�7‰7�1‹:Ð$ Ð$ó    c           
      óÞ  — | dt         dœ}t        t        |«      }|r|j                  d«      dk7  rg S |j                  d«      xs g }g }|D ]ž  }|j                  d«      }|j                  d«      xs dj	                  «       }|j                  d	«      xs d}|r,t        j                  d
t        j                  |dz  «      «      nd}	|sŒ|j                  |||	t        › d|› d�dœ«       Œ  |S )u0   è°ƒ API æ‹¿ä¸€é¡µåˆ—è¡¨ â†’ [{docno, title, ts}]é
   )ÚcurrpageÚpagesizeÚparamsÚerrcoder   r   ÚdocnoÚtitler   Ú	inputTimez%Y-%m-%diè  r'   z.html)r7   r8   Úpublish_dater   )
Ú
API_PARAMSr%   ÚAPI_URLÚgetÚstripÚtimeÚstrftimeÚ	localtimeÚappendr)   )
Úpager$   Újr   ÚitemsÚitr7   r8   ÚtsÚdates
             r   Úfetch_list_pagerI   7   sè   € à¨R¼:ÑF€GÜ”w Ó(€AÙ�—‘�iÓ  AÒ%Øˆ	Ø�5‰5�‹=Ò˜B€DØ€EØò ˆØ—‘�w“ˆØ—‘˜“Ò& B×-Ñ-Ó/ˆØ�V‰V�KÓ Ò% AˆÙGIŒt�}‰}˜Z¬¯©¸¸T¹	Ó)BÔCÈrˆÚØ�L‰LØØØ $Ü"˜ 6¨%¨°Ð6ñ	õ ðð €Lr0   c                 óú  — t        | «      }|syd}t        j                  d|«      }|r|j                  d«      j	                  «       }d}t        j                  d|«      }|r"|j                  d«      j	                  «       dd }d}t        j                  d|t        j
                  «      }|s%t        j                  d|t        j
                  «      }|rŸ|j                  d«      j	                  «       }t        j                  d	d|t        j
                  t        j                  z  ¬
«      }t        j                  dd|t        j
                  t        j                  z  ¬
«      }|j	                  «       }|xs d||dœS )u+   èŽ·å�–è¯¦æƒ…ï¼šæ ‡é¢˜ã€�æ­£æ–‡HTMLã€�æ—¥æœŸNr   z+<meta name="ArticleTitle" content="([^"]+)"r(   z&<meta name="PubDate" content="([^"]+)"r2   z6<div id="content"[^>]*>(.*?)</div>\s*<div class="xglj"z"<div id="content"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)r8   ÚcontentrH   )r   r*   r+   r,   r>   ÚDOTALLÚsubÚI)r   r-   r8   Úm_trH   Úm_drL   Úm_cs           r   Úfetch_detailrS   M   s,  € ä�C‹=€DÙØà€EÜ
�)‰)ÐBÀDÓ
I€CÙ
Ø—	‘	˜!“×"Ñ"Ó$ˆà€DÜ
�)‰)Ð=¸tÓ
D€CÙ
Ø�y‰y˜‹|×!Ñ!Ó# C RÐ(ˆà€GÜ
�)‰)ÐMÈtÔUW×U^ÑU^Ó
_€CÙÜ�i‰iÐ=¸tÄRÇYÁYÓOˆÙ
Ø—)‘)˜A“,×$Ñ$Ó&ˆÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆØ—-‘-“/ˆà’[˜b¨W¸dÑCÐCr0   c                  óî   — t        j                  t        «      } | j                  d«       	 | j                  d«       | j                  «        | j                  «        y # t         j                  $ r Y Œ6w xY w)Naa  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_name TEXT, source_url TEXT, page_url TEXT,
        title TEXT, publish_date TEXT, date_rank INTEGER DEFAULT 0,
        summary TEXT, status TEXT, category TEXT DEFAULT '',
        visits INTEGER DEFAULT 0, content TEXT DEFAULT '', tags TEXT DEFAULT ''
    )z²CREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(
            title, content, site_name,
            content='gov_raw', content_rowid='id', tokenize='unicode61'
        ))Úsqlite3Úconnectr   ÚexecuteÚOperationalErrorÚcommitÚclose)Úconns    r   Úinit_dbr\   i   se   € Ü�?‰?œ9Ó%€DØ‡L�Lð 	ô 
ðØ�‰ð ô 	ð 	‡K�K„MØ‡J�J…Løô ×#Ñ#ò Ùðús   ¬A ÁA4Á3A4c                  óÂ  — dd l } | j                  «       }|j                  ddd¬«       |j                  dt        dd¬	«       |j	                  «       }t        «       at        st        d
«       y t        dt        t        «      › d�«       t        «        t        dz   dz  }|j                  r|n|j                  }|j                  rdnd|› d�}t        dt        › d|› d�«       t        dt        › d|› d�«       t        «        t        j                  t         «      }|j#                  «       }d}d}	t%        d|dz   «      D �]Ü  }
t'        |
«      }|st        d|
d›d|› d�«       Œ%d}d}|D �]d  }|j)                  d|d   t        f«      j+                  «       }|r|dz  }|	dz  }	Œ:t-        |d   «      }|rM|j/                  dd«      }|j/                  d «      xs |d    }|j/                  d!|j/                  d"d«      «      }nd}|d    }|j/                  d"d«      }|s|dz  }|	dz  }	Œ½	 |j)                  d#||||d   t0        t        d$f«       |j2                  dkD  rt|j4                  }	 t7        j8                  d%d&|«      }t7        j8                  d'd&|«      j;                  «       d d( xs |}|j)                  d)||t        |f«       |dz  }|dz  }�Œg |j?                  «        t        d|
d›d|› d*t        |«      › d+|› d,|› d-�«       tA        jB                  d.«       �Œß |jE                  «        t        d/|› d0|	› �«       y # t<        $ r Y Œ‡w xY w# t<        $ r Y �Œòw xY w)1Nr   z--fullÚ
store_trueu   å…¨é‡�107é¡µ)ÚactionÚhelpz--pagesr(   u   æŒ‡å®šé¡µæ•°)ÚtypeÚdefaultr`   u   âœ— æ— æ³•èŽ·å�– API paramsu   API params èŽ·å�–æˆ�åŠŸ (u    å­—ç¬¦)é	   r2   u   å…¨é‡�u   å¢žé‡�(u   é¡µ)u   ðŸ”� u    â€” u   æ¨¡å¼�u     æ€»æ�¡æ•°: u   , æœ¬æ¬¡çˆ¬å�–: u   é¡µz  [pÚ2dú/u   ] âœ— APIæ— æ•°æ�®z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r   rL   r   r8   rH   r:   z|INSERT OR IGNORE INTO gov_raw (title, content, publish_date, page_url, source_url, site_name, status) VALUES (?,?,?,?,?,?,?)Ú	publishedz<[^>]+>ú z\s+éÈ   zSINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?,?,?,?)u   ] âœ“ u   æ�¡ (æ–°å¢žu    è·³è¿‡ú)g333333Ó?u   
ðŸ“Š å®Œæˆ�ï¼�æ–°å¢ž: u    | è·³è¿‡: )#ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr/   r;   ÚprintÚlenr\   ÚTOTAL_COUNTÚfullÚpagesÚ	SITE_NAMErU   rV   r   ÚcursorÚrangerI   rW   ÚfetchonerS   r=   ÚDOMAINÚrowcountÚ	lastrowidr*   rN   r>   r   rY   r?   ÚsleeprZ   )rj   ÚparserÚargsÚtotal_pagesÚpages_to_crawlÚmoder[   ÚcurÚ	new_totalÚ
skip_totalrC   rE   Úpage_newÚ	page_skipÚitemÚexistsÚdetailrL   r8   rH   Úrow_idÚplains                         r   Úmainr‹   |   s„  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¨¸NÐÔKØ
×Ñ˜	¬°Q¸^ÐÔLØ×ÑÓ€Dô  Ó!€JÝÜÐ+Ô,ØÜ	Ð%¤c¬*£oÐ%6°hÐ
?Ô@ä„IÜ ‘? rÑ)€KØ$(§I¢I‘[°4·:±:€NØ—y’y‰8¨°Ð/?¸tÐ&D€Dä	ˆE”)�˜E $  vÐ
.Ô/Ü	ˆMœ+˜Ð&6°~Ð6FÀcÐ
JÔKÜ	„Gä�?‰?œ9Ó%€DØ
�+‰+‹-€Cà€IØ€JÜ�a˜¨!Ñ+Ó,ó :ˆÜ Ó%ˆÙÜ�D˜˜b˜	  >Ð"2Ð2DÐEÔFØàˆØˆ	Øó .	ˆDØ—[‘[ØHØ�e‘œiÐ(ó÷ ‰h‹jð ñ Ø˜Q‘�	Ø˜a‘�
Øä! $ u¡+Ó.ˆFÙØ Ÿ*™* Y°Ó3�ØŸ
™
 7Ó+Ò<¨t°G©}�Ø—z‘z &¨$¯(©(°>À2Ó*FÓG‘à�Ø˜W™�Ø—x‘x °Ó3�áØ˜Q‘�	Ø˜a‘�
ØðØ—‘ð-ð ˜G T¨4°©;¼Ä	È;ÐWô	ð —<‘< !Ò#Ø Ÿ]™]�FðÜ "§¡ z°3¸Ó @˜Ü "§¡ v¨s°EÓ :× @Ñ @Ó BÀ4ÀCÐ HÒ QÈE˜ØŸ™ØqØ# U¬I°uÐ=ôð  ‘M�HØ ‘N�IùðY.	ð` 	�‰ŒÜ��T˜"�I˜Q˜~Ð.¨f´S¸³Z°LÀÈHÈ:ÐU\Ð]fÐ\gÐghÐiÔjÜ�
‰
�3Žðu:ðx 	‡J�J„LÜ	Ð$ Y K¨{¸:¸,Ð
GÕHøô %ò Ùðûô ò Úðús7   È)?MÉ)AMË
MÍ	MÍMÍMÍMÍ	MÍMÚ__main__)Ú__doc__r*   ÚsysÚosrU   r?   r    Úurllib.requestr   Ússlrt   rx   r)   r<   r;   rq   Úgetenvr   Ú_create_unverified_contextr   r   r   r%   r/   rI   rS   r\   r‹   Ú__name__© r0   r   ú<module>r–      s§   ðñ	÷ =× <× <× <à$€	Ø	€Ø%€Ø
ÐuÑ
u€Ø€
Ø€àˆB�I‰I�kÐ#4Ó5€	Ø$€c×$Ñ$Ó&€àÐoð€òò
ò%òò,Dò8ò&YIðv ˆzÒÙ…Fð r0   