Ë
    ö©jh(  ã                   ó$  — 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dl
Z	ddlZ ej                  d«       ej                  j                  ej                  j                  e«      «      Zej                  j%                  de«       ej                  j%                  dej                  j'                  edd«      «       ddlmZ dZdZd	Z ej2                  d
d«      ZdZdZe› de› de› �Zd„ Zd„ Zd„ Z efd„Z!dd„Z"d„ Z#d„ Z$dd„Z%e&dk(  rqdZ'ejP                  dd Z) e*e)«      D ])  \  Z+Z,e,dk(  sŒe+dz    e-e)«      k  sŒ	  e.e)e+dz      «      Z'Œ+ e'€ e)D ]  Z,	  e.e,j_                  d«      «      Z' n  e%e'¬«       yy#  Y Œ]xY w#  Y Œ4xY w)uç   
è‹±å¾·å¸‚-æ¸…è¿œå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€è‹±å¾·åˆ†å±€-å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯ çˆ¬è™« (gkmlpt)
ç«™ç‚¹: www.yingde.gov.cn
æ �ç›®: 997 - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯
API: /yqydsthjj/gkmlpt/api/all/997?page=N&sid=763114
é    NÚignorez..Úcrawler)Ú
fetch_pageu,   è‹±å¾·å¸‚-ç”Ÿæ€�çŽ¯å¢ƒå±€-å»ºè®¾é¡¹ç›®çŽ¯è¯„zwww.yingde.gov.cnzhttp://www.yingde.gov.cnÚ	SEARCH_DBz/root/search.dbÚ763114Ú997z/yqydsthjj/gkmlpt/api/all/z?page={page}&sid=c                 óô  — | sy t        j                  t        d¬«      }|j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j	                  «        dx}}| D ]Ù  }	 |j                  d	«      xs d
d d }|j                  d«      xs |d d }|j                  d«      xs d
}|j                  d«      xs d
d d }|j                  d«      xs d
}	|j                  d«      xs |	}
|j                  d«      xs d
}|j                  dt        |	|
||||d|df
«       |j                  dkD  r|dz  }n|dz  }ŒÛ |j	                  «        	 |j                  dt        f«       |j	                  «        |j                  «        t        d|› d|› �«       |S # t        $ r	 |dz  }Y �ŒHw xY w# t        $ r}t        d|› �«       Y d }~ŒTd }~ww xY w)Né<   ©ÚtimeoutzPRAGMA journal_mode=WALzPRAGMA busy_timeout=8000zPRAGMA synchronous=NORMALa"  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_name TEXT, source_url TEXT UNIQUE, page_url TEXT,
        title TEXT, publish_date TEXT, summary TEXT,
        content TEXT, status TEXT, category TEXT, tags TEXT,
        attachments TEXT
    )zˆCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(
        title, site_name, summary, content='gov_raw', content_rowid='id'
    )r   ÚtitleÚ iô  ÚsummaryÚcontentÚpublish_dateé
   Ú
source_urlÚurlÚattachmentszßINSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date,
                 summary, content, status, attachments, script_name)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Úactivezcrawl_yingde.pyé   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.site_name=? AND r.id NOT IN (SELECT rowid FROM gov_search)z  [FTS ERROR] u     [DB] æ–°å¢ž: õ
   , è·³è¿‡: )Úsqlite3Úconnectr   ÚexecuteÚcommitÚgetÚ	SITE_NAMEÚtotal_changesÚ	ExceptionÚprintÚclose)ÚitemsÚdbÚokÚskipÚitemr   r   r   Úpub_dater   Úpage_urlr   Úes                ú!/root/gov_crawler/crawl_yingde.pyÚ	insert_dbr,      s  € ÙØÜ	�‰œ¨BÔ	/€BØ‡J�JÐ(Ô)Ø‡J�JÐ)Ô*Ø‡J�JÐ*Ô+à‡J�Jð 	ô 
