Ë
    €ÛµjE(  ã            	       óô  — 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mZ ddl	m
Z
 ddlmZ ddlmZ ddlZ	dZdZd	Zd
ZdZdddœZdd„Zd„ Zd„ Zdd„Zd„ Zdd„Zedk(  r�ej8                  D � cg c]/  } | j;                  d«      sŒ e| j?                  dd«      d   «      ‘Œ1 c} Z e xs4 ej8                  dd D � cg c]  } | jC                  «       sŒ e| «      ‘Œ c} Z e re d   ndZ" ee"«       yyc c} w c c} w )u)  
é¾™æ½­åŒºäººæ°‘æ”¿åºœ-æ”¿ç­–æ³•è§„ çˆ¬è™«
ç«™ç‚¹: http://www.longtan.gov.cn/gzms/zcfg/
CMS: TRS CMSï¼ˆè‡ªå®šä¹‰æ¨¡æ�¿ï¼‰
åˆ†é¡µ: index.html(ç¬¬1é¡µ), index_1.html(ç¬¬2é¡µ) ... index_8.html(ç¬¬9é¡µ)
è¯¦æƒ…: ./YYYYMM/tYYYYMMDD_NNNNNNN.html
æ­£æ–‡: div.detail_content > div.TRS_Editor > p/table/img
é    N©ÚBeautifulSoup)Úrequest)Úurljoin)Úunescapeu"   é¾™æ½­åŒºäººæ°‘æ”¿åºœ-æ”¿ç­–æ³•è§„zhttp://www.longtan.gov.cnz/gzms/zcfg/z/mnt/data/search.dbg      ø?z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)z
User-AgentÚAcceptc                 óü   — t        j                  | t        ¬«      }	 t        j                  ||¬«      }|j	                  «       j                  dd¬«      S # t        $ r}t        d| ›d|›�d¬	«       Y d }~y d }~ww xY w)
N)Úheaders©Útimeoutzutf-8Úignore)Úerrorsz
  [ERROR] z: T©Úflush)r   ÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprint)Úurlr   ÚreqÚrespÚes        ú'/root/gov_crawler/crawl_longtan_zcfg.pyÚfetchr      se   € Ü
�/‰/˜#¤wÔ
/€CðÜ�‰˜s¨GÔ4ˆØ�y‰y‹{×!Ñ! '°(Ð!Ó;Ð;øÜò Ý¢C©Ð+°4Õ8Üûðús   �7A Á	A;ÁA6Á6A;c                 óŽ   — t        dd«      D ]6  }t        t        z   d|z  z   }t        |d¬«      }|s|dz
  c S d|vsŒ1|dz
  c S  y)Né   é2   úindex_%d.htmlé
   r   z
href="./20é1   )ÚrangeÚBASE_URLÚ	LIST_PATHr   )ÚhtmlÚnr   Úhs       r   Úget_total_pagesr*   %   sY   € Ü�1�b‹\ò ˆÜœÑ" _°qÑ%8Ñ8ˆÜ�#˜rÔ"ˆÙØ�q‘5ŠLØ˜qÒ Ø�q‘5ŠLðð ó    c           	      ó€  — g }t        «       }t        j                  d| t        j                  «      D �]  }|j	                  d«      }|j	                  d«      j                  d«      }|j	                  d«      }|j	                  d«      }t        |j	                  d«      j                  «       «      }|j	                  d«      }	d|z   }
d	|
›|›d
|›d|›d�}t        t        t        z   |«      }||v rŒ¿|j                  |«       t        j                  dd|«      j                  «       }|j                  |||	f«       �Œ |S )Nz‘<a href="\./20(\d{2})0(\d)/t(\d+)_(\d+)\.html"[^>]*>\s*<div class="list_name"[^>]*>(.*?)</div>\s*<div class="list_time">(\d{4}-\d{2}-\d{2})</div>r   é   é   é   é   é   Ú20z./z/tÚ_z.htmlú\s+ú )ÚsetÚreÚfinditerÚDOTALLÚgroupÚzfillr   Ústripr   r%   r&   ÚaddÚsubÚappend)r'   ÚitemsÚseenÚmÚyear_prefixÚmonthÚfile_idÚ
article_idÚtitleÚdateÚyearÚhrefÚfull_urls                r   Ú
parse_listrL   /   s  € Ø€EÜ‹5€DÜ�[‰[ð 	]ØŒb�i‰ióó .ˆð —g‘g˜a“jˆØ—‘˜“
× Ñ  Ó#ˆØ—'‘'˜!“*ˆØ—W‘W˜Q“Zˆ
Ü˜Ÿ™ ›×)Ñ)Ó+Ó,ˆØ�w‰w�q‹zˆØ�kÑ!‰Ù'+ªU²GºZÐHˆÜœ8¤iÑ/°Ó6ˆØ�tÑØØ�‰�ÔÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆØ�‰�e˜X tÐ,Ö-ð#.ð$ €Lr+   c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   zhtml.parserÚarJ   Ú )ÚhttpÚ
javascriptú#ÚimgÚsrc)rP   z//zdata:)	Úbs4r   ÚstrÚfind_allÚgetÚ
startswithÚurllibÚparser   )ÚtableÚbase_urlr   ÚtblrN   rJ   rS   rT   s           r   Úhtml_table_to_htmlr_   F   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Or+   c           	      ó6  ‡— g }g }t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|sdg fS |j                  d«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }g Št        j
                  d|t         j                  «      D ]1  }‰j                  |j                  «       |j                  «       f«       Œ3 ˆfd	„}d
