Ë
    ¸¬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d„Zd„ Zd	„ Zd
„ Zd„ Zedk(  r e«        yy)uƒ   æ‰˜å…‹é€ŠåŽ¿å…¬å‘Šé€šçŸ¥çˆ¬è™«
ç«™ç‚¹: http://www.tkx.gov.cn/tkxx/c106471/list.shtml
åˆ†é¡µ: list_{n}.shtml, å…±33é¡µ, æ¯�é¡µ33æ�¡
é    N)Údatetimez/root/search.dbzhttp://www.tkx.gov.cné!   c                 ó¨  — t        |«      D ]i  }	 t        j                  j                  | ddi¬«      }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
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36)Ú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_tkx.pyÚfetchr"      sÀ   € Ü�7‹^ò ˆð	Ü—.‘.×(Ñ(¨ØÐ\ð7Ð(ó ˆCô —>‘>×)Ñ)¨#°rÐ)Ó:ˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ñøô ò 	Ø�7˜Q‘;ŠÜ—
‘
˜1•ä˜
 3 % r¨!¨Ð-´C·J±JÕ?Ýô ûð	ús   �A$A9Á9	CÂ?CÃCc                 óŽ  — g }| j                  d«      }|dk  r|S | j                  d|«      }|dk  r|dz   }| || }t        j                  d|t        j                  «      }|D ]ß  \  }}t        j                  d|«      }|r|j                  d«      j                  «       nd}	|	sŒB|j                  d	«      s	t        |z   }t        j                  d
|«      }
d}|
rU|
j                  d«      › d|
j                  d«      j                  d«      › d|
j                  d«      j                  d«      › �}|j                  ||	|dœ«       Œá |S )z#Extract articles from the list pagezid="list_data"r   z<div class="page_num">i'  z^<li>\s*<a[^>]+href=["\']([^"\']+)["\'][^>]*>.*?</a>\s*<div class="coninfo">(.*?)</div>\s*</li>ztitle=["\']([^"\']+)["\']r   Ú Úhttpu5   <span class="time">(\d{4})å¹´(\d{1,2})æœˆ(\d{1,2})æ—¥ú-r   é   )Úpage_urlÚtitleÚdate)ÚfindÚreÚfindallÚDOTALLÚsearchÚgroupÚstripÚ
startswithÚBASE_URLÚzfillÚappend)ÚhtmlÚitemsÚidxÚend_idxÚ	list_htmlÚlisÚhrefÚcon_htmlÚtitle_mr)   Údate_mÚpublish_dates               r!   Ú
parse_listrA      s_  € à€EØ
�)‰)Ð&Ó
'€CØ
ˆQ‚wØˆØ�i‰iÐ2°CÓ8€GØ�‚{Ø˜‘+ˆØ�S˜Ð!€Iô �*‰*Ðvð  yBô  DF÷  DMñ  DMó  N€CØò ‰ˆˆhä—)‘)Ð8¸(ÓCˆÙ,3�—‘˜aÓ ×&Ñ&Ô(¸ˆÙØØ�‰˜vÔ&Ü˜d‘?ˆDô —‘ÐSÐU]Ó^ˆØˆÙØ$Ÿl™l¨1›oÐ.¨a°·±¸Q³×0EÑ0EÀaÓ0HÐ/IÈÈ6Ï<É<ÐXYË?×K`ÑK`ÐabÓKcÐJdÐeˆLà�‰ØØØ ñ
õ 	ðð( €Ló    c                 ó0  ‡— t        j                  d| t         j                  «      }|r|j                  d«      j	                  «       nd}t        j                  d| «      }d}|rU|j                  d«      › d|j                  d«      j                  d«      › d|j                  d«      j                  d«      › �}d}t        j                  d| t         j                  «      }|r|j                  d«      j	                  «       }g }t        j                  d	d|t         j                  ¬
«      }	t        j                  d|	t         j                  «      D ]®  }
t        j                  dd|
«      j	                  «       }|sŒ+|j                  dd«      j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      }|j	                  «       sŒ�|j                  |j	                  «       «       Œ° t        j                  d	|t         j                  «      D ]  }|j                  t        |«      «       Œ g }t        j                  d|t         j                  «      D ]q  }|j                  d«      Št        ˆfd„dD «       «      rŒ)‰j                  d«      s'‰j                  d«      r
t        ‰z   Šnt        dz   ‰z   Š|j                  ‰«       Œs g }t        j                  d| t         j                  «      D ]\  }|j                  d«      }|j                  d«      s'|j                  d«      r
t        |z   }nt        dz   |z   }|j                  |«       Œ^ dj!                  |«      }|r|D ]  Š|d‰› d�z  }Œ |rLg }|D ].  }|j#                  d«      d    }|j                  d!|› d"|› d�«       Œ0 |d#d$j!                  |«      z   z  }|xs$ |j#                  d«      d    j                  d%d«      ||t%        j&                  |d&¬'«      d(œS ))z Extract content from detail pagez<h1>(.*?)</h1>r   r$   u7   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4})å¹´(\d{1,2})æœˆ(\d{1,2})æ—¥r&   r   r'   z!id="NewsContent"[^>]*>(.*?)</div>z<table[^>]*>.*?</table>)Úflagsz<p[^>]*>(.*?)</p>z<[^>]+>z&nbsp;ú z&lt;ú<z&gt;ú>z&amp;ú&z&quot;ú"z <img[^>]+src=["\']([^"\']+)["\']c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w)N)Úlower)Ú.0ÚxÚimg_urls     €r!   ú	<genexpr>zparse_detail.<locals>.<genexpr>f   s   øè ø€ Òw¨ˆq�G—M‘M“OÔ#Ñwùs   ƒ)ÚiconÚfiletypeÚewmÚlogoÚbannerÚbottomÚthumbÚnopicr%   ú/z;href=["\']([^"\']+\.(?:pdf|doc|docx|xls|xlsx|zip|rar))["\']z

