Ë
    ¸¬uj@  ã            	       óP  — d 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 e	j                  e	j                  j                  «       dZdZdZ ej                   dd«      Zd	Z ej&                  ej(                  «       ed
¬«      z
  j+                  d«      ZddiZd„ Zd„ Zd„ Zd„ Zd"d„Zedk(  rodej<                  v Z e de› derdnd› de› d�«        ej                  «       Z! ee¬«      \  Z"Z# e d ej                  «       e!z
  d›d�«        e d e"› d!e#› �«       yy)#u‘  
è�ŠåŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯ä¿�è¦�é—» (sthjj.liaocheng.gov.cn)
==============================================
CMS: æ”¿åºœé—¨æˆ· (layui åŠ¨æ€�åˆ—è¡¨)
åˆ—è¡¨: /channel_t_189_13529/?page=N
è¯¦æƒ…: /channel_t_189_13529/doc_XXXXX.html
æ­£æ–‡: div.content-text
JS åˆ†é¡µ: ?page=N å�‚æ•°å�¯ç”¨

ç”¨æ³•:
    python3 crawl_liaocheng.py          # å…¨é‡�
    python3 crawl_liaocheng.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚtimezoneÚ	timedeltau%   è�ŠåŸŽå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯ä¿�è¦�é—»zhttp://sthjj.liaocheng.gov.cnz2http://sthjj.liaocheng.gov.cn/channel_t_189_13529/Ú	SEARCH_DBz/root/search.dbé   iG  )Údaysz%Y-%m-%dz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó¬   — 	 t        j                  | t        dd¬«      }d|_        |j                  S # t
        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   F)ÚheadersÚtimeoutÚverifyzutf-8u     âš  fetch fail: )ÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprint)ÚurlÚrÚes      ú$/root/gov_crawler/crawl_liaocheng.pyÚfetchr      sN   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò ÜÐ% a SÐ)Ô*Üûðús   ‚/2 ²	A»AÁAc                 ór  — g }t        j                  d| t         j                  «      D �]  }|j                  d«      }t        j                  d|«      }|st        j                  d|«      }t        j                  d|«      }|sŒ\|j                  d«      j                  «       }t        |j                  «       «      dk\  r|j                  d«      j                  «       nd}|sŒ»t        |«      dkD  sŒÊ|j                  ||j                  d	«      r|nt        |z   |r|j                  d«      ndd
œ«       �Œ |S )u)   æ��å�–åˆ—è¡¨æ�¡ç›® (url, title, pub_date)z<div class="item">(.*?)</div>é   z"href="([^"]+)"[^>]*title="([^"]*)"zhref="([^"]+)"[^>]*>([^<]+)z-<span class="time">(\d{4}-\d{2}-\d{2})</span>é   Ú r   Úhttp)Útitler   Úpub_date)ÚreÚfinditerÚDOTALLÚgroupÚsearchÚstripÚlenÚgroupsÚappendÚ
startswithÚBASE_URL)ÚhtmlÚitemsÚmÚitemÚlinkÚdateÚhrefr   s           r   Ú
parse_listr3   (   sù   € à€EÜ�[‰[Ð9¸4ÄÇÁÓKó ˆØ�w‰w�q‹zˆÜ�y‰yÐ>ÀÓEˆÙÜ—9‘9Ð;¸TÓBˆDÜ�y‰yÐIÈ4ÓPˆÚØ—:‘:˜a“=×&Ñ&Ó(ˆDÜ-0°·±³Ó-?À1Ò-D�D—J‘J˜q“M×'Ñ'Ô)È"ˆEÚœ˜U› a›Ø—‘Ø"Ø#'§?¡?°6Ô#:™4ÄÈ4ÁÙ15 §
¡
¨1¤¸2ñö ðð €Ló    c                 óÖ  — t        | «      }|sddddœS d}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|sLt        j                  d|«      }|r4t        j                  dd|j	                  d«      «      j                  «       }d}t        j                  d|t        j                  «      }|r|j	                  d«      dd	 }|s)t        j                  d
|«      }|r|j	                  d«      }d}t        j                  d|t        j                  «      }|r|j	                  d«      }|r—t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|«      }|j                  «       }|||dœS )u(   èŽ·å�–è¯¦æƒ…é¡µ title, content, pub_dater   )r   Úcontentr    z3<meta[^>]*name="ArticleTitle"[^>]*content="([^"]*)"r   z<title>([^<]+)u
   [-_â€”|].*z-<meta[^>]*name="PubDate"[^>]*content="([^"]+)Né
   z(\u65f6\u95f4\uff1a\s*(\d{4}-\d{2}-\d{2})z%class="content-text"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z style="[^"]*")r   r!   r%   ÚIr$   r&   Úsubr#   )r   r,   r   r.   r    r6   s         r   Úfetch_detailr;   <   s‹  € ä�‹:€DÙØ¨¸Ñ;Ð;ð €EÜ