ð ‡J�Jð 	ô 
ð ‡I�I„Kà€M€BˆØò ˆð	Ø—X‘X˜gÓ&Ò,¨"¨d¨sÐ3ˆEØ—x‘x 	Ó*Ò3¨e°T°cÐ:ˆGØ—h‘h˜yÓ)Ò/¨RˆGØŸ™ Ó0Ò6°B¸¸Ð<ˆHØŸ™ ,Ó/Ò5°2ˆJØ—x‘x “Ò4¨*ˆHØŸ(™( =Ó1Ò7°RˆKà�J‰Jð 9ô ˜: x°¸Ø˜ (¨KÐ9Jð;ôð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð)ð0 ‡I�I„Kð$Ø
�
‰
ð Rô ˆLô		ð
 	�	‰	Œð ‡H�H„JÜ	ˆO˜B˜4˜z¨$¨Ð
0Ô1Ø€Iøô# ò 	Ø�A‰I‹Dð	ûô ò $Ü�˜q˜cÐ"×#Ñ#ûð$ús+   ÂCGÅ7'G ÇGÇGÇ	G7ÇG2Ç2G7c                 óV  — | syt        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  ¬«      } | j	                  «       S )Nr   z<style[^>]*>.*?</style>©Úflagsz<script[^>]*>.*?</script>z
<!--.*?-->)ÚreÚsubÚDOTALLÚ
IGNORECASEÚstrip)Úhtmls    r+   Úclean_contentr6   ]   sp   € ÙØÜ�6‰6Ð,¨b°$¼b¿i¹iÌ"Ï-É-Ñ>WÔX€DÜ�6‰6Ð.°°DÄÇ	Á	ÌBÏMÉMÑ@YÔZ€DÜ�6‰6�-  T´·±Ô;€DØ�:‰:‹<Ðó    c                 ó¾  — | sy| }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  d	d|t         j                  ¬«      }t        j                  d
d|t         j                  ¬«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       S )u$   å°†æ¸…æ´—å�Žçš„ HTML è½¬ä¸ºçº¯æ–‡æœ¬r   z	<br\s*/?>ú
r.   z</p>z</div>z</li>z</tr>z</th>z</td>z9<(?!/?table|/?tr|/?td|/?th|/?thead|/?tbody|/?tfoot)[^>]*>z&nbsp;ú z&lt;ú<z&gt;ú>z&amp;ú&z\n{3,}z

z[ \t]+z3(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=[\u4e00-\u9fff]))r0   r1   r3   r4   )r5   Útexts     r+   Úextract_text_contentr?   e   sU  € áØØ€DÜ�6‰6�,  d´"·-±-Ô@€DÜ�6‰6�'˜4 ¬R¯]©]Ô;€DÜ�6‰6�)˜T 4¬r¯}©}Ô=€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€Dä�6‰6ÐNÐPRÐTXÓY€DÜ�6‰6�)˜S $Ó'€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�(˜C Ó&€DÜ�6‰6�)˜V TÓ*€DÜ�6‰6�)˜S $Ó'€Dä�6‰6ÐHÈ"ÈdÓS€DØ�:‰:‹<Ðr7   c                 ód  — | syd}t        j                  d|z   dz   | t         j                  «      }|syg }|D ]f  \  }}}}|j                  d«      r|n%|j	                  d«      dz   |j                  d«      z   }|j                  d|j                  «       › d|› d	�«       Œh d
j                  |«      S )Nr   z1\.(doc|docx|pdf|xls|xlsx|rar|zip)(\?[^\s"\'<>]*)?z<a[^>]*href=["\']([^"\']*?(?:z))["\'][^>]*>([^<]*)</a>Úhttpú/u	   [é™„ä»¶: z](ú)r9   )	r0   Úfindallr3   Ú
startswithÚrstripÚlstripÚappendr4   Újoin)	r5   Úbase_urlÚext_patternÚlinksÚpartsÚhrefÚ_r>   Úfull_urls	            r+   Úextract_attachmentsrQ   }   s¼   € ÙØØF€KÜ�J‰JØ(¨;Ñ6Ð9TÑTØŒb�m‰mó€Eñ ØØ€EØ!ò >Ñˆˆa��DØŸ?™?¨6Ô2‘4¸¿¹ÈÓ9MÐPSÑ9SÐVZ×VaÑVaÐbeÓVfÑ9fˆØ�‰�y §¡£ ¨b°°
¸!Ð<Õ=ð>ð �9‰9�UÓÐr7   r   c                 ó¸  — t         j                  | ¬«      }	 t        j                  j	                  |«      }|j                  dd«       t        j                  j                  |d¬«      }t        j                  |j                  «       «      }|j                  d	g «      }|j                  d
d«      }||fS # t        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)N)Úpagez
User-AgentzMozilla/5.0é   r   u     â�Œ APIè¯·æ±‚å¤±è´¥(page=z): )Nr   ÚarticlesÚtotalr   )ÚAPI_TEMPLATEÚformatÚurllibÚrequestÚRequestÚ
add_headerÚurlopenÚjsonÚloadsÚreadr    r!   r   )rS   r   ÚreqÚrespÚdatar*   rU   rV   s           r+   Ú
fetch_listrd   Ž   sÀ   € Ü
×
Ñ
 4Ð