u   

![å›¾ç‰‡](ú)éÿÿÿÿz- [z](u   

**é™„ä»¶ï¼š**
ú
ú.shtmlF)Úensure_ascii)r)   r@   Úcontent_renderedÚattachments)r,   r/   r.   r0   r1   r4   Úsubr-   r	   r5   ÚstrÚfinditerÚIÚanyr2   r3   ÚjoinÚsplitÚjsonÚdumps)r6   r   r>   r)   Úpub_mr@   Úcontent_htmlÚcÚpartsÚ
clean_htmlÚpÚtextÚtÚcontent_imagesÚmr_   Úatt_urlÚrenderedÚ	att_linesÚ	att_titlerN   s                       @r!   Úparse_detailrw   ?   s¨  ø€ ô �i‰iÐ)¨4´·±Ó;€GÙ(/ˆG�M‰M˜!Ó×"Ñ"Ô$°R€Eô �I‰IÐPÐRVÓW€EØ€LÙØŸ+™+ a›.Ð)¨¨5¯;©;°q«>×+?Ñ+?ÀÓ+BÐ*CÀ1ÀUÇ[Á[ÐQRÃ^×EYÑEYÐZ[ÓE\ÐD]Ð^ˆð €LÜ
�	‰	Ð6¸¼b¿i¹iÓH€AÙØ—w‘w˜q“z×'Ñ'Ó)ˆð €EÜ—‘Ð2°B¸ÌBÏIÉIÔV€JÜ�Z‰ZÐ,¨j¼"¿)¹)ÓDò 	'ˆä�v‰v�j " aÓ(×.Ñ.Ó0ˆÙØà�|‰|˜H cÓ*×2Ñ2°6¸3Ó?×GÑGÈÐPSÓTˆØ�|‰|˜G SÓ)×1Ñ1°(¸CÓ@ˆØ�:‰:�<Ø�L‰L˜Ÿ™›Õ&ð	'ô �Z‰ZÐ2°LÄ"Ç)Á)ÓLò ˆØ�‰”S˜“VÕðð €NÜ�[‰[Ð<¸lÌBÏDÉDÓQò 
'ˆØ—'‘'˜!“*ˆÜÓwÐ-vÔwÔwØØ×!Ñ! &Ô)à×!Ñ! #Ô&Ü" WÑ,‘ä" S™.¨7Ñ2�Ø×Ñ˜gÕ&ð
'ð €KÜ�[‰[ÐWÐY]Ô_a×_cÑ_cÓdò $ˆØ—'‘'˜!“*ˆØ×!Ñ! &Ô)Ø×!Ñ! #Ô&Ü" WÑ,‘ä" S™.¨7Ñ2�Ø×Ñ˜7Õ#ð$ð �{‰{˜5Ó!€HÙØ%ò 	4ˆGØ˜.¨¨	°Ð3Ñ3‰Hð	4áØˆ	Ø"ò 	<ˆGØŸ™ cÓ*¨2Ñ.ˆIØ×Ñ˜s 9 +¨R°¨y¸Ð:Õ;ð	<ð 	Ð)¨D¯I©I°iÓ,@Ñ@Ñ@ˆð ÒB˜#Ÿ)™) C›.¨Ñ,×4Ñ4°X¸rÓBØ$Ø$Ü—z‘z +¸EÔBñ	ð rB   c                 ó†  — t        j                  t        «      }|j                  «       }d}d}| D ]î  }|d   }|j	                  |i «      }|j                  d||f«       |j                  «       d   dkD  rŒE|j	                  dd«      }	|j                  d||j	                  d|j	                  dd«      «      ||j	                  d	|j	                  d
d«      «      |	|j	                  dd«      dt        t        j                  «       j                  «       «      f«       |dz  }Œð |j                  «        |j                  «        |S )Nu   æ‰˜å…‹é€ŠåŽ¿-å…¬å‘Šé€šçŸ¥r   r(   z=SELECT COUNT(*) FROM gov_raw WHERE page_url=? AND site_name=?r^   r$   z¦INSERT OR REPLACE INTO gov_raw 
            (page_url, title, site_name, publish_date, content, attachments, category, date_rank)
            VALUES (?,?,?,?,?,?,?,?)r)   r@   r*   r_   z[]u   å…¬å‘Šé€šçŸ¥r   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚgetÚexecuteÚfetchoneÚintr   ÚnowÚ	timestampÚcommitÚclose)
