Ë
    ¸¬ujÙ  ã            	       ó�  — 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 ej                  ej                  j                  «       d dl	m
Z
  ej                  ej                  d¬«        ej                  e«      Z e j                   dd«      ZdZdZed	z   Zed
z   ZdZdddddddddœZdeddœZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)Údatez'%(asctime)s [%(levelname)s] %(message)s)ÚlevelÚformatÚ	SEARCH_DBz/root/search.dbu   ä»ªå¾�åŒ–å·¥å›­åŒº-é€šçŸ¥å…¬å‘Šzhttps://www.yizheng.gov.cnz9/zfxxgk/yqxzbmxxgkml/yqxz/hxgyyq/fdzdgknr/tzgg/index.htmlz7/api-gateway/jpaas-publish-server/front/page/build/unitz
2023-06-18ÚbulidstaticÚy6CgeNe9yhPDWezyQsTp8ÚI1p2W2qXfR0Sxtl3xljQjÚcolumnu   åˆ—è¡¨ä¸€listÚ8sF38ay0nwtQcANIwKF8zÚ15Ú1)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚpageIdÚpageSizeÚpageNozBMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36z!application/json, text/plain, */*)ú
User-AgentÚRefererÚAcceptc                  óì   — 	 t        j                  t        t        t        dd¬«      } | j                  «        | j                  «       S # t        $ r"}t        j                  d|› �«       Y d}~yd}~ww xY w)z(Fetch list page from API using requests.Fé   )ÚparamsÚheadersÚverifyÚtimeoutzAPI error: N)
ÚrequestsÚgetÚAPI_URLÚ
API_PARAMSÚHEADERSÚraise_for_statusÚjsonÚ	ExceptionÚlogÚwarning)ÚrespÚes     ú)/root/gov_crawler/crawl_yizheng_hxgyyq.pyÚ
fetch_jsonr,   '   s]   € ðÜ�|‰|œG¬JÄÐPUÐ_aÔbˆØ×ÑÔØ�y‰y‹{ÐøÜò Ü�‰�k ! Ð%Ô&Üûðús   ‚AA Á	A3ÁA.Á.A3c                 óü  — g }t        j                  d| t         j                  «      D ]Ñ  }t        j                  d|«      }t        j                  d|«      }|sŒ2|j	                  d«      j                  d«      rt        |j	                  d«      z   n|j	                  d«      }|j	                  d«      j                  «       }|r|j	                  d«      j                  «       nd}|j                  |||dœ«       ŒÓ |S )	z/Extract title, date, detail URL from list HTML.z<li class="clearfix">(.*?)</li>z"<a href="([^"]+)"[^>]*>([^<]+)</a>z<span>([^<]+)</span>é   ú/é   Ú )ÚtitleÚurlÚpub_date)	ÚreÚfindallÚDOTALLÚsearchÚgroupÚ
startswithÚBASEÚstripÚappend)ÚhtmlÚitemsÚrowÚmÚdr3   r2   r4   s           r+   Ú
parse_listrC   1   sÊ   € à€EÜ�z‰zÐ<¸dÄBÇIÁIÓNò MˆÜ�I‰IÐ;¸SÓAˆÜ�I‰IÐ-¨sÓ3ˆÚØ'(§w¡w¨q£z×'<Ñ'<¸SÔ'A”$˜Ÿ™ ›Ò#ÀqÇwÁwÈqÃzˆCØ—G‘G˜A“J×$Ñ$Ó&ˆEÙ-.�q—w‘w˜q“z×'Ñ'Ô)°BˆHØ�L‰L 5°À(ÑKÕLðMð €Ló    c                 ó  — 	 t        j                  | dt        d   idd¬«      }|j                  «        |j                  }t        j                  d|t
        j                  «      }|r!|j                  d«      j                  «       }|S t        j                  d|t
        j                  «      }|r|j                  d«      j                  «       nd}|S # t        $ r%}t        j                  d	| › d
|› �«       Y d}~yd}~ww xY w)z<Fetch detail page, extract HTML content from bt-content div.r   Fr   )r   r   r   uP   <div class="bt-content[^"]* zoom[^"]* clearfix[^>]*>(.*?)</div>\s*<!--/æ­£æ–‡-->r.   z"class="bt-content[^>]*>(.*?)</div>r1   zDetail error z: N)r   r    r#   r$   Útextr5   r8   r7   r9   r<   r&   r'   r(   )r3   r)   r>   rA   Úcontentr*   s         r+   Úfetch_detailrH   >   sÛ   € ðÜ�|‰|˜C¨,¼ÀÑ8MÐ)NÐW\ÐfhÔiˆØ×ÑÔØ�y‰yˆä�I‰IÐiÐkoÔqs×qzÑqzÓ{ˆÙØ—g‘g˜a“j×&Ñ&Ó(ˆGð
 ˆô —	‘	Ð?ÀÄrÇyÁyÓQˆAÙ,-�a—g‘g˜a“j×&Ñ&Ô(°2ˆGØˆøÜò Ü�‰�m C 5¨¨1¨#Ð.Ô/Üûðús   ‚BC ÂA	C Ã	D ÃC;Ã;D c                  óÊ  — t         j                  d«       t        j                  t        «      } t        «       }|st         j                  d«       y |d   d   }t        |«      }t         j                  dt        |«      › d�«       d}d}|D �])  }|d   r|d   t        k  rŒ| j                  d	|d
   f«      j                  «       r|dz  }Œ@t         j                  d|d   d d › d�«       t        |d
   «      }d|d   › d|d   › �}| j                  dt        t        |d
   |d   |d   xs" t        j                   «       j#                  «       ||xs |f«       | j                  d«      j                  «       d   }	|	r)|dz  }| j                  d|	|d   t        |xs |d d f«       | j%                  «        �Œ, | j'                  «        t         j                  d|› d|› �«       y )Nu!   ä»ªå¾�åŒ–å·¥å›­åŒº - é€šçŸ¥å…¬å‘ŠzAPI failed!Údatar>   u
   APIè¿”å›ž u    æ�¡r   r4   z(SELECT 1 FROM gov_raw WHERE page_url = ?r3   r.   u
     æŠ“å�–: r2   r   z...u   é¡¹ç›®å��ç§°: u   
å�‘å¸ƒæ—¶é—´: uÀ   INSERT OR IGNORE INTO gov_raw 
            (site_name, source_url, page_url, title, publish_date, summary, content, status, category)
            VALUES (?,?,?,?,?,?,?,'normal','å›­åŒºå…¬å‘Š')zSELECT last_insert_rowid()zdINSERT OR IGNORE INTO gov_search
                (rowid, title, site_name, summary) VALUES (?,?,?,?)i,  zDone! New: z, Skip: )r'   ÚinfoÚsqlite3Úconnectr   r,   ÚerrorrC   ÚlenÚCUTOFFÚexecuteÚfetchonerH   Ú	SITE_NAMEÚ	LIST_PAGEr   ÚtodayÚ	isoformatÚcommitÚclose)
ÚdbrJ   r>   r?   ÚnewÚskipÚitemrG   ÚsummaryÚrowids
             r+   Úmainr_   Q   sè  € Ü‡H�HÐ0Ô2Ü	�‰œÓ	#€Bä‹<€DÙÜ�	‰	�-Ô Øà�‰<˜Ñ€DÜ�tÓ€EÜ‡H�Hˆzœ#˜e›*˜ TÐ*Ô+à
€CØ€Dàó ˆØ�
Ò  ZÑ 0´6Ò 9Øð �:‰:Ð@À4ÈÁ;À.ÓQ×ZÑZÔ\Ø�A‰IˆDØä�‰�:˜d 7™m¨C¨RÐ0Ð1°Ð5Ô6Ü˜t E™{Ó+ˆà" 4¨¡= /Ð1AÀ$ÀzÑBRÐASÐTˆà
�
‰
ð >ô œ	 4¨¡;°°W±Ø�*ÑÒ9¤§¡£×!7Ñ!7Ó!9¸7ÀGÒDVÈwðXô	Yð
 —
‘
Ð7Ó8×AÑAÓCÀAÑFˆÙØ�1‰HˆCà�J‰Jð Gà˜˜W™¤y°7Ò3E¸gÀtÈÐ2LÐMôOð 	�	‰	Žð5ð8 ‡H�H„JÜ‡H�Hˆ{˜3˜%˜x¨ vÐ.Õ/rD   Ú__main__)Úosr5   ÚloggingrL   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningÚdatetimer   ÚbasicConfigÚINFOÚ	getLoggerÚ__name__r'   Úgetenvr   rS   r;   rT   r!   rP   r"   r#   r,   rC   rH   r_   © rD   r+   ú<module>rn      sø   ðã 	ð÷ *× )Ó )Û Ø €× Ñ ˜×+Ñ+×BÑBÔ CÝ à €× Ñ ˜'Ÿ,™,Ð/XÕ YØ€g×Ñ˜Ó!€àˆB�I‰I�kÐ#4Ó5€	Ø-€	Ø#€ØÐNÑN€	Ø
ÐJÑ
J€Ø	€ð Ø$Ø'ØØØ%ØØñ	€
ð WØØ1ñ€òòòò&-0ð^ ˆzÒÙ…Fð rD   