Ë
    ¸¬uj"!  ã                   óª   — 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
m
Z
 dZdZdZdZdZdd	„Zdd
„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uö   å¤ªè°·åŒº-é€šçŸ¥å…¬å‘Šï¼ˆç”Ÿæ€�çŽ¯å¢ƒå±€å¤ªè°·åˆ†å±€ï¼‰çˆ¬è™«
ç«™ç‚¹: http://www.taigu.gov.cn
æ �ç›®: æ™‹ä¸­å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€å¤ªè°·åˆ†å±€-é€šçŸ¥å…¬å‘Š
åˆ†é¡µ: tzgg50jzssthjjtgfj_{N} (ç¬¬1é¡µ: æ— å�Žç¼€), 40é¡µÃ—20æ�¡
CMS: PowerCMS (ASP.NET MVC)
é    N)Údatetimez/root/search.dbzhttp://www.taigu.gov.cnzQ/zwgk/bmxxgkml/qtdwml/50jzssthjjtgfj/fdzdgknrsthjfj/zcwjsthjfj/tzgg50jzssthjjtgfjé(   u   å¤ªè°·åŒº-é€šçŸ¥å…¬å‘Šc                 óª  — t        |«      D ]j  }	 t        j                  j                  | dddœ¬«      }t        j                  j	                  |d¬«      }|j                  «       j                  dd¬	«      c S  y # t        $ rO}||d
z
  k  rt        j                  d«       n't        d| › d|› �t        j                  ¬«       Y d }~ y Y d }~ŒÁd }~ww xY w)Nz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Language)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsé   é   z
  [ERROR] z: )Úfile)ÚrangeÚurllibÚrequestÚRequestÚurlopenÚreadÚdecodeÚ	ExceptionÚtimeÚsleepÚprintÚsysÚstderr)ÚurlÚretriesÚiÚreqÚrespÚes         ú /root/gov_crawler/crawl_taigu.pyÚfetchr"      sÀ   € Ü�7‹^ò ˆð	Ü—.‘.×(Ñ(¨Ø\Ø#3ñ7Ð(ó ˆCô —>‘>×)Ñ)¨#°rÐ)Ó:ˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ñøô ò 	Ø�7˜Q‘;ŠÜ—
‘
˜1•ä˜
 3 % r¨!¨Ð-´C·J±JÕ?Ýô ûð	ús   �A%A:Á:	CÂ?CÃCc                 óú   — | j                  d«      rd| z   S | j                  d«      r| S | j                  d«      r	t        | z   S |r+dj                  |j                  d«      d d «      }|dz   | z   S t        dz   | z   S )Nz//zhttps:Úhttpú/éÿÿÿÿ)Ú
