Ë
    ¸¬ujA$  ã                   ó¶   — 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ZdZedz   ZdZdZd	Zd
dddœZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u  
æ±Ÿè‹�æ¶¦çŽ¯çŽ¯å¢ƒç§‘æŠ€æœ‰é™�å…¬å�¸(www.jsrainfine.com) - çŽ¯è¯„é¡¹ç›®å…¬ç¤ºæ �ç›®
URL: http://www.jsrainfine.com/inside/4/15.html
CMS: ASP.NET (AspNetPager åˆ†é¡µ)
åˆ—è¡¨: ul.newsnav > li > span.day2[æ—¥æœŸ] + a[href=/detail/{N}.html][title]
åˆ†é¡µ: /inside/4/15/page{N}.html, 5é¡µ, 15æ�¡/é¡µ â‰ˆ75æ�¡
è¯¦æƒ…: /detail/{N}.html -> 302 -> /detail.aspx?id={N}
  æ ‡é¢˜ div.detailhead > span#lblhead, æ—¥æœŸ å�‘å¸ƒæ—¶é—´ï¼š
  æ­£æ–‡ div.align > span#ContentPlaceHolder1_lblcontent (å�«è¡¨æ ¼/é™„ä»¶)
ç”Ÿäº§åº“ schema: gov_raw(id, site_name, source_url, page_url, title, publish_date, date_rank,
  summary, status, category, visits, content, tags, industry, attachments, group_name, has_table, script_name)
