Ë
    ¸¬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„   é€šæ±ŸåŽ¿å…¬ç¤ºå…¬å‘Šçˆ¬è™«
ç«™ç‚¹: https://www.tjxzf.gov.cn/xwzx/tzgg/index.html
åˆ†é¡µ: ?page=N, 87é¡µ, 24æ�¡/é¡µ
CMS: webBuilder
é    N)Údatetimez/root/search.dbzhttps://www.tjxzf.gov.cnéW   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_tjxzf.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|«      }| || }t        j                  d|t        j                  «      }|D �]  }t        j                  d|«      }|sŒ|j                  d«      }|j                  d«      s	t        |z   }t        j                  dd	|«      j                  «       }	t        j                  d
d|	«      j                  «       }	t        j                  d|	«      }
|
xr/ |	j                  |
j                  d«      d	«      j                  «       xs |	}|j                  |||
r|
j                  d«      nd	dœ«       �Œ	 |S )Nzdoc_list list-r   z</ul>z<li[^>]*>(.*?)</li>zhref=["\']([^"\']+)["\']r   Úhttpú<[^>]+>Ú z\s+ú z(\d{4}-\d{2}-\d{2}))Úpage_urlÚtitleÚdate)ÚfindÚreÚfindallÚDOTALLÚsearchÚgroupÚ
startswithÚBASE_URLÚsubÚstripr	   Úappend)ÚhtmlÚitemsÚidxÚendÚsectionÚlisÚliÚhrefr   Útxt_allÚdate_mr)   s               r!   Ú
parse_listr@      s;  € Ø€EØ
�)‰)Ð$Ó
%€CØ
ˆQ‚wØˆØ
�)‰)�G˜SÓ
!€CØ�3�sˆm€Gä
�*‰*Ð+¨W´b·i±iÓ
@€CØó ˆÜ�y‰yÐ4°bÓ9ˆÙØØ�j‰j˜‹mˆØ�~‰~˜fÔ%Ü˜S‘.ˆCä—&‘&˜ R¨Ó,×2Ñ2Ó4ˆä—&‘&˜  gÓ.×4Ñ4Ó6ˆä—‘Ð1°7Ó;ˆØÒG˜7Ÿ?™?¨6¯<©<¸«?¸BÓ?×EÑEÓGÒRÈ7ˆà�‰ØØÙ'-�F—L‘L ”O°2ñ
ö 	ðð( €Ló    c                 óè  — t        j                  d| t         j                  «      }|r/|j                  d«      j	                  dd«      j                  «       nd}t        j                  d| «      }|st        j                  d| «      }d}|rH|j                  d«      j                  «       }t        j                  d|«      }|r|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                  |«       Œ= t        j                  d	|t         j                  «      D ]  }|
j                  t        |«      «       Œ g }t        j                  d| t         j                  «      D ]>  }|j                  d«      }|j                  d«      s	t        |z   }|j                  |«       Œ@ dj                  |
«      }|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<title>(.*?)</title>r   u   _é€šæ±ŸåŽ¿äººæ°‘æ”¿åºœr&   u   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*([^<]+)z1<meta name="PubDate" content="(\d{4}-\d{2}-\d{2})z(\d{4}-\d{1,2}-\d{1,2})z:class="j-fontContent newscontnet minh300"[^>]*>(.*?)</div>z<table[^>]*>.*?</table>)Úflagsz<p[^>]*>(.*?)</p>r%   z;href=["\']([^"\']+\.(?:pdf|doc|docx|xls|xlsx|zip|rar))["\']r$   z

ú/éÿÿÿÿz- [z](ú)u   

