Ë
    ¸¬ujå  ã                   óÌ  — d Z ddlZddlZddlZddlZddlmZ ddlmZmZ ddl	Z	 ej                  dd«      ZdZdZd	Zd
diZ ej                   «        ed¬«      z
  j#                  d«      Z eej(                  «      dk\  Zer@ eej(                  d   «      Z ej                   «        ee¬«      z
  j#                  d«      ZneZd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uA   crawl_yanyuan.py â€” ç›�æº�åŽ¿äººæ°‘æ”¿åºœ é€šçŸ¥å…¬å‘Š (TRS WCM)é    N)ÚBeautifulSoup)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/mnt/data/search.dbu   ç›�æº�åŽ¿-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šz5http://www.yanyuan.gov.cn/zfxxgk/zfxxgknr/tzgg_31066/z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36iG  )Údaysz%Y-%m-%dé   é   c                 ó°   — 	 t        j                  | t        d¬«      }d|_        |j                  S # t
        $ r}t        d| ›d|›�«       Y d }~yd }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8z  [ERROR] fetch z: Ú )ÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprint)ÚurlÚrÚes      ú"/root/gov_crawler/crawl_yanyuan.pyÚfetchr      sI   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆøÜò Ýª#©qÐ1Ô2Üûðús   ‚.1 ±	AºAÁAc                 ó�   — t        | «      |k  r| S | d | }d|v r,|j                  d«      }|j                  d«      }||kD  r|d | }|S )Nú<ú>)ÚlenÚrfind)r   Úmax_lenÚ	truncatedÚ	last_openÚ
last_closes        r   Úsafe_summaryr$      s\   € Ü
ˆ4ƒy�GÒØˆØ�X�g�€IØ
ˆiÑØ—O‘O CÓ(ˆ	Ø—_‘_ SÓ)ˆ
Ø�zÒ!Ø! * 9Ð-ˆIØÐó    c                 ó~  ‡— t        j                  d| t         j                  «      }|sy|j                  d«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|«      }t        j                  d	d
|«      }g Šˆfd„}t        j                  d||t         j                  ¬«      }t        j                  dd|«      }t        j                  dd
|«      }‰D ]  \  }}|j                  ||«      }Œ |j                  «       S )z!Extract content from detail page.zF<div[^>]*class="[^"]*TRS_UEDITOR[^"]*"[^>]*>(.*?)</div>\s*(?:</div>|$)r   r	   z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z	<br\s*/?>ú
z</p>z

c                 óh   •— dt        ‰«      z  }‰j                  || j                  d«      f«       |S )Nz__TABLE_%d__r   )r   ÚappendÚgroup)ÚmÚphÚtable_placeholderss     €r   Ú
save_tablez#extract_content.<locals>.save_table6   s3   ø€ ØœcÐ"4Ó5Ñ5ˆØ×!Ñ! 2 q§w¡w¨q£zÐ"2Ô3Øˆ	r%   z<table[^>]*>.*?</table>z<[^>]+>z\n{3,})ÚreÚsearchÚDOTALLr+   ÚsubÚreplaceÚstrip)Úhtmlr,   Útxtr/   r-   Úhtr.   s         @r   Úextract_contentr9   *   s   ø€ ä
�	‰	Ð[Ð]aÔce×clÑclÓm€AÙØØ
�'‰'�!‹*€CÜ
�&‰&Ð-¨r°3¼b¿i¹iÔ
H€CÜ
�&‰&Ð+¨R°¼B¿I¹IÔ
F€CÜ
�&‰&�˜t SÓ
)€CÜ
�&‰&�˜& #Ó
&€CàÐôô �&‰&Ð+¨Z¸ÄBÇIÁIÔ
N€CÜ
�&‰&�˜R Ó
%€CÜ
�&‰&�˜F CÓ
(€CØ$ò "‰ˆˆBØ�k‰k˜"˜bÓ!‰ð"à�9‰9‹;Ðr%   c                 óú  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]Á  }|j                  d«      }|j                  d«      }|sŒ(|sŒ+|j                  dd	«      }|j	                  d
«      rt
        |dd z   }n)|j	                  d«      st
        |j                  d«      z   }|j                  d¬«      }|j                  d¬«      }	|sŒ«|	sŒ®|j                  |||	f«       ŒÃ |S )z*Extract (url, title, date) from list page.ÚlxmlÚulÚlist)Úclass_ÚliÚaÚspanÚhrefr   z./r   NÚhttpú/T)r5   )	r   ÚfindÚfind_allr   Ú
startswithÚBASE_URLÚlstripÚget_textr*   )
r6   ÚitemsÚsoupr<   r?   r@   rA   rB   ÚtitleÚdates
             r   Úget_list_itemsrO   A   sî   € à€EÜ˜˜vÓ&€DØ	�‰�4 ˆÓ	'€BÙØˆØ�k‰k˜$Óò 2ˆØ�G‰G�C‹LˆØ�w‰w�v‹ˆÚ’Ø—5‘5˜ Ó$ˆDØ�‰˜tÔ$Ü $ q r (Ñ*‘Ø—_‘_ VÔ,Ü $§+¡+¨cÓ"2Ñ2�Ø—J‘J T�JÓ*ˆEØ—=‘= t�=Ó,ˆDÚšØ—‘˜d E¨4Ð0Õ1ð2ð €Lr%   c                 óÌ   — t        j                  d| «      }|rt        |j                  d«      «      S t        j                  d| «      }|rt        |j                  d«      «      S y)z=Extract total pages from createPageHTML call or countPage JS.zJcreatePageHTML\((\d+),\s*\d+,\s*['\"]([^'\"]+)['\"],\s*['\"]([^'\"]+)['\"]r	   zvar countPage\s*=\s*(\d+))r0   r1   Úintr+   )r6   r,   s     r   Úget_total_pagesrR   W   sT   € ô 	�	‰	Ð_ÐaeÓf€AÙÜ�1—7‘7˜1“:‹Ðä