„ }g }	t        j
                  d|t         j                  «      D �]õ  }|j                  «       |j                  «       |j                  d«      }}}
|dv rSd|z   dz   }|j                  ||«      }|dk\  r||
|t        |«      z    }nL|j                  d|«      }|dk\  r||
| n||
d  }n*|dk(  r$|j                  d|«      }|dk\  r||
|dz    nd }|€ŒµŒ¶|dk(  r{ ||
«      rŒÄ ||«      rŒÍd|v sd|v rŒÖt        j                  dd|«      j                  «       }t        j                  dd|«      }t        |«      }|s�Œ!|	j                  |
|f«       �Œ6|dk(  r:|j                  d«      dkD  s�ŒQt        |«      }|s�Œ`|	j                  |
|f«       �Œu|dk(  s�Œ|t        j                  d|«      }t        j                  d|«      }|s�Œ¬t        ||j                  d«      «      }|r|j                  d«      nd}|	j                  |
d|›d|›d�f«       �Œø |	j!                  d„ ¬«       d j#                  d!„ |	D «       «      }t        j$                  d"| t         j                  «      D ]V  \  }}t        j                  dd|«      j                  «       }t        |«      }|sŒ9|j                  |t        ||«      d#œ«       ŒX |r|j                  «       s"|r d$}|D ]  }|d%|d&   z   d'z   |d(   z   d)z   z  }Œ ||fS )*NzC<div class="detail_content">(.*?)</div>\s*<div class="detail_autor"z'<div class="detail_content">(.*?)</div>rO   r   z<style[^>]*>.*?</style>)Úflagsz<script[^>]*>.*?</script>z<table[^>]*>.*?</table>c                 ó.   •‡ — t        ˆ fd„‰D «       «      S )Nc              3   óD   •K  — | ]  \  }}|‰cxk  xr |k  nc –— Œ y ­w©N© )Ú.0ÚtsÚteÚposs      €r   ú	<genexpr>z5parse_detail.<locals>.inside_table.<locals>.<genexpr>d   s   øè ø€ Ò>¡v r¨2�2˜–? —?�?Ñ>ùs   ƒ )Úany)ri   Útable_rangess   `€r   Úinside_tablez"parse_detail.<locals>.inside_tablec   s   ù€ ÜÓ>°Ô>Ó>Ð>r+   c                 óœ   — t        j                  dd| «      }t        j                  dd|«      }t        t        j                  d|«      «      S )Nz	^<p[^>]*>rO   z</p>\s*$z<(div|p|table|ul|ol|h[1-6])\b)r7   r>   ÚboolÚsearch)Úel_htmlÚbodys     r   Úhas_block_childrenz(parse_detail.<locals>.has_block_childrene   s=   € Ü�v‰v�l B¨Ó0ˆÜ�v‰v�k 2 tÓ,ˆÜ”B—I‘IÐ>ÀÓEÓFÐFr+   z<(p|table|img)\b[^>]*>)Úpr\   z</ú>r   ú<rS   rt   z<tdz<thz<[^>]+>r4   r5   r\   zsrc="([^"]+)"zalt="([^"]*)"z![z](ú)c                 ó   — | d   S )Nr   re   )Úxs    r   ú<lambda>zparse_detail.<locals>.<lambda>“   s
   €   !¡€ r+   )Úkeyz