Ó
(€CðÜ�n‰n×$Ñ$ SÓ)ˆØ�‰�| ]Ô3Ü�~‰~×%Ñ% c°2Ð%Ó6ˆÜ�z‰z˜$Ÿ)™)›+Ó&ˆð �x‰x˜
 BÓ'€HØ�H‰H�W˜aÓ €EØ�Uˆ?Ðøô ò ÜÐ+¨D¨6°°Q°CÐ8Ô9Üûðús   ˜A5B5 Â5	CÂ>CÃCc                 ó¼  — t        | d¬«      }|st        d| › �«       y t        j                  d|t        j                  «      }d }|r |j                  d«      j                  «       }nFt        j                  d|t        j                  «      }|r|j                  d«      j                  «       }t        j                  d|t        j                  «      }|s%t        j                  d|t        j                  «      }|st        d	| d d
 › �«       y |j                  d«      }t        |«      }t        |«      }t        |«      }	|r|	j                  «       dz   |z   }	||	|dœS )NrT   r   u     âš  è¯¦æƒ…é¡µèŽ·å�–å¤±è´¥: zC<meta\s+name=["\']ArticleTitle["\'][^>]*content=["\']([^"\']+)["\']r   z<title>([^<]+)</title>zB<div[^>]*class=["\']article-content["\'][^>]*>(.*?)</div>\s*</div>zc<div[^>]*class=["\']content["\'][^>]*>(.*?)</div>\s*</div>\s*(?=<div[^>]*class=["\']footer|<script)u     âš  æœªæ‰¾åˆ°å†…å®¹å®¹å™¨: r
   u   

--- é™„ä»¶ ---
)r   r   r   )r   r!   r0   Úsearchr3   Úgroupr4   r2   r6   rQ   r?   rF   )
r   r5   ÚmtÚdetail_titleÚttÚcmÚraw_htmlÚcleanedr   Útext_contents
             r+   Úfetch_detailro   �   sU  € Ü�c 2Ô&€DÙÜÐ-¨c¨UÐ3Ô4Øô 
