Ë
    ¸¬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d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)ut  
æ˜†æ˜Žå¸‚ä¸œå·�åŒºäººæ°‘æ”¿åºœ(www.kmdc.gov.cn) - ç”Ÿæ€�çŽ¯å¢ƒæ �ç›®
URL: http://www.kmdc.gov.cn/gsthj/
CMS: zcms (index_N.shtml é�™æ€�åˆ†é¡µ)
åˆ—è¡¨: div.data-table-item > p.w659 > a (æ ‡é¢˜) + p.w80 > a[title] (æ—¥æœŸ)
åˆ†é¡µ: index.shtml / index_N.shtml, 29é¡µ, 20æ�¡/é¡µ
è¯¦æƒ…: div.content > h1 + div.activity (æ­£æ–‡, å�«è¡¨æ ¼)
ç”Ÿäº§åº“ 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.kmdc.gov.cnzhttp://www.kmdc.gov.cn/gsthj/u+   æ˜†æ˜Žå¸‚ä¸œå·�åŒºäººæ°‘æ”¿åºœ-ç”Ÿæ€�çŽ¯å¢ƒzcrawl_kmdc_hjbh.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 )u2   æ¸…æ´—æ ‡é¢˜: strip &middot;&nbsp; ç­‰å®žä½“å‰�ç¼€Ú u   ^\s*(?:&middot;|Â·|&nbsp;|\s)+u(   \s*_\s*æ˜†æ˜Žå¸‚ä¸œå·�åŒºäººæ°‘æ”¿åºœ.*$z\s+ú )r   ÚreÚsubÚstrip)Úts    ú$/root/gov_crawler/crawl_kmdc_hjbh.pyÚclean_titler   &   sV   € ä�’�bÓ€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰Ð:¸BÀÓB€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØ€Hó    c                 óÀ  — g }t        j                  dt         j                  «      }|j                  | «      D ]ã  }|j	                  d«      |j	                  d«      |j	                  d«      j                  «       }}}|j                  d«      st        ||«      }d|vrŒft        |«      }|sŒt|r|dd nd	}|sQt        j                  d
| «      }	|	r7|	j	                  d«      › d|	j	                  d«      › d|	j	                  d«      › �nd	}|j                  |||f«       Œå t        «       }
g }|D ]/  }|d   |
vsŒ|
j                  |d   «       |j                  |«       Œ1 |S )u1   è§£æž�åˆ—è¡¨é¡µ, è¿”å›ž [(title, url, date), ...]z{<p class="w659">\s*<a href="([^"]+)"[^>]*>\s*([^<]+?)\s*</a>\s*</p>\s*<p class="w80">\s*<a href="[^"]*"[^>]*title="([^"]*)"é   é   é   )zhttp://zhttps://z/c/Né
   r   z(\d{4})\.(\d{2})\.(\d{2})ú-)r	   ÚcompileÚSÚfinditerÚgroupr   Ú
startswithr   r   ÚsearchÚappendÚsetÚadd)Ú	html_textÚbase_urlÚitemsÚpatÚmÚhrefÚtitleÚtsÚdateÚdmÚseenÚoutÚits                r   Ú
parse_listr,   /   sP  € à€Eä
�*‰*ð	Aä
�‰ó€Cð
 �\‰\˜)Ó$ò *ˆØŸ'™' !›* a§g¡g¨a£j°!·'±'¸!³*×2BÑ2BÓ2D�RˆeˆØ�‰Ð6Ô7Ü˜8 TÓ*ˆDØ˜ÑØÜ˜EÓ"ˆÙØáˆr�#�2‰w "ˆÙÜ—‘Ð7¸ÓCˆBÙCE�b—h‘h˜q“k�] ! B§H¡H¨Q£K =°°"·(±(¸1³+°Ñ?È2ˆDØ�‰�e˜T 4Ð(Õ)ð*ô ‹5€DØ
€CØò ˆØˆa‰5˜ÒØ�H‰H�R˜‘UŒOØ�J‰J�r�Nðð €Jr   c                 ó„  — t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|sdg fS |j                  d«      }t        j                  d|«      }|D �cg c]4  }t        j                  d|t         j
                  «      sŒ)t        ||«      ‘Œ6 }}||fS c c}w )u3   è§£æž�è¯¦æƒ…é¡µ, è¿”å›ž (content_html, attachments)zK<div class="content">.*?<div class="activity">(.*?)</div>\s*</div>\s*</div>z3<div class="activity">(.*?)</div>\s*</div>\s*</div>r   r   z<a[^>]+href="([^"]+)"[^>]*>z0\.(?:pdf|docx?|xlsx?|zip|rar|wps|et|dps)(?:\?|$))r	   r   r   r   ÚfindallÚIr   )r   Úurlr#   ÚbodyÚattsÚas         r   Úparse_detailr4   P   s¥   € ä
�	‰	Ð`ÐbkÔmo×mqÑmqÓr€AÙÜ�I‰IÐLÈiÔY[×Y]ÑY]Ó^ˆÙØ�2ˆvˆØ�7‰7�1‹:€DÜ�:‰:Ð4°dÓ;€DØ%)Öu ¬R¯Y©YÐ7jÐlmÔoq×osÑosÕ-tŒG�C˜�OÐu€DÐuØ�ˆ:Ðùò vs   Á>*B=Â)B=c                 ó  ‡— g Šˆfd„}t        j                  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|«      }|j                  «       S c c}w c c}w )u(   HTML -> æ–‡æœ¬, ä¿�ç•™è¡¨æ ¼ã€�

 åˆ†æ®µ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_tbl`   s.   ø€ Ø�‰�a—g‘g˜a“jÔ!Øœ˜V› Q™˜ rÐ*Ð*r   z<table[\s\S]*?</table>z"</?(?:p|div|tr|br|h[1-6]|li)[^>]*>ú