startswithÚBASE_URLÚjoinÚsplit)Úrel_urlÚpage_urlÚpage_dirs      r!   Úresolve_urlr.   "   s†   € Ø×Ñ˜$ÔØ˜'Ñ!Ð!Ø×Ñ˜&Ô!ØˆØ×Ñ˜#ÔÜ˜'Ñ!Ð!áØ—8‘8˜HŸN™N¨3Ó/°°Ð4Ó5ˆØ˜#‰~ Ñ'Ð'Ü�c‰>˜GÑ#Ð#ó    c                 óš  — g }| j                  d«      }|dk  r|S | j                  d|«      }| || }t        j                  d|t        j                  «      }|D �]n  }t        j                  d|«      }|sŒ|j                  d«      }t        j                  d|«      }	d}
|	rQ|	j                  d«      }t        j                  d	d|«      }t        j                  d
|«      d   j                  «       }|}
|
s[t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }
t        j                  d|«      }|r|j                  d«      j                  «       nd}t        j                  d|«      }|r|j                  d«      nd}|j                  ||
|dœ«       �Œq |S )Nzclass="infoList"r   z</ul>z<li[^>]*>(.*?)</li>zhref=[\"\']([^\"\']+)[\"\']r   ztitle=[\"\']([^\"\']+)[\"\']Ú u   æ ‡é¢˜[ï¼š:]\s*z\nz<a[^>]*>(.*?)</a>ú<[^>]+>z*<span[^>]*class=\"date\"[^>]*>(.*?)</span>ú(\d{4}-\d{1,2}-\d{1,2}))r,   ÚtitleÚdate)
ÚfindÚreÚfindallÚDOTALLÚsearchÚgroupÚsubr*   ÚstripÚappend)ÚhtmlÚitemsÚidxÚendÚsectionÚlisÚliÚhref_mr   Útitle_mr4   Ú	raw_titleÚtÚa_mÚdate_mÚdate_strÚdmÚpublish_dates                     r!   Ú
parse_listrO   /   s—  € Ø€EØ
�)‰)Ð&Ó
'€CØ
ˆQ‚wØˆØ
�)‰)�G˜SÓ
!€CØ�3�sˆm€Gä
�*‰*Ð+¨W´b·i±iÓ
@€CØó ˆÜ—‘Ð9¸2Ó>ˆÙØØ�l‰l˜1‹oˆô —)‘)Ð;¸RÓ@ˆØˆÙØŸ™ aÓ(ˆIä—‘Ð)¨2¨yÓ9ˆAÜ—‘˜ Ó" 1Ñ%×+Ñ+Ó-ˆAØˆEÙä—)‘)Ð0°"´b·i±iÓ@ˆCÙÜŸ™˜z¨2¨s¯y©y¸«|Ó<×BÑBÓD�ô —‘ÐHÈ"ÓMˆÙ.4�6—<‘< “?×(Ñ(Ô*¸"ˆÜ�Y‰YÐ1°8Ó<ˆÙ&(�r—x‘x ”{¨bˆà�‰ØØØ ñ
ö 	ð7ð@ €Lr/   c           
      óâ  — d}t        j                  d| t         j                  «      }|r4t        j                  dd|j	                  d«      «      j                  «       }d}t        j                  d| «      }|r|j	                  d«      }|s)t        j                  d|«      }|r|j	                  d«      }d}t        j                  d| t         j                  «      }|r|j	                  d«      j                  «       }t        j                  d|t         j                  «      }	t        j                  dd|t         j                  ¬	«      }
t        j                  d
d|
«      }
g }t        j                  d|
t         j                  «      D ];  }t        j                  dd|«      j                  «       }|sŒ+|j                  |«       Œ= |	D ]  }|j                  |«       Œ t        j                  d|«      D ]š  }t        ||«      }t        j                  d|j                  |«      dk\  r5||j                  |«      dz
  |j                  |«      t        |«      z   dz    n| «      }|r|j	                  d«      nd}|j                  d|› d|› d�«       Œœ g }t        «       }t        j                  d| t         j                  «      D ]D  }t        |j	                  d«      |«      }||vsŒ#|j                  |«       |j                  |«       ŒF dj                  |«      }|j!                  dd«      j!                  dd«      j!                  dd«      j!                  dd«      }t        j                  dd|«      }|rLg }|D ].  }|j#                  d«      d   }|j                  d |› d|› d�«       Œ0 |d!d"j                  |«      z   z  }|xs |j#                  d«      d   ||t%        j&                  |d#¬$«      d%œS )&Nr1   z%<h2[^>]*class="title"[^>]*>(.*?)</h2>r2   r   u,   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})r3   zclass="conTxt"[^>]*>(.*?)</div>z<table[^>]*>.*?</table>)Úflagsz</?tbody[^>]*>z<p[^>]*>(.*?)</p>z)<img[^>]+src=[\"\']([^\"\']+)[\"\'][^>]*>zalt=[\"\']([^\"\']*)[\"\']éd   é2   z![z](ú)z>href=[\"\']([^\"\']*\.(?:pdf|doc|docx|xls|xlsx|zip|rar))[\"\']z