c              3   ó&   K  — | ]	  \  }}|–— Œ y ­wrd   re   )rf   r3   Útexts      r   rj   zparse_detail.<locals>.<genexpr>”   s   è ø€ Ò7¡7 1 dœ$Ñ7ùs   ‚zb<a[^>]*href="([^"]+\.(?:doc|docx|pdf|xls|xlsx|ppt|pptx|zip|rar|7z|txt|wps|et|DOC))"[^>]*>(.*?)</a>)rG   r   u,   ã€�è¯¥æ–‡æ¡£å†…å®¹è¯¦è§�é™„ä»¶PDF/æ–‡æ¡£ã€‘
u   é™„ä»¶: rG   z - r   ú
)r7   rp   r9   r:   r>   r8   r?   ÚstartÚendÚfindÚlenr<   r   Úcountr_   r   ÚsortÚjoinÚfindall)r'   r   Úcontent_partsÚattachmentsrB   Ú	containerÚtmrm   rs   Úelementsr   Úm_endÚtagÚ	close_tagÚend_posrq   ÚnsÚcpr}   ÚmdÚsrc_mÚalt_mrT   ÚaltÚcontentÚa_hrefÚ
a_text_rawÚa_textÚattrl   s                                @r   Úparse_detailr›   U   sÎ  ø€ Ø€MØ€KÜ
�	‰	ÐXÐZ^Ô`b×`iÑ`iÓj€AÙÜ�I‰IÐ@À$ÌÏ	É	ÓRˆÙØ�2ˆvˆØ—‘˜“
€IÜ—‘Ð1°2°yÌÏ	É	ÔR€IÜ—‘Ð3°R¸Ì"Ï)É)ÔT€IØ€LÜ�k‰kÐ4°iÄÇÁÓKò 4ˆØ×Ñ˜RŸX™X›Z¨¯©«Ð2Õ3ð4ô?òGð €HÜ�[‰[Ð2°I¼r¿y¹yÓIó (CˆØŸG™G›I q§u¡u£w°·±¸³
�cˆuˆØ�.Ñ Ø˜s™
 SÑ(ˆIØ—n‘n Y°Ó6ˆGØ˜!Š|Ø# E¨'´C¸	³NÑ*BÐC‘à—^‘^ C¨Ó/�Ø13°q²˜) E¨"Ñ-¸iÈÈÐ>O‘Ø�EŠ\Ø—‘  UÓ+ˆBØ13°q²�i  b¨1¡fÑ-¸dˆGØˆØàØ�#Š:Ù˜EÔ"ØÙ! 'Ô*ØØ˜Ñ 5¨GÑ#3ØÜ—6‘6˜* b¨'Ó2×8Ñ8Ó:ˆDÜ—6‘6˜& # tÓ,ˆDÜ˜D“>ˆDÛØ—‘ ¨ Ö.Ø�GŠ^Ø�}‰}˜UÓ# aÔ'Ü'¨Ó0�ÛØ—O‘O U¨B KÖ0Ø�EŒ\Ü—I‘IÐ.°Ó8ˆEÜ—I‘IÐ.°Ó8ˆEÛÜ˜c 5§;¡;¨q£>Ó2�Ù(-�e—k‘k !”n°2�Ø—‘¡²sºCÐ(@Ð AÖBðQ(CðR ‡M�M‘n€MÔ%Ø�k‰kÑ7¨hÔ7Ó7€GÜ Ÿj™jØmØŒb�i‰ióò OÑˆ�
ô —‘˜
 B¨
Ó3×9Ñ9Ó;ˆÜ˜&Ó!ˆÚØ×Ñ¨¼ÀÀVÓ8LÑMÕNðOñ ˜7Ÿ=™=œ?±ØAˆØò 	MˆCØ�z C¨¡LÑ0°5Ñ8¸3¸u¹:ÑEÈÑLÑL‰Gð	Mà�KÐÐr+   r0   c                 óä  — t        j                  t        d¬«      }|j                  d«       |j	                  «       }|j                  «        t        dd¬«       t        dd¬«       t        t        t        z   «      }|st        dd¬«       |j                  «        y t        |«      }| d	kD  rt        | |«      n|}t        d
||fz  d¬«       g }t        «       }t        |«      }|D ]/  }	|	d   |vsŒ|j                  |	d   «       |j!                  |	«       Œ1 t        dt#        |«      t#        |«      fz  d¬«       t%        d|«      D ]À  }
t        t        z   d|
z  z   }t        d|
dz   |fz  d¬«       t'        j(                  t*        «       t        |«      }|st        dd¬«        nct        |«      }d	}|D ]4  }	|	d   |vsŒ|j                  |	d   «       |j!                  |	«       |dz  }Œ6 t        dt#        |«      |fz  d¬«       ŒÂ t        dt#        |«      z  d¬«       d	}|D �]Ÿ  \  }}}|}t'        j(                  t*        «       t        |«      }|st        d|d d z  d¬«       ŒDt-        j.                  d|«      }|rCt1        |j3                  d«      j5                  «       «      }|rt#        |«      t#        |«      kD  r|}t-        j.                  d|«      }|rH|j3                  d«      j5                  «       }t-        j6                  d|«      }|r|j3                  d«      }t9        ||«      \  }}t;        j<                  |d¬«      }|r|d d n|}|j                  dt>        ||||||f«       |j@                  d	kD  r6|dz  }t#        |«      }|rdnd}t        d||d d t#        |«      |fz  d¬«       |j                  «        �Œ¢ |j                  «        t        dt>        |fz  d¬«       y ) Né<   r   zPRAGMA busy_timeout=60000u   [æ¸…ç�†] å·²æ¸…ç�†æ—§æ•°æ�®Tr   u   [åˆ†æž�] æ‰«æ��æ€»é¡µæ•°...u   [å¤±è´¥] æ— æ³•èŽ·å�–åˆ—è¡¨r   u%   [åˆ†æž�] å…±%dé¡µï¼Œæœ¬æ¬¡çˆ¬å�–%dé¡µr   u      ç¬¬1é¡µ: %dæ�¡(åŽ»é‡�å�Ž%dæ�¡)r!   u   
[åˆ†é¡µ] ç¬¬%dé¡µ: %su     [å®Œæˆ�] èŽ·å�–å¤±è´¥u$     æ‰¾åˆ°%dæ�¡ï¼ŒåŽ»é‡�å�Žæ–°å¢ž%dæ�¡u!   
[çˆ¬å�–] å…±%dæ�¡å¾…çˆ¬è¯¦æƒ…é¡µu     [è·³è¿‡] %s -> èŽ·å�–å¤±è´¥é   z/<meta name="ArticleTitle"[^>]*content="([^"]*)"z*<meta name="PubDate"[^>]*content="([^"]*)"z(\d{4}-\d{2}-\d{2})F)Úensure_asciiéÈ   zwINSERT OR IGNORE INTO gov_raw (site_name,page_url,title,content,publish_date,attachments,summary) VALUES(?,?,?,?,?,?,?)u   [æ­£æ–‡]u   [æ— æ–‡æœ¬]u     %s %s -> %d chars, %dé™„ä»¶é#   u   
[DONE] %s: æ–°å¢ž=%d)!Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚcommitr   r   r%   r&   Úcloser*   Úminr6   rL   r=   r?   r‚   r$   ÚtimeÚsleepÚDELAYr7   rp   r   r:   r<   Úmatchr›   ÚjsonÚdumpsÚ	SITE_NAMEÚrowcount)Ú	max_pagesÚconnÚcurr'   Útotal_pagesÚpages_to_crawlÚ	all_itemsÚ	seen_urlsr@   ÚitemÚpageÚpage_urlÚ	new_itemsÚ	new_countrG   Ú
detail_urlrH   Úfinal_titleÚdetail_htmlÚmeta_mÚ
meta_titleÚmeta_dÚdate_strÚdate_mr–   rˆ   ÚajÚsummaryÚ	att_countÚstatuss                                 r   ÚcrawlrÊ   £   s¸  € Ü�?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø
�+‰+‹-€Cð 	‡K�K„MÜ	Ð
'¨tÕ4Ü	Ð
'¨tÕ4Ü”œIÑ%Ó&€DÙÜÐ+°4Õ8Ø�
‰
ŒØÜ! $Ó'€KØ4=À²M”S˜ KÔ0À{€NÜ	Ð
1°[À.Ð4QÑ
QÐY]Õ^Ø€IÜ“€Iä�tÓ€EØò #ˆØ�‰7˜)Ò#Ø�M‰M˜$˜q™'Ô"Ø×Ñ˜TÕ"ð#ô 
Ð
,´°E³
¼CÀ	»NÐ/KÑ
KÐSWÕXä�a˜Ó(ò \ˆÜœiÑ'¨/¸DÑ*@Ñ@ˆÜÐ'¨4°!©8°XÐ*>Ñ>ÀdÕKÜ�
‰
”5ÔÜ�X‹ˆÙÜÐ+°4Õ8ÙÜ˜4Ó ˆØˆ	Øò 	ˆDØ�A‰w˜iÒ'Ø—‘˜d 1™gÔ&Ø× Ñ  Ô&Ø˜Q‘‘	ð		ô
 	Ð4¼¸E»
ÀIÐ7NÑNÐVZÖ[ð\ô  
Ð
.´°Y³Ñ
?ÀtÕLØ€IØ#,ó Ñˆˆz˜4ØˆÜ�
‰
”5ÔÜ˜JÓ'ˆÙÜÐ1°KÀÀÐ4DÑDÈDÕQØÜ—‘ÐMÈ{Ó[ˆÙÜ! &§,¡,¨q£/×"7Ñ"7Ó"9Ó:ˆJÙœc *›o´°KÓ0@Ò@Ø(�Ü—‘ÐHÈ+ÓVˆÙØ—|‘| A“×,Ñ,Ó.ˆHÜ—X‘XÐ4°hÓ?ˆFÙØ—|‘| A“�Ü+¨K¸ÓDÑˆ�Ü�Z‰Z˜°%Ô8ˆÙ#*�'˜$˜3‘-°ˆØ�‰ð FÜ˜
 K°¸$ÀÀGÐLô	
ð �<‰<˜!ÒØ˜‰NˆIÜ˜KÓ(ˆIÙ#*‘Z°ˆFÜÐ1°V¸[ÈÈ"Ð=MÌsÐSZË|Ð]fÐ4gÑgÐosÕtØ�‰Žð=ð> 	‡J�J„LÜ	Ð
"¤i°Ð%;Ñ
;À4ÖHr+   Ú__main__z--pages=ú=r   )rž   )rO   )r0   )#Ú__doc__Úosr7   Úsysr®   rª   r¢   rU   r   rZ   r   Úurllib.parser   r'   r   r°   r%   r&   r¤   r¬   r   r   r*   rL   r_   r›   rÊ   Ú__name__ÚargvrY   ÚintÚsplitÚ_pages_argsÚisdigitÚpages)rN   s   0r   ú<module>rØ      s÷   ðñ÷ (× '× 'Ý Ý Ý  Ý Û à0€	Ø&€Ø€	Ø
€Ø€ð QØOñ€ó
òòó.òL ó\MIð^ ˆzÒØ47·H±HÖY¨qÀÇÁÈZÕ@X‘3�q—w‘w˜s A“ qÑ)Õ*ÒY€KØÒN°#·(±(¸1¸2°,Ö!N¨QÀ!Ç)Á)Å+¡# a¥&Ò!N€KÙ)ˆK˜ŠN¨q€EÙ	ˆ%…Lð	 ùÚYùÚ!Ns   Á.C0ÂC0Â:C5Ã
C5