Ë
    ¸¬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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.jszshj.com) - é¡¹ç›®å…¬ç¤ºæ �ç›® (xmgs656)
URL: http://www.jszshj.com/news/xmgs656/
CMS: è‡ªå»º PHP (dedecmsé£Žæ ¼ news/{id}.html)
åˆ—è¡¨: ul.news_list > li > h3 > a[href][title] + div(æ‘˜è¦�) + b(å�‘å¸ƒæ—¶é—´)
åˆ†é¡µ: /news/xmgs656/p{N}.html, 27é¡µ
è¯¦æƒ…: /news/{id}.html
  æ ‡é¢˜ div.news_detail > h1.title, æ—¥æœŸ div.info_title > span
  æ­£æ–‡ div.news_detail å†… div.content (UEditor), é™„ä»¶ /data/upload/file/*.pdf
ç”Ÿäº§åº“ 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.jszshj.comz/news/xmgs656/u%   æ±Ÿè‹�æ™ºç››çŽ¯å¢ƒç§‘æŠ€-é¡¹ç›®å…¬ç¤ºzcrawl_jszshj_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_jszshj_xmgs.pyÚclean_titler   (   sV   € ä�’�bÓ€AÜ
�‰Ð$ b¨!Ó,€AÜ
�‰Ð  QÓ'€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØ€Hó    c                 ó8  — g }t        j                  dt         j                  «      }|j                  | «      D ]Ÿ  }|j	                  d«      |j	                  d«      |j	                  d«      |j	                  d«      f\  }}}}t        ||«      }|j                  t        «      sŒlt        |xs |«      }	|	sŒ~|j                  |	||j                  «       f«       Œ¡ t        «       }
g }|D ]/  }|d   |
vsŒ|
j                  |d   «       |j                  |«       Œ1 |S )u1   è§£æž�åˆ—è¡¨é¡µ, è¿”å›ž [(title, url, date), ...]uq   <li>\s*<h3><a href="([^"]+)"[^>]*title="([^"]*)"[^>]*>(.*?)</a></h3>.*?<b[^>]*>å�‘å¸ƒæ—¶é—´ï¼š(\d{4}-\d{2}-\d{2})é   é   é   é   )r	   ÚcompileÚSÚfinditerÚgroupr   Ú
startswithÚBASE_URLr   Úappendr   ÚsetÚadd)Ú	html_textÚbase_urlÚitemsÚpatÚmÚhrefÚ
title_attrÚ	title_txtÚdateÚtitleÚseenÚoutÚits                r   Ú
parse_listr+   1   s
  € à€Eä
�*‰*ð	9ä
�‰ó€Cð
 �\‰\˜)Ó$ò 2ˆØ,-¯G©G°A«J¸¿¹À»
ÀAÇGÁGÈAÃJÐPQ×PWÑPWÐXYÓPZÐ,ZÑ)ˆˆj˜) TÜ�x Ó&ˆØ�‰œxÔ(ØÜ˜JÒ3¨)Ó4ˆÙØØ�‰�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%t        j                  d| t         j                  «      }|s||dg fS |j                  d«      }t        j                  d	d|«      }t        j                  d
d|«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }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   z!<h1 class="title"[^>]*>(.*?)</h1>z<[^>]+>r   u(   å�‘å¸ƒæ—¥æœŸï¼š<span>(\d{4}-\d{2}-\d{2})z]<h1 class="title">.*?</h1>.*?<div class="content">(.*?)(?:<h3 class="tag">|<div class="page")z@<div class="content">(.*?)(?:<h3 class="tag">|<div class="page")z<div class="content">(.*)ú<script[\s\S]*?</script>ú<style[\s\S]*?</style>z.<div class="info_title[^>]*>.*?</div>\s*</div>©Úflagsz7<!-- Baidu Button BEGIN -->.*?<!-- Baidu Button END -->z$<a[^>]+href="([^"]+)"[^>]*>(.*?)</a>r   z0\.(?:pdf|docx?|xlsx?|zip|rar|wps|et|dps)(?:\?|$)u   é™„ä»¶ú/éÿÿÿÿ)r	   Úsearchr   r   r
   r   r   r   ÚIr   r   r   Úsplit)r   Úurlr'   r"   r&   ÚdmÚcmÚbodyÚattsÚar#   Útxts               r   Úparse_detailr=   L   s  € ð €EÜ
�	‰	Ð6¸	Ä2Ç4Á4ÓH€AÙÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆà€DÜ	�‰Ð>À	Ó	J€BÙ	Ø�x‰x˜‹{ˆô 
�‰ÐsÐu~ô  AC÷  AEñ  AEó  
F€BÙÜ�Y‰YÐZÐ\eÔgi×gkÑgkÓlˆÙÜ�Y‰YÐ3°YÄÇÁÓEˆÙØ�d˜B Ð"Ð"Ø�8‰8�A‹;€Dä�6‰6Ð-¨r°4Ó8€DÜ�6‰6Ð+¨R°Ó6€Dä�6‰6ÐCÀRÈÔUW×UYÑUYÔZ€DÜ�6‰6ÐLÈbÐRVÔ^`×^bÑ^bÔc€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 ]Y  \  }}}|j                  |d|› d|› d�«      }||v rŒ%|j                  d
«      D ]!  }||v sŒ|j                  |d|› d|› d�«      } ŒY Œ[ |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_tblw   s/   ø€ Ø�‰�a—g‘g˜a“jÔ!Øœ˜V› q™Ð)¨Ð,Ð,r   z<table[\s\S]*?</table>z@@ATTrA   z<a[^>]+href="z"[^>]*>.*?</a>z|<a[^>]+href="r/   z"</?(?: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>)r	   r
   rB   r   Úescaper   Úreplacer   r5   r   ÚjoinÚ	enumerate)r   ÚattachmentsrD   Úatt_placeholdersÚ	orig_hrefÚabs_urlr<   Úphr!   ÚlnÚlinesr)   ÚtextÚir   r#   ÚlinerC   s                    @r   Úhtml_to_textrV   s   s{  ø€ à€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à)ò ‰ˆˆD�#Ø�|‰|˜B )¨D¨6Ð1CÀCÀ5ÈÐ MÓNˆØ�‰:Øà—J‘J˜tÓ$ò 	ˆDØ�TŠzØ—|‘| D¨I°d°VÐ;MÈcÈUÐRVÐ*WÓX�Ùñ	ðð �:‰:‹<Ðùò! 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        d|j                   dz   «      D �]ã  }	|	dk(  rt"        nt"        › d|	› d�}
	 t%        j&                  |
t(        d¬«      }d|_        t1        |j2                  |
«      }t/        d|	› dt5        |«      › d|
› �«       |sŒu|D �]T  \  }}}	 |j7                  d||f«       |j9                  «       d   dkD  r|dz  }Œ9t%        j&                  |t(        d¬«      }d|_        t;        |j2                  |«      \  }}}}|j=                  «       st/        d|d d › �«       |dz  }Œž|r|}|r|}t?        ||«      }|rdjA                  d„ |D «       «      nd}|r|d d nd}|j7                  dtB        ||||d|ddd|dd|tD        d|v rdnd|f«       |j7                  d |jF                  |tB        |f«       |jI                  «        |dz  }t/        d!|› d"|d d# › �«       �ŒW tK        jL                  d%«       �Œæ |jO                  «        t/        d&|› d'|› d(|› �«       y # t,        $ r$}t/        d|	› d|
› d|› �«       |dz  }Y d }~�Œ4d }~ww xY w# t,        $ r$}|dz  }t/        d$|d d › d|› �«       Y d }~�Œíd }~ww xY w))Nz--pagesr   u   æŠ“å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--dbz/mnt/data/search.dbu   SQLite æ•°æ�®åº“è·¯å¾„)rY   rZ   z--script-name)rY   z/mnt/r   Úpz.htmlé   )ÚheadersÚtimeoutzutf-8ú[u   ] è¯·æ±‚å¤±è´¥ z: u	   ] åˆ—è¡¨ u    æ�¡ z?SELECT COUNT(*) FROM gov_raw WHERE page_url=? AND script_name=?u     è·³è¿‡ç©ºæ­£æ–‡: rG   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )Ú.0r;   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ÚrangeÚpagesÚLIST_URLÚrequestsÚgetÚHEADERSÚencodingÚ	ExceptionÚprintr+   rS   rB   ÚexecuteÚfetchoner=   r   rV   rJ   Ú	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathrm   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countÚpager6   ÚrÚer    r'   Úart_urlÚpub_dateÚdrÚd_titleÚd_dateÚcontent_htmlr:   ÚcontentÚatt_txtÚsummarys                            r   Úmainrš   ¡   sv  € Ü	×	 Ñ	 Ó	"€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ä�a˜Ÿ™ a™Ó(ó 1ˆØ !š)�h¬H¨:°Q°t°f¸EÐ)Bˆð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJô
 ˜1Ÿ6™6 3Ó'ˆÜ��$��y¤ U£ ¨E°#°Ð7Ô8ÙØØ(-ó #	2Ñ$ˆE�7˜Hð"2Ø—‘Ð]Ð`gÐitÐ_uÔvØ—<‘<“> !Ñ$ qÒ(Ø ‘N�IØÜ—\‘\ '´7ÀBÔG�Ø%�”Ü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Å5/L1Æ%A$L1È
B7L1Ì	L.Ì
L)Ì)L.Ì1	MÌ:MÍMÚ__main__)Ú__doc__rf   Úhashlibrn   r	   rq   rƒ   Úhtmlr   Úurllib.parser   rw   r   rv   r   rj   r€   ry   r   r+   r=   rV   rš   Ú__name__ra   r   r   ú<module>r¡      s‹   ðñó Û Û 	Û 	Û Û Ý Ý  ã à"€ØÐ&Ñ&€Ø3€	Ø$€Ø€
ð @ØOØ'ñ€òòò6$#òN+ò\FSðR ˆzÒÙ…Fð r   