Ë
    ¸¬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d„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uc  
æ½žåŸŽåŒºäººæ°‘æ”¿åºœ(www.lc.gov.cn, å±±è¥¿é•¿æ²»æ½žåŸŽ) - æ½žåŸŽç»�æµŽæŠ€æœ¯å¼€å�‘åŒºå…¬å‘Šå…¬ç¤º
URL: http://www.lc.gov.cn/ztzl/33025/9652/
CMS: è‡ªå®šä¹‰ + TRS_Editor æ­£æ–‡
åˆ—è¡¨: div.aon-con > ul > li > a + span(æ—¥æœŸ)
åˆ†é¡µ: index_N.html (JS ç”Ÿæˆ�, countPage=2)
è¯¦æƒ…: div.article-con > div.trs_editor_view
ç”Ÿäº§åº“ 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.lc.gov.cn/ztzl/33025/9652/u+   æ½žåŸŽåŒºäººæ°‘æ”¿åºœ-ç»�å¼€åŒºå…¬å‘Šå…¬ç¤ºzcrawl_lc_tzgg.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| «      j                  «       } | S )u2   æ¸…æ´—æ ‡é¢˜: strip &middot;&nbsp; ç­‰å®žä½“å‰�ç¼€Ú u   ^\s*(?:&middot;|Â·|&nbsp;|\s)+ú\s+ú )r   ÚreÚsubÚstrip)Úts    ú"/root/gov_crawler/crawl_lc_tzgg.pyÚclean_titler   &   sC   € ä�’�bÓ€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØ€Hó    c                 ób  — g }t        j                  dt         j                  «      }|j                  | «      D ]´  }|j	                  d«      |j	                  d«      |j	                  d«      j                  «       }}}|j                  d«      st        ||«      }d|vsd|vrd|vrŒnt        |«      }|sŒ|t        j                  d	d
|«      j                  «       }|j                  |||f«       Œ¶ t        «       }g }	|D ]/  }
|
d   |vsŒ|j                  |
d   «       |	j                  |
«       Œ1 |	S )u¾   è§£æž�åˆ—è¡¨é¡µ, è¿”å›ž [(title, url, date), ...]
    æ³¨æ„�: åˆ—è¡¨é¡µæ ‡é¢˜è¢«ç«™ç‚¹æˆªæ–­(å¸¦çœ�ç•¥å�·), æ­¤å¤„ title ä»…ä½œå� ä½�,
    å…¥åº“å‰�ä»Žè¯¦æƒ…é¡µ <h2> æ��å�–å®Œæ•´æ ‡é¢˜.
    zP<li>\s*<a href="([^"]+)"[^>]*>\s*([^<]+?)\s*</a>\s*<span>([^<]+?)</span>\s*</li>é   é   é   )zhttp://zhttps://z/ztzl/33025/9652/Út2026Út2025r   r	   )r
   ÚcompileÚSÚfinditerÚgroupr   Ú
startswithr   r   r   ÚappendÚsetÚadd)Ú	html_textÚbase_urlÚitemsÚpatÚmÚhrefÚtitleÚdateÚseenÚoutÚits              r   Ú
parse_listr*   .   s$  € ð
 €EÜ
�*‰*Ø[Ü
�‰ó€Cð �\‰\˜)Ó$ò *ˆØŸG™G A›J¨¯©°«
°A·G±G¸A³J×4DÑ4DÓ4F�TˆeˆØ�‰Ð6Ô7Ü˜8 TÓ*ˆDà dÑ*¨g¸TÑ.AÀgÐUYÑFYØÜ˜EÓ"ˆÙØä�v‰v�f˜c 4Ó(×.Ñ.Ó0ˆØ�‰�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                  «      }|r5t        j                  dd|j	                  d«      «      }t        |«      }|r|S |S )u6   ä»Žè¯¦æƒ…é¡µæ��å�–å®Œæ•´æ ‡é¢˜ (div.con1 > div.t > h2)z,<div class="t">\s*<h3></h3>\s*<h2>(.*?)</h2>z<h2>(.*?)</h2>z<[^>]+>r   r   )r
   Úsearchr   r   r   r   )r   Úfallbackr#   r   s       r   Úextract_full_titler.   N   sf   € ä
�	‰	ÐAÀ9ÌbÏdÉdÓS€AÙÜ�I‰IÐ'¨´B·D±DÓ9ˆÙÜ�F‰F�:˜r 1§7¡7¨1£:Ó.ˆÜ˜‹NˆÙØˆHØ€Or   c                 óÒ  — t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|sdg fS |j                  d«      }t        j                  dd|t         j                  ¬«      }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)zW<div class="article-con">\s*<div class="trs_editor_view[^"]*"[^>]*>(.*?)</div>\s*</div>z2<div class="trs_editor_view[^"]*"[^>]*>(.*?)</div>r   r   z
<!--.*?-->)Úflagsz<a[^>]+href="([^"]+)"[^>]*>z0\.(?:pdf|docx?|xlsx?|zip|rar|wps|et|dps)(?:\?|$))r
   r,   r   r   r   ÚfindallÚIr   )r   Úurlr#   ÚbodyÚattsÚas         r   Úparse_detailr7   [   s¿   € ô 	�	‰	ÐlÐnwÔy{×y}Ñy}Ó~€AÙä�I‰IÐKÈYÔXZ×X\ÑX\Ó]ˆÙØ�2ˆvˆØ�7‰7�1‹:€Dä�6‰6�-  T´·±Ô6€Dä�:‰:Ð4°dÓ;€DØ%)Öu ¬R¯Y©YÐ7jÐlmÔoq×osÑosÕ-tŒG�C˜�OÐu€DÐuØ�ˆ:Ðùò vs   Â%*C$ÃC$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_tblp   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,}ú