z&nbsp;ú z&lt;ú<z&gt;ú>z&amp;ú&z {2,}r%   r&   z- [u   

**é™„ä»¶ï¼š**
ú
F)Úensure_ascii)r4   rN   Úcontent_renderedÚattachments)r7   r:   r9   r<   r;   r=   r8   r>   r.   r6   ÚlenÚsetÚfinditerÚIÚaddr)   r	   r*   ÚjsonÚdumps)r?   r   r4   rG   rN   Úpub_mrM   Úcontent_htmlÚcÚtablesÚno_table_htmlÚpartsÚpÚtextrI   ÚimgÚimg_urlÚalt_mÚaltr\   ÚseenÚmÚatt_urlÚrenderedÚ	att_linesÚ	att_titles                             r!   Úparse_detailrv   Z   sÃ  € Ø€EÜ�i‰iÐ@À$ÌÏ	É	ÓR€GÙÜ—‘�z 2 w§}¡}°QÓ'7Ó8×>Ñ>Ó@ˆð €LÜ�I‰IÐEÀtÓL€EÙØ—{‘{ 1“~ˆÙÜ�Y‰YÐ1°3Ó7ˆÙØŸ8™8 A›;ˆLð €LÜ
�	‰	Ð4°d¼B¿I¹IÓF€AÙØ—w‘w˜q“z×'Ñ'Ó)ˆô �Z‰ZÐ2°LÄ"Ç)Á)ÓL€FÜ—F‘FÐ5°r¸<ÌrÏyÉyÔY€MÜ—F‘FÐ,¨b°-Ó@€Mà€EÜ�Z‰ZÐ,¨m¼R¿Y¹YÓGò ˆÜ�v‰v�j " aÓ(×.Ñ.Ó0ˆÚØ�L‰L˜Õðð ò ˆØ�‰�Q�ðô �z‰zÐFÈÓUò -ˆÜ˜c 3Ó'ˆÜ—	‘	Ð7ð  IU÷  IZñ  IZð  [^ó  I_ð  cfò  If¸Àl×FWÑFWÐX[ÓF\Ð]`ÑF`Ðam×arÑarÐsvÓawÔx{Ð|ó  yAñ  bAð  BDñ  bDñ  :Eð  lpó  qˆÙ %ˆe�k‰k˜!Œn¨2ˆØ�‰�r˜#˜˜b  	¨Ð+Õ,ð	-ð €KÜ‹5€DÜ�[‰[ÐZÐ\`Ôbd×bfÑbfÓgò (ˆÜ˜aŸg™g a›j¨#Ó.ˆØ˜$ÒØ�H‰H�WÔØ×Ñ˜wÕ'ð	(ð �{‰{˜5Ó!€Hà×Ñ ¨#Ó.×6Ñ6°v¸sÓC×KÑKÈFÐTWÓX×`Ñ`ÐahÐjmÓn€HÜ�v‰v�h  XÓ.€HÙØˆ	Ø"ò 	<ˆGØŸ™ cÓ*¨2Ñ.ˆIØ×Ñ˜s 9 +¨R°¨y¸Ð:Õ;ð	<ð 	Ð)¨D¯I©I°iÓ,@Ñ@Ñ@ˆð Ò,˜#Ÿ)™) C›.¨Ñ,Ø$Ø$Ü—z‘z +¸EÔBñ	ð r/   c                 óÒ  — t        j                  t        «      }|j                  «       }d}| D �]  }|d   }|j	                  |i «      }|j                  d«      r|n
t        |«      }|j                  d|t        f«       |j                  «       d   dkD  rŒh|j	                  dd«      }	|j                  d||j	                  d|j	                  dd«      «      t        |j	                  d	|j	                  d
d«      «      |	|j	                  dd«      dt        t        j                  «       j                  «       «      f«       |dz  }�Œ |j                  «        |j                  «        |S )Nr   r,   r$   z=SELECT COUNT(*) FROM gov_raw WHERE page_url=? AND site_name=?r[   r1   z¦INSERT OR REPLACE INTO gov_raw 
            (page_url, title, site_name, publish_date, content, attachments, category, date_rank)
            VALUES (?,?,?,?,?,?,?,?)r4   rN   r5   r\   z[]u   é€šçŸ¥å…¬å‘Šr   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚgetr'   r.   ÚexecuteÚ	SITE_NAMEÚfetchoneÚintr   ÚnowÚ	timestampÚcommitÚclose)
r@   ÚdetailsÚconnrf   ÚinsertedÚitemÚpuÚdetÚfull_urlÚcontents
             r!   Ú
save_to_dbr�   Ÿ   s:  € Ü�?‰?œ7Ó#€DØ�‰‹€AØ€HØó ˆØ�*ÑˆØ�k‰k˜"˜bÓ!ˆàŸ™ vÔ.‘2´KÀ³OˆØ	�	‰	ÐQÐT\Ô^gÐShÔiØ�:‰:‹<˜‰?˜QÒØØ—'‘'Ð,¨bÓ1ˆØ	�	‰	ð (ð Ø�G‰G�G˜TŸX™X g¨rÓ2Ó3ÜØ�G‰G�N D§H¡H¨V°RÓ$8Ó9ØØ�G‰G�M 4Ó(ØÜ”—‘“×(Ñ(Ó*Ó+ð	*
ô	ð 	�A‰Šð+ð, 	‡K�K„MØ‡J�J„LØ€Or/   c                  ó:  — dd l } | j                  «       }|j                  dd¬«       |j                  dt        dd¬«       |j	                  «       }t        |j                  t        «      }g }t        d	|d	z   «      D ]ˆ  }|d	k(  rt        › t        › �}nt        › t        › d
|› �}t        d|› d|› d�dd¬«       t        |«      }|st        d«       ŒVt        |«      }t        t        |«      › d�«       |j                  |«       ŒŠ t        dt        |«      › �«       i }	t!        |«      D ]¹  \  }
}|d   }|j#                  d«      r|n
t%        |«      }t        d|
d	z   › dt        |«      › d|d   d d › d�dd¬«       t        |«      }|st        d«       Œlt'        ||«      }||	|<   t        dt        |j)                  dd«      «      › d�«       t+        j,                  d«       Œ» t/        ||	«      }t        d |› d!�«       t        d"t        |«      |z
  › �«       y )#Nr   z--incrementalÚ