�	‰	Ð.°Ó5€AÙÜ�1—7‘7˜1“:‹ÐØr%   c                  ó|  — t        j                  t        «      } | j                  d«       | j                  d«       | j	                  «       }d}d}t        t        «      }|st        d«       y t        |«      }t        rdnd}t        dt        ||t        fz  «       t        j                  d|«      }|r#|j                  d	«      }|j                  d
«      }	nd}d}	t        |«      D �].  }
|
dk(  rt        }ndt        ||
|	fz  }|
dkD  rt        |«      }|st        d|
d	z   z  «       ŒAt!        |«      }|st        d|
d	z   z  «       Œ`d}|D ]£  \  }}}|t        k  rŒ|j                  d|f«       |j#                  «       r|d	z  }Œ:t        |«      }|s|d	z  }ŒMt%        |«      }|rt'        |«      dk  r|d	z  }Œnt)        |«      }|j                  dt        t*        |||||f«       |d	z  }|d	z  }Œ¥ | j-                  «        t        d|
d	z   |||fz  «       �Œ1 | j/                  «        t        dt        ||fz  «       y )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=10000r   z[ERROR] Cannot fetch page 1u   å¢žé‡�u   å…¨é‡�u   [%s] å…± %d é¡µ (%s, cutoff=%s)z4createPageHTML\(\d+,\s*\d+,\s*'([^']+)',\s*'([^']+)'r	   r   Úindexr6   z
%s%s_%d.%su     [SKIP] ç¬¬%dé¡µ æ— æ³•èŽ·å�–u     [EMPTY] ç¬¬%dé¡µ æ— æ•°æ�®z)SELECT id FROM gov_raw WHERE page_url = ?é   z�INSERT INTO gov_raw (site_name, category, title, page_url, content, summary, publish_date)
                         VALUES (?, ?, ?, ?, ?, ?, ?)u     ç¬¬%d/%dé¡µ: +%d (ç´¯è®¡%d)u"   
[%s] å®Œæˆ�: æ–°å¢ž %d, è·³è¿‡ %d)Úsqlite3Úconnectr   ÚexecuteÚcursorr   rH   r   rR   Úis_incrementalÚ	SITE_NAMEÚcutoffr0   r1   r+   ÚrangerO   Úfetchoner9   r   r$   ÚCATEGORYÚcommitÚclose)ÚconnÚcÚ	total_newÚ
total_skipr6   Útotal_pagesÚmoder,   Úpage_prefixÚpage_extÚpager   rK   Úpage_newrB   rM   Údate_strÚdetail_htmlÚcontentÚsummarys                       r   Úmainrp   c   sM  € Ü�?‰?œ9Ó%€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ø�‰‹€AØ€IØ€Jä”‹?€DÙÜÐ+Ô,ØÜ! $Ó'€KÝ%‰8¨8€DÜ	Ð
+¬y¸+ÀtÌVÐ.TÑ
TÔUô 	�	‰	ÐIÈ4ÓP€AÙØ—g‘g˜a“jˆØ—7‘7˜1“:‰àˆØˆä�kÓ"ó .\ˆØ�1Š9Ü‰Cà¤(¨K¸¸xÐ!HÑHˆCà�!Š8Ü˜“:ˆDÙÜÐ6¸$¸q¹&ÑAÔBØä˜tÓ$ˆÙÜÐ0°D¸±FÑ;Ô<ØàˆØ%*ò 	Ñ!ˆD�%˜Øœ&Ò Øà�I‰IÐAÀDÀ7ÔKØ�z‰zŒ|Ø˜a‘�
Øä ›+ˆKÙØ˜a‘�
Øä% kÓ2ˆGÙœc '›l¨RÒ/Ø˜a‘�
Øä" 7Ó+ˆGà�I‰Ið 9ä ¤(¨E°4¸À'È8ÐTôVð ˜‰MˆHØ˜‰N‰Ið3	ð6 	�‰ŒÜÐ-°°a±¸ÀhÐPYÐ0ZÑZÖ[ð].\ð` 	‡J�J„LÜ	Ð
/´9¸iÈÐ2TÑ
TÕUr%   Ú__main__)iô  ) Ú__doc__Úosr0   Úsysr   Úbs4r   r   r   rV   Úgetenvr   r[   r_   rH   r   ÚnowÚstrftimeÚCUTOFF_DATEr   ÚargvrZ   rQ   Úcutoff_daysr\   r   r$   r9   rO   rR   rp   Ú__name__© r%   r   ú<module>r~      sé   ðá Gß × Ý ß (Û àˆB�I‰I�kÐ#8Ó9€	Ø$€	Ø€ØB€ØÐWÐ
X€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€á�S—X‘X“ !Ñ#€ÙÙ�c—h‘h˜q‘kÓ"€KØˆh�l‰l‹n™y¨kÔ:Ñ:×DÑDÀZÓP�Fà€Fòó	òò.ò,
òJVðX ˆzÒÙ…Fð r%   