Ë
    ¸¬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mZmZ d dlm	Z	m
Z
 d dlmZmZ dZedz   ZdZ e j"                  dd	«      Zd
Z ej(                  «        ed¬«      z
  j+                  d«      Zd„ Zdd„Zefd„Zd„ Zedk(  r e«        yy)é    N)ÚdatetimeÚ	timedelta)ÚRequestÚurlopen)Ú	HTTPErrorÚURLErrorzhttp://www.wfbinhai.gov.cnz/els-service/article/{page}/15Ú1839936166166663168Ú	SEARCH_DBz/root/search.dbu   æ½�å�Šæ»¨æµ·-å…¬å‘Šå…¬ç¤ºiG  )Údaysz%Y-%m-%dc                 ó|  — t        j                  t        gddœ«      j                  «       }t	        t
        j                  | ¬«      |ddi¬«      }	 t        |d¬«      5 }t        j                  |j                  «       «      cd d d «       S # 1 sw Y   y xY w# t        $ r}t        d	| › d
|› �«       Y d }~y d }~ww xY w)NÚup)ÚcatasÚorder)ÚpagezContent-Typezapplication/json;charset=utf-8)ÚdataÚheadersé   ©Útimeoutz  API error page ú: )ÚjsonÚdumpsÚCATAIDÚencoder   ÚAPI_URLÚformatr   ÚloadsÚreadÚ	ExceptionÚprint)r   r   ÚreqÚrespÚes        ú#/root/gov_crawler/crawl_wfbinhai.pyÚ	fetch_apir%      s£   € Ü�:‰:¤ °4Ñ8Ó9×@Ñ@ÓB€DÜ
”'—.‘. d�.Ó+°$Ø)Ð+KÐLôN€CðÜ�S "Ô%ð 	+¨Ü—:‘:˜dŸi™i›kÓ*÷	+÷ 	+ò 	+ûäò ÜÐ! $  r¨!¨Ð-Ô.Üûðús6   ÁB Á#BÂ	B ÂBÂB ÂB Â	B;Â B6Â6B;c                 ó  — t        |«      D ]<  }	 t        | d¬«      5 }|j                  «       j                  dd¬«      cd d d «       c S  y# 1 sw Y   nxY wŒM# t        $ r'}||dz
  k  rt        j                  d«       Y d }~Œxd }~ww xY w)	Nr   r   zutf-8Úreplace)Úerrorsé   é   Ú )Úranger   r   Údecoder   ÚtimeÚsleep)ÚurlÚretriesÚir"   r#   s        r$   Úfetchr3      s�   € Ü�7‹^ò ˆð	Ü˜ bÔ)ð E¨TØ—y‘y“{×)Ñ)¨'¸)Ð)ÓD÷Eó Eðð ÷Eð Eúð Eøäò 	Ø�7˜Q‘;ŠÜ—
‘
˜1”ÿøð	ús-   �A�!A¾	AÁA	ÁAÁ	B	Á"BÂB	c                 óÄ  ‡— dx}}t        j                  d| «      }|r|j                  d«      j                  «       }t        j                  d| «      }|r"|j                  d«      j                  «       d d }d}t        j                  d| t         j                  «      }|r|j                  d«      j                  «       }|rˆfd„}t        j
                  d||«      }|||fS )	Nr+   z/<meta name="ArticleTitle"[^>]*content="([^"]*)"r)   z*<meta name="PubDate"[^>]*content="([^"]*)"é
   z$<div[^>]*id="ozoom"[^>]*>(.*?)</div>c                 ó¸  •— | j                  d«      }t        j                  d|«      }|r¯|j                  d«      }|j                  d«      s"|j                  d«      s|j                  d«      r|S |j                  d«      s&‰j	                  d«      dz   |j                  d«      z   n‰j	                  d«      |z   }|j                  d|z   d	z   d|z   d	z   «      }|S )