�	‰	ÐHÈ$ÔPR×PTÑPTÓU€AÙØ—‘˜“
× Ñ Ó"ˆÙÜ�I‰IÐ'¨Ó.ˆÙÜ—F‘F˜=¨"¨a¯g©g°a«jÓ9×?Ñ?ÓAˆEð €HÜ
�	‰	ÐBÀDÌ"Ï$É$ÓO€AÙØ—7‘7˜1“:˜c˜r�?ˆÙÜ�I‰IÐAÀ4ÓHˆÙØ—w‘w˜q“zˆHð €GÜ
�	‰	Ð:¸DÄ"Ç)Á)ÓL€AÙØ—'‘'˜!“*ˆÙÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆÜ—&‘&Ð*¨B°Ó8ˆØ—-‘-“/ˆà w¸HÑEÐEr4   c                 ó„  — | st        d«       yddl}|j                  t        «      }|j	                  d«       |j	                  d«       d\  }}| D ]†  }	 |j	                  dt
        |j                  d«      xs d	dd
 |j                  dd	«      |j                  dd	«      |j                  d«      xs d	dd d	df«       |j                  dkD  r|dz  }n|dz  }Œˆ |j	                  dt
        f«       |j                  «        |j                  «        t        d|› d|› d�«       ||fS # t        $ r}|dz  }Y d}~Œéd}~ww xY w)u   æ‰¹é‡�å†™å…¥ search.dbu     âŽ­ æ— æ•°æ�®©r   r   r   NzPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALzwINSERT OR IGNORE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, tags) VALUES (?,?,?,?,?,?,?)r   r   iô  r   r6   r    r7   u   çŽ¯ä¿�è¦�é—»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   , è·³è¿‡u   , FTSå·²å�Œæ­¥)r   Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEr   Útotal_changesr   ÚcommitÚclose)r-   r>   ÚdbÚokÚfailÚitr   s          r   Úto_dbrI   c   sT  € áÜÐ+Ô,ØÛØ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð)ô Ø—V‘V˜G“_Ò*¨¨D¨SÐ1Ø—F‘F˜5 "Ó%Ø—F‘F˜9 bÓ)Ø—V‘V˜JÓ'Ò-¨2¨s°Ð3ØØ.ðô	ð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð'ð. ‡J�Jð	\ô 
ˆô	ð ‡I�I„KØ‡H�H„JÜ	Ð3°B°4°~ÀdÀVÐKbÐ
cÔdØˆtˆ8€Oøô ò 	Ø�A‰I�Dûð	ús   ÁBD'Ä'	D?Ä0D:Ä:D?c                 óü  — g }t        «       }t        dt        dz   «      D ]Þ  }|dkD  rt        › d|› �nt        }t	        |«      }|sŒ't        |«      }|st        d|› d�«        nœd}|D ]F  }|d   |v rŒ|j                  |d   «       |d   r|d   t        k  rŒ1|j                  |«       |dz  }ŒH |d   j                  dd«      }	|d	   j                  dd«      }
t        d
|› dt        |«      › d|	› d|
› d|› �
«       Œà | r|dd }t        dt        |«      › d�«       t        dt        |«      › d�«       |syg }t        |d«      D ]   \  }}t        |d   «      }|d   xs |d   |d   |d   |d   xs |j                  dd«      dœ}|j                  |«       t        d|› dt        |«      › d|d   › d|d   dd › dt        |d   «      › d �«       t        j                  d!«       Œ¢ t!        |«      \  }}||fS )"u   å…¨é‡�çˆ¬å�–r   z?page=u	     â„¹ ç¬¬u   é¡µæ— æ•°æ�®ï¼Œåˆ°è¾¾æœ«é¡µr   r   r    ú?éÿÿÿÿu
     ðŸ“„ ç¬¬u   é¡µ: u   æ�¡ (z ~ u	   ), æ–°å¢žNr   u"     ðŸ§ª æµ‹è¯•æ¨¡å¼�: å�ªå¤„ç�†å‰� u    æ�¡u   
  ðŸ“Š åˆ—è¡¨æ±‡æ€»: u    æ�¡ï¼ˆè¿‘3å¹´ï¼‰r=   r   r6   r   )r   r   r6   r    z  [ú/ú] ú é(   z... (zB)g333333Ó?)ÚsetÚrangeÚ	MAX_PAGESÚLIST_URLr   r3   r   ÚaddÚCUTOFFr)   r   r'   Ú	enumerater;   ÚtimeÚsleeprI   )ÚtestÚ	all_itemsÚ	seen_urlsÚpager   r,   r-   Únewr/   Ú