gov_search: fts5(title, site_name, summary, tokenize=trigram) rowid å¯¹é½� gov_raw.id
é    N)Úunescape)Úurljoinzhttp://www.jsrainfine.comz/inside/4/15.htmlu%   æ±Ÿè‹�æ¶¦çŽ¯çŽ¯å¢ƒ-çŽ¯è¯„é¡¹ç›®å…¬ç¤ºzcrawl_jsrainfine_xmgs.pyu   æ±Ÿè‹�zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languagec                 óÊ   — t        | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      j                  «       } | S )u    æ¸…æ´—æ ‡é¢˜: strip å®žä½“å‰�ç¼€Ú u   ^[\s\xa0Â·\u00b7]+z\s*\.{3,}\s*$z\s+ú )r   ÚreÚsubÚstrip)Úts    ú*/root/gov_crawler/crawl_jsrainfine_xmgs.pyÚclean_titler   (   sV   € ä�’�bÓ€AÜ
�‰Ð$ b¨!Ó,€AÜ
�‰Ð  QÓ'€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØ€Hó    c                 óæ  — g }t        j                  dt         j                  «      }|j                  | «      D ]v  }|j	                  d«      |j	                  d«      |j	                  d«      }}}t        ||«      }d|vrŒGt        |«      }|sŒU|j                  |||j                  «       f«       Œx t        «       }	g }
|D ]/  }|d   |	vsŒ|	j                  |d   «       |
j                  |«       Œ1 |
S )u1   è§£æž�åˆ—è¡¨é¡µ, è¿”å›ž [(title, url, date), ...]zb<span class="day2[^"]*">\[?(\d{4}-\d{2}-\d{2})\]?</span>\s*<a\s+href="([^"]+)"[^>]*title="([^"]*)"é   é   é   z/detail/)r	   ÚcompileÚSÚfinditerÚgroupr   r   Úappendr   ÚsetÚadd)Ú	html_textÚbase_urlÚitemsÚpatÚmÚdateÚhrefÚ
title_attrÚtitleÚseenÚoutÚits               r   Ú
parse_listr'   1   sè   € à€EÜ
�*‰*ØmÜ
�‰ó€Cð �\‰\˜)Ó$ò 2ˆØ!"§¡¨£¨Q¯W©W°Q«Z¸¿¹À»�JˆdˆÜ�x Ó&ˆØ˜TÑ!ØÜ˜JÓ'ˆÙØØ�‰�e˜T 4§:¡:£<Ð0Õ1ð2ô ‹5€DØ
€CØò ˆØˆa‰5˜ÒØ�H‰H�R˜‘UŒOØ�J‰J�r�Nðð €Jr   c           	      óò  — d}t        j                  d| t         j                  «      }|r/t        t        j                  dd|j                  d«      «      «      }d}t        j                  d| «      }|r|j                  d«      }t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|s||dg fS |j                  d«      }t        j                  dd|«      }t        j                  d	d|«      }g }t        j                  d
|t         j                  «      D ]²  }	|	j                  d«      t        j                  dd|	j                  d«      «      j                  «       }}
t        j                  d|
t         j                  «      s|j                  d«      sŒ|j                  |
t        ||
«      |xs |
j                  d«      d   f«       Œ´ ||||fS )u@   è§£æž�è¯¦æƒ…é¡µ, è¿”å›ž (title, date, content_html, attachments)r   z7<div class="detailhead"[^>]*>\s*<span[^>]*>(.*?)</span>z<[^>]+>r   u"   å�‘å¸ƒæ—¶é—´ï¼š(\d{4}-\d{2}-\d{2})z?<span id="ContentPlaceHolder1_lblcontent"[^>]*>(.*?)</p></span>z;<span id="ContentPlaceHolder1_lblcontent"[^>]*>(.*?)</span>ú<script[\s\S]*?</script>ú<style[\s\S]*?</style>z$<a[^>]+href="([^"]+)"[^>]*>(.*?)</a>r   z0\.(?:pdf|docx?|xlsx?|zip|rar|wps|et|dps)(?:\?|$)u   é™„ä»¶ú/éÿÿÿÿ)r	   Úsearchr   r   r
   r   r   r   ÚIÚ
startswithr   r   Úsplit)r   Úurlr#   r   r    ÚdmÚcmÚbodyÚattsÚar!   Útxts               r   Úparse_detailr8   J   s¦  € ð €EÜ
�	‰	ÐLÈiÔY[×Y]ÑY]Ó^€AÙÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆà€DÜ	�‰Ð8¸)Ó	D€BÙ	Ø�x‰x˜‹{ˆô 
�‰ÐUÐW`Ôbd×bfÑbfÓ	g€BÙÜ�Y‰YÐUÐW`Ôbd×bfÑbfÓgˆÙØ�d˜B Ð"Ð"Ø�8‰8�A‹;€Dä�6‰6Ð-¨r°4Ó8€DÜ�6‰6Ð+¨R°Ó6€Dà€DÜ�[‰[Ð@À$ÌÏÉÓMò PˆØ—G‘G˜A“J¤§¡ z°2°q·w±w¸q³zÓ B× HÑ HÓ JˆcˆÜ�9‰9ÐHÈ$ÔPR×PTÑPTÔUÐY\×YgÑYgÐhpÕYqØ�K‰K˜œw s¨DÓ1°3Ò3M¸$¿*¹*ÀS»/È"Ñ:MÐNÕOðPð �$˜˜dÐ"Ð"r   c           	      ó”  ‡— g Šˆfd„}t        j                  d|| «      } g }|D ]Ž  \  }}}dt        |«      › d�}|j                  |||f«       dt        j                  |«      z   dz   }||k7  r|dt        j                  |«      z   dz   z  }t        j                  ||| t         j
                  ¬«      } Œ� t        j                  d	d
| «      } t        j                  dd| «      } | j                  dd«      j                  dd«      } t        | «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j                  d
«      D �	cg c]  }	|	j                  «       ‘Œ }
}	|
D �	cg c]  }	|	sŒ|	‘Œ	 }}	dj                  |«      }t        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ t        j                  dd|«      }|D ]0  \  }}}||v r|j                  |d|› d|› d�«      }Œ%|d|› d|› d�z  }Œ2 |j                  «       S c c}	w c c}	w )u9   HTML -> æ–‡æœ¬, ä¿�ç•™è¡¨æ ¼ã€�\n\n åˆ†æ®µã€�é™„ä»¶åµŒå…¥c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   ú@@TABLEr   ú@@)r   r   Úlen)r   Útabless    €r   Ú	_save_tblzhtml_to_text.<locals>._save_tblo   s/   ø€ Ø�‰�a—g‘g˜a“jÔ!Øœ˜V› q™Ð)¨Ð,Ð,r   z<table[\s\S]*?</table>z@@ATTr<   z<a[^>]+href="z"[^>]*>.*?</a>z|<a[^>]+href=")Úflagsz"</?(?:p|div|tr|br|h[1-6]|li)[^>]*>ú
z.</?(?:span|font|b|strong|i|em|u|o:p|o|a)[^>]*>r   z&nbsp;r   õ   Â r)   r*   z</?(?:html|body)[^>]*>z\n{3,}ú