store_true)Úactionz--max-pagesé   zMax pages to crawl)ÚtypeÚdefaultÚhelpr   Ú_z[LIST] Page r%   z...rU   T)rB   ÚflushÚFAILEDz itemsz
Total items: r,   r$   z  [z] r4   r   ÚSKIPzOK (r[   r1   z chars)g      ø?z
Inserted: z
 new itemszSkipped (existing): )ÚargparseÚArgumentParserÚadd_argumentr€   Ú
parse_argsÚminÚ	max_pagesÚ	MAX_PAGESr   r(   Ú
PAGE1_PATHr   r"   rO   r]   ÚextendÚ	enumerater'   r.   rv   r|   r   r   r�   )r™   ÚparserÚargsÚpages_to_crawlÚ	all_itemsÚpage_numr   r?   r@   r…   r   rˆ   r‰   r‹   rŠ   r‡   s                   r!   Úmainr¨   ½   s  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜°ÐÔ=Ø
×Ñ˜¬C¸ÐAUÐÔVØ×ÑÓ€Dä˜Ÿ™¬Ó3€NØ€IÜ˜!˜^¨aÑ/Ó0ò  ˆØ�qŠ=Ü�Jœz˜lÐ+‰Cä�Jœz˜l¨!¨H¨:Ð6ˆCÜ�˜X˜J a¨Ð'7°sÐ;ÀÈDÕQÜ�S‹zˆÙÜ�(ŒOØÜ˜4Ó ˆÜ”�U“�˜FÐ#Ô$Ø×Ñ˜Õð ô 
ˆOœC 	›NÐ+Ð
,Ô-à€GÜ˜YÓ'ò ‰ˆˆ4Ø�*ÑˆØŸ™ vÔ.‘2´KÀ³OˆÜ��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÈÐTXÕYÜ�X‹ˆÙÜ�&ŒMØÜ˜4 Ó*ˆØˆ�‰Ü�”S˜Ÿ™Ð!3°BÓ7Ó8Ð9¸ÐAÔBÜ�
‰
�3�ðô ˜) WÓ-€HÜ	ˆL˜˜
 *Ð
-Ô.Ü	Ð ¤ Y£°(Ñ!:Ð ;Ð
<Õ=r/   Ú__main__)é   )r1   )Ú__doc__r7   r   Úosr   rb   Úurllib.requestr   Úurllib.errorrx   r   rz   r(   r    rŸ   r~   r"   r.   rO   rv   r�   r¨   Ú__name__© r/   r!   ú<module>r±      sk   ðñ÷ F× E× E× EÝ à
€Ø$€à`€
Ø€	Ø$€	óó $ò)òVCòJò<)>ðV ˆzÒÙ…Fð r/   