**é™„ä»¶ï¼š**
ú
z.htmlF)Úensure_ascii)r)   Úpublish_dateÚcontent_renderedÚattachments)r,   r/   r.   r0   r	   r4   r3   r-   r5   ÚstrÚfinditerÚIr1   r2   ÚjoinÚsplitÚjsonÚdumps)r6   r   Útitle_mr)   Úpub_mrI   Údate_strÚdmÚcontent_htmlÚcÚpartsÚ
clean_htmlÚpÚtextÚtrK   ÚmÚatt_urlÚrenderedÚ	att_linesÚ	att_titles                        r!   Úparse_detailrc   <   s–  € ä�i‰iÐ/°´r·y±yÓA€GÙNUˆG�M‰M˜!Ó×$Ñ$Ð%=¸rÓB×HÑHÔJÐ[]€Eô �I‰IÐ5°tÓ<€EÙÜ—	‘	ÐNÐPTÓUˆØ€LÙØ—;‘;˜q“>×'Ñ'Ó)ˆÜ�Y‰YÐ1°8Ó<ˆÙØŸ8™8 A›;ˆLð €LÜ
�	‰	ÐOÐQUÔWY×W`ÑW`Óa€AÙØ—w‘w˜q“z×'Ñ'Ó)ˆð €EÜ—‘Ð2°B¸ÌBÏIÉIÔV€JÜ�Z‰ZÐ,¨j¼"¿)¹)ÓDò ˆÜ�v‰v�j " aÓ(×.Ñ.Ó0ˆÚØ�L‰L˜Õðô �Z‰ZÐ2°LÄ"Ç)Á)ÓLò ˆØ�‰”S˜“VÕðð €KÜ�[‰[ÐWÐY]Ô_a×_cÑ_cÓdò $ˆØ—'‘'˜!“*ˆØ×!Ñ! &Ô)Ü Ñ(ˆGØ×Ñ˜7Õ#ð	$ð �{‰{˜5Ó!€HÙØˆ	Ø"ò 	<ˆGØŸ™ cÓ*¨2Ñ.ˆIØ×Ñ˜s 9 +¨R°¨y¸Ð:Õ;ð	<ð 	Ð)¨D¯I©I°iÓ,@Ñ@Ñ@ˆð ÒA˜#Ÿ)™) C›.¨Ñ,×4Ñ4°W¸bÓAØ$Ø$Ü—z‘z +¸EÔBñ	ð rA   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=?rJ   r&   z¦INSERT OR REPLACE INTO gov_raw 
            (page_url, title, site_name, publish_date, content, attachments, category, date_rank)
            VALUES (?,?,?,?,?,?,?,?)r)   rI   r*   rK   z[]u   å…¬ç¤ºå…¬å‘Šr   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚgetÚexecuteÚfetchoneÚintr   ÚnowÚ	timestampÚcommitÚclose)
r7   ÚdetailsÚconnrX   Ú	site_nameÚinsertedÚitemÚpuÚdetÚcontents
             r!   Ú
save_to_dbry   s   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Ø€OrA   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|› �}t        d|› d|› d�dd¬«       t        |«      }|st        d«       ŒKt        |«      }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/xwzx/tzgg/index.htmlz"/content/column/6787401?pageIndex=z[LIST] Page rD   z...r'   T)r9   ÚflushÚFAILEDz itemsz
Total items: r(   z  [z] r)   é(   ÚSKIPzOK (rJ   r&   z chars)z
Inserted: z
 new itemszSkipped (existing): )ÚargparseÚArgumentParserÚadd_argumentrl   Ú
parse_argsÚminÚ	max_pagesÚ	MAX_PAGESr   r2   r   r"   r@   ÚlenÚextendÚ	enumeraterc   ri   ry   )r…   ÚparserÚargsÚpages_to_crawlÚ	all_itemsÚpage_numr   r6   r7   rq   r   ru   rv   rw   rt   s                  r!   Úmainr”   ’   sû  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜°ÐÔ=Ø
×Ñ˜¬C¸ÐAUÐÔVØ×ÑÓ€Dä˜Ÿ™¬Ó3€NØ€IÜ˜!˜^¨aÑ/Ó0ò  ˆØ�qŠ=Ü�JÐ3Ð4‰Cä�JÐ@ÀÀ
ÐKˆ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£°(Ñ!:Ð ;Ð
<Õ=rA   Ú__main__)é   )Ú__doc__r,   r   Úosr   rQ   Úurllib.requestr   Úurllib.errorre   r   rg   r2   r‹   r"   r@   rc   ry   r”   Ú__name__© rA   r!   ú<module>r�      sZ   ðñ÷
 F× E× E× EÝ à
€Ø%€Ø€	óòò>5ònò>'>ðR ˆzÒÙ…Fð rA   