r;   z	<a href="z" target="_blank">z</a>z

<p><a href="z</a></p>)r	   r
   r=   r   Úescaper   Úreplacer   r0   r   ÚjoinÚ	enumerate)r   Úattachmentsr?   Úatt_placeholdersÚ	orig_hrefÚabs_urlr7   Úphr   ÚlnÚlinesr%   ÚtextÚir   r>   s                  @r   Úhtml_to_textrQ   k   sS  ø€ à€Fô-ô —‘Ð0°)¸YÓG€IàÐØ#.ò ;Ñˆ	�7˜CØ”SÐ)Ó*Ð+¨2Ð.ˆØ×Ñ  W¨cÐ 2Ô3Ø¤§¡¨9Ó!5Ñ5Ð8IÑIˆØ�iÒØÐ$¤r§y¡y°Ó'9Ñ9Ð<MÑMÑMˆCÜ—F‘F˜3  I´R·T±TÔ:‰	ð;ô —‘Ð<¸dÀIÓN€IÜ—‘ÐHÈ"ÈiÓX€IØ×!Ñ! (¨CÓ0×8Ñ8¸ÀÓE€IÜ˜Ó#€Iä—‘Ð2°B¸	ÓB€IÜ—‘Ð0°"°iÓ@€IÜ—‘Ð0°"°iÓ@€IÜ—‘�y &¨)Ó4€IØ"+§/¡/°$Ó"7Ö8˜BˆR�X‰X�ZÐ8€EÐ8ØÖ
$�"¢Š2Ð
$€CÐ
$Ø�;‰;�sÓ€DÜ˜&Ó!ò 0‰ˆˆ1Ø�|‰|˜g a S¨˜O¨QÓ/‰ð0ä�6‰6�)˜V TÓ*€Dà,ò PÑˆˆG�SØ�‰:Ø—<‘<  i°¨yÐ8JÈ3È%ÈtÐ$TÓU‰DàÐ& w iÐ/AÀ#ÀÀhÐOÑO‰Dð	Pð
 �:‰:‹<Ðùò 9ùÚ
$s   Å?I ÆIÆ$Ic                  óÜ  — t        j                  «       } | j                  dt        dd¬«       | j                  ddd¬«       | j                  d	t        ¬
«       | j                  «       }|j                  }|j                  }|j                  d«      st        j                  j                  |«      }t        j                  |«      }|j                  «       }d}d}d}t        j                   «       }	t#        d|j$                  dz   «      D �]Ü  }
|
dk(  rt&        nt(        › d|
› d�}	 |	j+                  |t,        d¬«      }d|_        t5        |j6                  |«      }t3        d|
› dt9        |«      › d|› �«       |sŒq|D �]Q  \  }}}	 |j;                  d||f«       |j=                  «       d   dkD  r|dz  }Œ9|	j+                  |t,        dd¬«      }d|_        t?        |j6                  |«      \  }}}}|jA                  «       st3        d|d d › �«       |dz  }Œ›|r|}|r|}tC        ||«      }|rdjE                  d„ |D «       «      nd}|r|d d nd}|j;                  dtF        ||||d|ddd|dd |tH        d!|v rdnd|f«       |j;                  d"|jJ                  |tF        |f«       |jM                  «        |dz  }t3        d#|› d$|d d% › �«       �ŒT tO        jP                  d'«       �Œß |jS                  «        t3        d(|› d)|› d*|› �«       y # t0        $ r$}t3        d|
› d|› d|› �«       |dz  }Y d }~�Œ-d }~ww xY w# t0        $ r$}|dz  }t3        d&|d d › d|› �«       Y d }~�Œêd }~ww xY w)+Nz--pagesr   u   æŠ“å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--dbz/mnt/data/search.dbu   SQLite æ•°æ�®åº“è·¯å¾„)rT   rU   z--script-name)rT   z/mnt/r   z/inside/4/15/pagez.htmlé   )ÚheadersÚtimeoutzutf-8ú[u   ] è¯·æ±‚å¤±è´¥ z: u	   ] åˆ—è¡¨ u    æ�¡ z?SELECT COUNT(*) FROM gov_raw WHERE page_url=? AND script_name=?T)rW   rX   Úallow_redirectsu     è·³è¿‡ç©ºæ­£æ–‡: rC   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )Ú.0r6   s     r   ú	<genexpr>zmain.<locals>.<genexpr>È   s   è ø€ Ò%9¨q a¨¥dÑ%9ùs   ‚r   iô  zíINSERT INTO gov_raw (site_name, source_url, page_url, title, publish_date, date_rank, summary, status, category, visits, content, tags, industry, attachments, group_name, has_table, script_name) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)Úotherz<tablezJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z  + r   é(   z  ERR g333333Ó?u   å®Œæˆ�: æ–°å¢ž u
    / é‡�å¤� u
    / é”™è¯¯ )*ÚargparseÚArgumentParserÚadd_argumentÚintÚSCRIPT_NAMEÚ