Nr   zsrc="([^"]*)"r)   zhttp://zhttps://zdata:ú/zsrc="ú")ÚgroupÚreÚsearchÚ
startswithÚrstripÚlstripr'   )ÚmÚtagÚsÚsrcÚabÚbase_urls        €r$   Ú_fix_srcz extract_detail.<locals>._fix_src/   sÁ   ø€ Ø—'‘'˜!“*ˆCÜ—	‘	Ð*¨CÓ0ˆAÙØ—g‘g˜a“j�Ø—>‘> )Ô,°·±¸zÔ0JÈcÏnÉnÐ]dÔNeØ�JØKNÏ>É>ÐZ]ÔK^�h—o‘o cÓ*¨SÑ0°3·:±:¸c³?ÒBÐem×etÑetÐuxÓeyÐ|Ñe�Ø—k‘k '¨C¡-°#Ñ"5°wÀ±|ÀcÑ7IÓJ�ØˆJó    z
<img[^>]*>)r:   r;   r9   ÚstripÚDOTALLÚsub)ÚhtmlrD   ÚtitleÚdater?   ÚcontentrE   s    `     r$   Úextract_detailrN   %   sÃ   ø€ ØÐ€EˆDÜ
�	‰	ÐDÀdÓK€AÙ�!—'‘'˜!“*×"Ñ"Ó$ˆ%Ü
�	‰	Ð?ÀÓF€AÙ�—‘˜“×!Ñ!Ó# C RÐ(ˆ$Ø€GÜ
�	‰	Ð9¸4ÄÇÁÓK€AÙ�A—G‘G˜A“J×$Ñ$Ó&ˆ'Ùô		ô —&‘&˜¨°'Ó:ˆØ�$˜ÐÐrF   c                  óš  — t        d«      } | r| j                  d«      st        d«       y | d   d   }| d   d   }t        d|› d|› �«       t        j                  t
        «      }d	}d	}t        d|dz   «      D �]Å  }t        |«      } | sŒ| d   d
   }|s �nªd}|D ]  }	|	d   d d t        k\  sŒd} n |rt        d|› dt        › d�«        �ns|D �]4  }	|	d   d d }
|
t        k  rŒ|	d   }	 t        |«      }t        › d|	d   › d|	d   › d|	d   › d�}|j                  d|f«      j                  «       }|r|dz  }Œkt        |«      }|st        d|	d   d d › d�«       |dz  }Œ“t!        |«      \  }}}|s|st        d|	d   d d › d�«       |dz  }ŒÁ|s|	d   }|s|
}|sd |› d!�}t        j                  d"d|«      d d# j#                  «       }	 |j                  d$||||||t$        |f«       |dz  }t)        j*                  d'«       �Œ7 |j-                  «        |t/        |«      z  }t        d|› d|› d&|› d(|› d)�	«       �ŒÈ |j1                  «        t        d*«       y # t        $ r: t        j                  dd|«      }|st        d|› d�«       Y �ŒÁt        |«      }Y �Œ¨w xY w# t&        $ r}t        d%|	d   › d&|› �«       Y d }~ŒÕd }~ww xY w)+Nr)   ÚsuccesszFailed to fetch APIr   ÚelementsTotalÚ
totalPageszTotal articles: z	, pages: r   ÚcontentsTÚfwdater5   Fz  Page z: all older than z
, stoppingÚxxidz
^[a-zA-Z]+r+   z  Skip z: non-numeric idr7   ÚdqÚdwidz.htmlz SELECT 1 FROM gov_raw WHERE id=?Úsubjecté   z... (fetch failed)z... (404/content empty)z<p>z</p>z<[^>]+>éÈ   z‹INSERT OR REPLACE INTO gov_raw (id, title, content, publish_date, source_url, page_url, site_name, summary) VALUES (?, ?, ?, ?, ?, ?, ?, ?)z  DB Error r   gš™™™™™É?z inserted, z
 processedz,
Done! {total_inserted} new records inserted)r%   Úgetr    Úsqlite3ÚconnectÚDB_PATHr,   ÚCUTOFFÚintÚ
ValueErrorr:   rI   ÚBASEÚexecuteÚfetchoner3   rN   rG   Ú	SITE_NAMEr   r.   r/   ÚcommitÚlenÚclose)ÚresultÚtotalÚtotal_pagesÚdbÚtotal_insertedÚ	processedr   ÚarticlesÚall_oldÚarT   Úraw_idÚ	record_idÚcleanÚ
detail_urlÚexistsrJ   rK   Úpub_daterM   Úsummaryr#   s                         r$   Úmainry   <   se  € Ü�q‹\€FÙ˜Ÿ™ IÔ.ÜÐ#Ô$ØØ�6‰N˜?Ñ+€EØ˜‘. Ñ.€KÜ	Ð˜U˜G 9¨[¨MÐ
:Ô;ä	�‰œÓ	!€BØ€NØ€Iä�a˜ q™Ó)ó H`ˆÜ˜4“ˆÙØØ˜&‘> *Ñ-ˆÙÚàˆØò 	ˆAØ�‰{˜3˜BÐ¤6Ó)Ø�Ùð	ñ Ü�G˜D˜6Ð!2´6°(¸*ÐEÔFÚàó 3	ˆAØ�x‘[  "Ð%ˆFØœŠØð �v‘YˆFð'Ü ›K�	ô !˜6  1 T¡7 )¨1¨Q¨v©Y¨K°q¸¸6¹¸À5ÐIˆJØ—Z‘ZÐ BÀYÀLÓQ×ZÑZÓ\ˆFÙØ˜Q‘�	Øä˜Ó$ˆDÙÜ˜  )¡¨S¨bÐ 1Ð2Ð2DÐEÔFØ˜Q‘�	Øä'5°dÓ';Ñ$ˆE�8˜WÙ¡Ü˜  )¡¨S¨bÐ 1Ð2Ð2IÐJÔKØ˜Q‘�	ØÙØ˜)™�ÙØ!�ÙØ ˜w dÐ+�ä—f‘f˜Z¨¨WÓ5°d°sÐ;×AÑAÓCˆGð6Ø—
‘
ð bØ  w°¸*ÀjÔR[Ð]dÐeôð  !Ñ#�ô �J‰J�sŽOðg3	ðj 	�	‰	ŒØ”S˜“]Ñ"ˆ	Ü�˜�v˜Q˜{˜m¨2¨nÐ-=¸[ÈÈÐS]Ð^Ö_ðQH`ðT ‡H�H„JÜ	Ð
9Õ:øôc ò 'äŸ™˜}¨b°&Ó9�ÙÜ˜G F 8Ð+;Ð<Ô=ÚÜ ›J“	ð'ûôN ò 6Ü˜ A f¡I ;¨b°°Ð4×5Ñ5ûð6ús0   Ã,IÇ#J#É1J ÊJ ÊJ Ê#	K
Ê,KËK
Ú__main__)é   )ÚosÚsysr:   r   r.   r\   r   r   Úurllib.requestr   r   Úurllib.errorr   r   rb   r   r   Úgetenvr^   re   ÚnowÚstrftimer_   r%   r3   rN   ry   Ú__name__© rF   r$   ú<module>r…      s›   ðã 	Ø <ß #× #Ó #ß (ß +ß ,à#€Ø
Ð1Ñ
1€Ø	€Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø'€	Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€ò	óð #'ó  ò.X;ðr ˆzÒÙ…Fð rF   