�‰ÐYÐ[_Ôac×anÑanÓ	o€BØ€LÙ	Ø—x‘x “{×(Ñ(Ó*‰ä�Y‰YÐ0°$¼¿¹ÓFˆÙØŸ8™8 A›;×,Ñ,Ó.ˆLô 
�‰ÐXÐZ^Ô`b×`iÑ`iÓ	j€BÙÜ�Y‰YÐ}ð  @Dô  FH÷  FOñ  FOó  PˆÙÜÐ-¨c°#°2¨h¨ZÐ8Ô9Øà�x‰x˜‹{€HÜ˜HÓ%€GÜ% hÓ/€KÜ'¨Ó0€LáØ#×*Ñ*Ó,Ð/EÑEÈÑSˆð ØØ"ñð r7   c                 óŠ   — | sy	 t         j                   j                  t        | «      «      }|j                  d«      S #  Y yxY w)u   Unix timestamp è½¬ YYYY-MM-DDr   z%Y-%m-%d)ÚdatetimeÚfromtimestampÚintÚstrftime)ÚtsÚdts     r+   Ú
ts_to_daterw   Ä   s@   € áØðÜ×Ñ×,Ñ,¬S°«WÓ5ˆØ�{‰{˜:Ó&Ð&øðÙús	   …8> ¾Ac                 óº  — t        dd› �«       t        dt        › �«       t        d› «       t        d«       t        d«      \  }}|€y |rt        |«      nd}|rt	        j
                  ||z  «      nd}t        d|› d|› d	|› �«       | r| dkD  r| |k  r| }t        d
| › d�«       |rt        |«      ng }t        d|dz   «      D ]T  }t        |«      \  }}|r0|j                  |«       t        d|› d|› dt        |«      › d�«       ŒCt        d|› d|› d�«       ŒV t        dt        |«      › d�«       dx}	}
g }t        |d«      D �]-  \  }}|j                  dd«      }|j                  dd«      }d|v r"t        d|› dt        |«      › d|d d › d�«       ŒQ|rd|vr"t        d|› dt        |«      › d|d d › d�«       Œyt        d|› dt        |«      › d|d d › d�«       t        |«      }|€|
dz  }
Œ­t        |j                  d«      «      }|j                  d«      xs |}|d d  }|d!   }|j                  |||||||j                  d"d«      d#œ«       |	dz  }	t        d$t        |«      › d%|› �«       �Œ0 t        dd› �«       t        d&|	› d'|
› d(t        |«      |	z
  |
z
  › �«       |rt        |«       t        d› «       t        d)t        |«      › d*|	› d+|
› �«       y ),Nr9   z<============================================================u   ðŸš€ u   
ðŸ“¥ èŽ·å�–åˆ—è¡¨...r   r   u      æ€»æ�¡æ•°: u
   , æ¯�é¡µ: u   , æ€»é¡µæ•°: u      --pages é™�åˆ¶: å�–å‰� u    é¡µé   u      ç¬¬ rB   u    é¡µ: u    æ�¡u	    é¡µ: ç©ºu      å…±èŽ·å�–: r   r   r   zmp.weixin.qq.comz
[u   ] â�­ å¾®ä¿¡é“¾æŽ¥è·³è¿‡: é(   z...zyingde.gov.cnu   ] â�­ å¤–éƒ¨é“¾æŽ¥è·³è¿‡: z] é2   Úcreate_timeéÈ   r   r   )r   r   r   r   r   r   r   u      âœ… æ­£æ–‡: u    å­—, æ—¥æœŸ: u    ðŸ“¦ å†™å…¥æ•°æ�®åº“... æˆ�åŠŸ: u
   , å¤±è´¥: r   u   âœ… å®Œæˆ�! å…±å¤„ç�† u    æ�¡ï¼Œæˆ�åŠŸ u
   ï¼Œå¤±è´¥ )r!   r   rd   ÚlenÚmathÚceilÚlistÚrangeÚextendÚ	enumerater   ro   rw   rH   r,   )Ú	max_pagesrU   rV   Ú	page_sizeÚtotal_pagesÚall_articlesÚpÚartsrO   ÚsuccessÚfailÚdb_itemsÚir'   r   r   Údetailr(   Údb_titler   Úcontent_texts                        r+   Úrunr’   Ï   sX  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔô 
Ð
"Ô#Ü  “m�O€HˆeØÐØÙ!)”�H”¨q€IÙ2;”$—)‘)˜E IÑ-Ô.À€KÜ	ˆN˜5˜' ¨I¨;°mÀKÀ=Ð
QÔRá�Y ’] y°;Ò'>ØˆÜÐ*¨9¨+°TÐ:Ô;ñ &.”4˜”>°2€LÜ�1�k A‘oÓ&ò 8ˆÜ˜Q“-‰ˆˆaÙØ×Ñ Ô%Ü�G˜A˜3˜a ˜}¨F´3°t³9°+¸TÐBÕCä�G˜A˜3˜a ˜}¨IÐ6Õ7ð8ô 
ˆNœ3˜|Ó,Ð-¨TÐ
2Ô3ð Ð€GˆdØ€Hä˜\¨1Ó-ó "M‰ˆˆ4Ø�h‰h�u˜bÓ!ˆØ—‘˜ "Ó%ˆð  Ñ$Ü�C˜�s˜!œC Ó-Ð.Ð.HÈÈsÐPRÈÈÐTWÐXÔYØÙ�o¨SÑ0Ü�C˜�s˜!œC Ó-Ð.Ð.HÈÈsÐPRÈÈÐTWÐXÔYØä��A�3�aœ˜LÓ)Ð*¨"¨U°3°B¨Z¨L¸Ð<Ô=ä˜cÓ"ˆØˆ>Ø�A‰IˆDØä˜dŸh™h }Ó5Ó6ˆØ—:‘:˜gÓ&Ò/¨%ˆØ˜4˜C�.ˆØ˜iÑ(ˆà�‰ØØØØ$ØØ#Ø!Ÿ:™: m°RÓ8ñ
ô 	ð 	�1‰ˆÜ�¤ LÓ 1Ð2°.ÀÀ
ÐKÖLðE"MôJ 
ˆBˆvˆhˆ-ÔÜ	Ð,¨W¨I°ZÀ¸vÀZÔPSÐT`ÓPaÐbiÑPiÐjnÑPnÐOoÐ
pÔqÙÜ�(ÔÜ	ˆVˆHÔÜ	Ð"¤3 |Ó#4Ð"5°^ÀGÀ9ÈJÐW[ÐV\Ð
]Õ^r7   Ú__main__z--pagesú-)r…   )r   )N)0Ú__doc__ÚsysÚosr0   r^   r   r   ÚwarningsÚurllib.requestrY   Úurllib.errorrq   ÚfilterwarningsÚpathÚdirnameÚabspathÚ__file__Ú_HEREÚinsertrI   Úcrawler_libr   r   ÚDOMAINÚBASE_URLÚgetenvr   ÚSIDÚ	COLUMN_IDrW   r,   r6   r?   rQ   rd   ro   rw   r’   Ú__name__Úmax_pÚargvÚargsr„   rŽ   Úargr~   rs   rG   © r7   r+   ú<module>r®      sµ  ðñ÷ P× O× O× OÓ OÛ Ø €× Ñ ˜Ô !à
�‰�‰˜Ÿ™Ÿ™¨Ó1Ó2€Ø ‡�‡���5Ô Ø ‡�‡���2—7‘7—<‘<  t¨YÓ7Ô 8å "ð ;€	Ø	€Ø%€ØˆB�I‰I�kÐ#4Ó5€	à€Ø€	Ø�Ð5°i°[Ð@SÐTWÐSXÐY€ò;ò|òð0 (0ó ó"ò$òNóL_ð^ ˆzÒØ€EØ�8‰8�A�Bˆ<€DÙ˜D“/ò ‰ˆˆ3Ø�)Ó  A¡©¨D«	Ó 1ðÙ˜D  Q¡™KÓ(‘ðð €}Øò 	ˆCðÙ˜CŸJ™J s›OÓ,�Ùð	ñ �%Öð! øðÙûðÙús   ÅFÅFÆFÆF