r:   r;   )r
   r   Úsplitr   ÚjoinÚ	enumerateÚreplace)	r   r>   ÚlnÚlinesr(   ÚtextÚir   r=   s	           @r   Úhtml_to_textrI   m   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 �]  }	|	dk(  rt"        }
n	d|	dz
  › d�}
	 t%        j&                  |
t(        d¬«      }d|_        t1        |j2                  |
«      }t/        d|	› dt5        |«      › d|
› �«       |sŒs|D �]‹  \  }}}	 |j7                  d||f«       |j9                  «       d   dkD  r|dz  }Œ9t%        j&                  |t(        d¬«      }d|_        t;        |j2                  |«      }t=        |j2                  |«      \  }}|j?                  «       st/        d|d d › �«       Œ­tA        |«      }|rdjC                  |«      nd}tE        jF                  ||d d z   jI                  d«      «      jK                  «       }|r|d d nd}|j7                  dtL        ||||d|ddd|dd|tN        d|v rdnd|f«       |j7                  d|jP                  |tL        |f«       |jS                  «        |dz  }t/        d |› d!|d d" › �«       �ŒŽ tU        jV                  d$«       �Œ |jY                  «        t/        d%|› d&|› d'|› �«       y # t,        $ r$}t/        d|	› d|
› d|› �«       |dz  }Y d }~�Œid }~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 æ•°æ�®åº“è·¯å¾„)rL   rM   z--script-name)rL   z/mnt/r   z+http://www.lc.gov.cn/ztzl/33025/9652/index_z.htmlé   )ÚheadersÚtimeoutzutf-8ú[u   ] è¯·æ±‚å¤±è´¥ z: u	   ] åˆ—è¡¨ u    æ�¡ zASELECT COUNT(*) FROM gov_raw WHERE source_url=? AND script_name=?u     è·³è¿‡ç©ºæ­£æ–‡: r@   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*   rG   r<   ÚexecuteÚfetchoner.   r7   r   rI   rB   ÚhashlibÚmd5ÚencodeÚ	hexdigestÚ	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathr[   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countÚpager3   ÚrÚer!   r%   Úart_urlÚpub_dateÚdrÚ
full_titleÚcontent_htmlr5   ÚcontentÚatt_txtrn   Ú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ä�a˜Ÿ™ a™Ó(ó 2ˆØ�1Š9Ü‰Cà?ÀÀQÁ¸xÀuÐMˆ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�Ø%�”ä/°·±¸Ó?�
Ü%1°"·'±'¸7Ó%CÑ"�˜dØ#×)Ñ)Ô+ÜÐ/°°c°r°
¨|Ð<Ô=ØÜ& |Ó4�Ù/3˜&Ÿ+™+ dÔ+¸�Ü—k‘k :°¸¸°Ñ#=×"EÑ"EÀgÓ"NÓO×YÑYÓ[�Ù+2˜' $ 3™-¸�Ø—‘ðAä ¨°*¸hÈÈ7ÐTVÐXZÐ\]Ð_fÐhjØ˜g¤z¸ÀGÑ8K±1ÐQRÐT_ðaôð —‘Ø`Ø—]‘] J´	¸7ÐCôð —‘”Ø˜Q‘�	Ü˜˜X˜J a¨
°3°B¨Ð'8Ð9Ö:ð=!	2ôD 	�
‰
�3Žðe2ðh 	‡J�J„LÜ	ˆO˜I˜; j°°¸:ÀiÀ[Ð
QÕRøô[ ò 	Ü�A�d�V˜?¨3¨%¨r°!°Ð5Ô6Ø˜‰NˆIÝûð	ûôN ò 2Ø˜Q‘�	Ü˜˜u S b˜z˜l¨"¨Q¨CÐ0×1Ò1ûð2ús>   Ä#L6Å3/M&Æ#A3M&ÈCM&Ì6	M#Ì?MÍM#Í&	NÍ/NÎNÚ__main__)r   )Ú__doc__rT   rm   r\   r
   r_   ru   Úhtmlr   Úurllib.parser   re   ÚBASE_URLrd   rq   rX   rr   rg   r   r*   r.   r7   rI   r‹   Ú__name__© r   r   ú<module>r“      s‰   ðñ
ó Û Û 	Û 	Û Û Ý Ý  ã à2€Ø2€Ø9€	Ø €Ø€
ð @ØOØ'ñ€òòó@
òò$ò&GSðT ˆzÒÙ…Fð r   