z.</?(?:span|font|b|strong|i|em|u|o:p|o|a)[^>]*>r   z\n{3,}ú

r7   r8   )r	   r
   Úsplitr   ÚjoinÚ	enumerateÚreplace)	r   r;   ÚlnÚlinesr*   ÚtextÚir   r:   s	           @r   Úhtml_to_textrF   ]   sõ   ø€ à€Fô+ô —‘Ð0°)¸YÓG€IÜ—‘Ð<¸dÀIÓN€IÜ—‘ÐHÈ"ÈiÓX€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Ø�:‰:‹<Ðùò 9ùÚ
$s   Á8DÂD	ÂD	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 �]e  }	|	dk(  rt"        }
nd|	› d�}
	 t%        j&                  |
t(        d¬«      }d|_        t1        |j2                  |
«      }t/        d|	› dt5        |«      › d|
› �«       |sŒp|D �]Û  \  }}}	 |j7                  d||f«       |j9                  «       d   dkD  r|dz  }Œ9t%        j&                  |t(        d¬«      }d|_        t;        j<                  d|j2                  t:        j>                  «      }|r5t;        j@                  dd|jC                  d«      «      }tE        |«      }|r|}tG        |j2                  |«      \  }}|jI                  «       st/        d|d d › �«       ŒýtK        |«      }|rdjM                  |«      nd}tO        jP                  ||d d z   jS                  d«      «      jU                  «       }|r|d d nd}|j7                  dtV        ||||d|ddd|dd|tX        d |v rdnd|f«       |j7                  d!|jZ                  |tV        |f«       |j]                  «        |dz  }t/        d"|› d#|d d$ › �«       �ŒÞ t_        j`                  d&«       �Œh |jc                  «        t/        d'|› d(|› d)|› �«       y # t,        $ r$}t/        d|	› d|
› d|› �«       |dz  }Y d }~�Œ¶d }~ww xY w# t,        $ r$}|dz  }t/        d%|d d › d|› �«       Y d }~�Œtd }~ww xY w)*Nz--pagesr   u   æŠ“å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--dbz/mnt/data/search.dbu   SQLite æ•°æ�®åº“è·¯å¾„)rI   rJ   z--script-name)rI   z/mnt/r   z#http://www.kmdc.gov.cn/gsthj/index_z.shtmlé   )ÚheadersÚtimeoutzutf-8ú[u   ] è¯·æ±‚å¤±è´¥ z: u	   ] åˆ—è¡¨ u    æ�¡ zASELECT COUNT(*) FROM gov_raw WHERE source_url=? AND script_name=?z&<div class="content">\s*<h1>(.*?)</h1>z<[^>]+>r   u     è·³è¿‡ç©ºæ­£æ–‡: 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
    / é”™è¯¯ )2Ú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,   rD   r9   ÚexecuteÚfetchoner	   r   r   r
   r   r   r4   r   rF   r?   ÚhashlibÚmd5ÚencodeÚ	hexdigestÚ	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathrX   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countÚpager0   ÚrÚer!   r%   Úart_urlÚpub_dateÚdrÚhmÚftÚcontent_htmlr2   ÚcontentÚatt_txtrk   Úsummarys                             r   Úmainr‰   p   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ä�a˜Ÿ™ a™Ó(ó 7ˆØ�1Š9Ü‰Cà7¸°v¸VÐDˆCð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJô
 ˜1Ÿ6™6 3Ó'ˆÜ��$��y¤ U£ ¨E°#°Ð7Ô8ÙØØ(-ó &	2Ñ$ˆE�7˜Hð%2Ø—‘Ð_ÐbiÐkvÐawÔxØ—<‘<“> !Ñ$ qÒ(Ø ‘N�IØÜ—\‘\ '´7ÀBÔG�Ø%�”ä—Y‘YÐHÈ"Ï'É'ÔSU×SWÑSWÓX�ÙÜŸ™ 
¨B°·±¸³Ó<�BÜ$ R›�BÙØ "˜Ü%1°"·'±'¸7Ó%CÑ"�˜dØ#×)Ñ)Ô+ÜÐ/°°c°r°
¨|Ð<Ô=ØÜ& |Ó4�Ù/3˜&Ÿ+™+ dÔ+¸�Ü—k‘k 5¨7°4°C¨=Ñ#8×"@Ñ"@ÀÓ"IÓJ×TÑTÓV�Ù+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ðG&	2ôN 	�
‰
�3Žðo7ðr 	‡J�J„LÜ	ˆO˜I˜; j°°¸:ÀiÀ[Ð
QÕRøôe ò 	Ü�A�d�V˜?¨3¨%¨r°!°Ð5Ô6Ø˜‰NˆIÝûð	ûôX ò 2Ø˜Q‘�	Ü˜˜u S b˜z˜l¨"¨Q¨CÐ0×1Ò1ûð2ús>   Ä#NÅ0/N3Æ CN3É$CN3Î	N0ÎN+Î+N0Î3	O Î<OÏO Ú__main__)Ú__doc__rQ   rj   rY   r	   r\   rr   Úhtmlr   Úurllib.parser   rb   ÚBASE_URLra   rn   rU   ro   rd   r   r,   r4   rF   r‰   Ú__name__© r   r   ú<module>r‘      s„   ðñ
ó Û Û 	Û 	Û Û Ý Ý  ã à#€Ø*€Ø9€	Ø"€Ø€
ð @ØOØ'ñ€òòòB
òò&LSð^ ˆzÒÙ…Fð r   