r7   ÚdetailsÚconnrk   Ú	site_nameÚinsertedÚitemÚpuÚdetÚcontents
             r!   Ú
save_to_dbr�   Ž   s)  € Ü�?‰?œ7Ó#€DØ�‰‹€AØ+€IØ€Hàò ˆØ�*ÑˆØ�k‰k˜"˜bÓ!ˆØ	�	‰	ÐQÐTVÐXaÐSbÔcØ�:‰:‹<˜‰?˜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Ø€OrB   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        › d
�}nt        › d|› d�}t        d|› d|› d�dd¬«       t        |«      }|st        d«       ŒLt        |«      }t        t        |«      › d�«       |j                  |«       Œ€ t        dt        |«      › �«       i }	t        |«      D ]†  \  }
}|d   }t        d|
d	z   › dt        |«      › d|d   d d › d�dd¬«       t        |«      }|st        d«       ŒNt!        ||«      }||	|<   t        dt        |j#                  dd«      «      › 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/tkxx/c106471/list.shtmlz/tkxx/c106471/list_r\   z[LIST] Page rX   z...rE   T)ÚendÚflushÚFAILEDz itemsz
Total items: r(   z  [z] r)   é(   ÚSKIPzOK (r^   r$   z chars)z
Inserted: z
 new itemszSkipped (existing): )ÚargparseÚArgumentParserÚadd_argumentr€   Ú
parse_argsÚminÚ	max_pagesÚ	MAX_PAGESr   r3   r   r"   rA   ÚlenÚextendÚ	enumeraterw   r}   r�   )rš   ÚparserÚargsÚpages_to_crawlÚ	all_itemsÚpage_numr   r6   r7   r…   r   r‰   rŠ   r‹   rˆ   s                  r!   Úmainr©   ­   sý  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜°ÐÔ=Ø
×Ñ˜¬C¸ÐAUÐÔVØ×ÑÓ€Dä˜Ÿ™¬Ó3€NØ€IÜ˜!˜^¨aÑ/Ó0ò  ˆØ�qŠ=Ü�JÐ6Ð7‰Cä�JÐ1°(°¸6ÐBˆCÜ�˜X˜J a¨Ð'7°sÐ;ÀÈDÕQÜ�S‹zˆÙÜ�(ŒOØÜ˜4Ó ˆÜ”�U“�˜FÐ#Ô$Ø×Ñ˜Õð ô 
ˆOœC 	›NÐ+Ð
,Ô-à€GÜ˜YÓ'ò 	C‰ˆˆ4Ø�*ÑˆÜ��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÈÐTXÕYÜ�R‹yˆÙÜ�&ŒMØÜ˜4 Ó$ˆØˆ�‰Ü�”S˜Ÿ™Ð!3°BÓ7Ó8Ð9¸ÐAÕBð	Cô ˜) WÓ-€HÜ	ˆL˜˜
 *Ð
-Ô.Ü	Ð ¤ Y£°(Ñ!:Ð ;Ð
<Õ=rB   Ú__main__)r'   )Ú__doc__r,   r   Úosr   rg   Úurllib.requestr   Úurllib.errorry   r   r{   r3   r    r"   rA   rw   r�   r©   Ú__name__© rB   r!   ú<module>r±      s\   ðñ÷ F× E× E× EÝ à
€Ø"€Ø€	óò!òFMò^ò>'>ðR ˆzÒÙ…Fð rB   