first_dateÚ	last_dateÚresultsÚiÚdetailÚentryrF   rG   s                    r   Úcrawlre   �   sg  € à€IÜ“€Iä�aœ Q™Ó'ò vˆØ+/°!ª8”�
˜&  Ñ'¼ˆÜ�S‹zˆÙØÜ˜4Ó ˆÙÜ�O D 6Ð)_Ð`ÔaÙàˆØò 	ˆDØ�E‰{˜iÑ'ØØ�M‰M˜$˜u™+Ô&Ø�JÒ D¨Ñ$4´vÒ$=ØØ×Ñ˜TÔ"Ø�1‰H‰Cð	ð ˜1‘X—\‘\ *¨cÓ2ˆ
Ø˜"‘I—M‘M *¨cÓ2ˆ	ÜÐ# D 6¨´#°e³*°¸XÀjÀ\ÐQTÐU^ÐT_Ð_nÐorÐnsÐtÕuð+vñ. Ø˜b˜q�Mˆ	ÜÐPÔQTÐU^ÓQ_ÐP`Ð`gÐhÔiä	Ð5´c¸)³nÐ5EÐEeÐ
fÔgÙØð €GÜ˜Y¨Ó*ò 
‰ˆˆ4Ü˜d 5™kÓ*ˆà˜G‘_Ò5¨¨W©Ø˜‘;Ø˜iÑ(Ø˜zÑ*ÒF¨d¯h©h°zÀ2Ó.Fñ	
ˆð 	�‰�uÔÜ��A�3�aœ˜I›Ð' r¨%°
Ñ*;Ð)<¸A¸eÀG¹nÈSÈbÐ>QÐ=RÐRWÔX[Ð\bÐclÑ\mÓXnÐWoÐoqÐrÔsÜ�
‰
�3�ð
ô �W‹~�H€BˆØˆtˆ8€Or4   Ú__main__z--testu   
ðŸ“¡ [rN   u   æµ‹è¯•æ¨¡å¼�u   å…¨é‡�u    (æœ€å¤šu   é¡µ, è¿‘3å¹´))rZ   u     â�± è€—æ—¶: z.1fÚsu     âœ… æ–°å¢ž: u     â�Œ è·³è¿‡: )F)$Ú__doc__r!   ÚsysÚosrX   r   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrA   r+   rT   Úgetenvr   rS   ÚnowÚutcÚstrftimerV   r   r   r3   r;   rI   re   Ú__name__ÚargvrZ   r   Út0rF   rG   © r4   r   ú<module>rw      s\  ðñ÷ × ß 2Ñ 2ß Û 	Ø €× Ñ ˜×+Ñ+×BÑBÔ Cð 5€	Ø,€ØA€ØˆB�I‰I�kÐ#4Ó5€	Ø€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€Øð  Nð  O€òòò(%FòN*óX3ðj ˆzÒØ�s—x‘xÐ€DÙ	ˆN˜9˜+ RÁdÑ(BÐP^Ð'_Ð_mÐnwÐmxð  yOð  Pô  QØ	ˆ�‰‹€BÙ˜$Ô�H€BˆÙ	Ð# I D§I¡I£K°¡N°3Ð#7°qÐ
9Ô:Ù	Ð# B 4Ð'>¸t¸fÐ
EÕFð r4   