parse_argsÚdbÚscript_namer/   ÚosÚpathÚ
expanduserÚsqlite3ÚconnectÚcursorÚrequestsÚSessionÚrangeÚpagesÚLIST_URLÚBASE_URLÚgetÚHEADERSÚencodingÚ	ExceptionÚprintr'   rO   r=   ÚexecuteÚfetchoner8   r   rQ   rF   Ú	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathrh   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countÚsessionÚpager1   ÚrÚer   r#   Úart_urlÚpub_dateÚdrÚd_titleÚd_dateÚcontent_htmlr5   ÚcontentÚatt_txtÚsummarys                             r   Úmainr˜   •   sŒ  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°¸€OÔHØ‡O�O�FÐ$9Ð@X€OÔYØ‡O�O�O¬[€OÔ9Ø�=‰=‹?€Dà�g‰g€GØ×"Ñ"€KØ×Ñ˜gÔ&Ü—'‘'×$Ñ$ WÓ-ˆä�?‰?˜7Ó#€DØ
�+‰+‹-€CØ€IØ€IØ€Iä×ÑÓ €Gä�a˜Ÿ™ a™Ó(ó 1ˆØ !š)�h¬H¨:Ð5FÀtÀfÈEÐ)Rˆð	Ø—‘˜C¬¸"�Ó=ˆAØ ˆAŒJô
 ˜1Ÿ6™6 3Ó'ˆÜ��$��y¤ U£ ¨E°#°Ð7Ô8ÙØØ(-ó #	2Ñ$ˆE�7˜Hð"2Ø—‘Ð]Ð`gÐitÐ_uÔvØ—<‘<“> !Ñ$ qÒ(Ø ‘N�IØØ—[‘[ ´'À2ÐW[�[Ó\�Ø%�”Ü6BÀ2Ç7Á7ÈGÓ6TÑ3�˜ ¨tØ#×)Ñ)Ô+ÜÐ/°°c°r°
¨|Ð<Ô=Ø ‘N�IØÙØ#�EÙØ%�HÜ& |°TÓ:�Ù=A˜&Ÿ+™+Ñ%9°DÔ%9Ô9Àr�Ù+2˜' $ 3™-¸�Ø—‘ðAä ¨°%¸À1ÀgÈrÐSUÐWXÐZaÐceØ˜g¤z¸ÀGÑ8K±1ÐQRÐT_ðaôð —‘Ø`Ø—]‘] E¬9°gÐ>ôð —‘”Ø˜Q‘�	Ü˜˜X˜J a¨¨c¨r¨
 |Ð4Ö5ðA#	2ôH 	�
‰
�3Žðc1ðf 	‡J�J„LÜ	ˆO˜I˜; j°°¸:ÀiÀ[Ð
QÕRøô_ ò 	Ü�A�d�V˜?¨3¨%¨r°!°Ð5Ô6Ø˜‰NˆIÝûð	ûôR ò 2Ø˜Q‘�	Ü˜˜u S b˜z˜l¨"¨Q¨CÐ0×1Ò1ûð2ús>   Ä%LÆ/L>Æ5A!L>ÈB7L>Ì	L;ÌL6Ì6L;Ì>	M+ÍM&Í&M+Ú__main__)Ú__doc__ra   Úhashlibri   r	   rl   r€   Úhtmlr   Úurllib.parser   ro   rt   rs   r|   re   r}   rv   r   r'   r8   rQ   r˜   Ú__name__r\   r   r   ú<module>rŸ      s‹   ðñó Û Û 	Û 	Û Û Ý Ý  ã à&€ØÐ)Ñ)€Ø3€	Ø(€Ø€
ð @ØOØ'ñ€òòò2#òB'òTHSðV ˆzÒÙ…Fð r   