Ë
    ¸¬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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)u‡  
å¤§ä½™åŽ¿äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤æ �ç›®çˆ¬è™«
URL: https://www.jxdy.gov.cn/dyxxxgk/dyhjbh/xxgk_list.shtml
æ �ç›®: æ³•å®šä¸»åŠ¨å…¬å¼€å†…å®¹ > é‡�ç‚¹é¢†åŸŸä¿¡æ�¯å…¬å¼€ > å…¬å…±ç›‘ç®¡ > ç”Ÿæ€�çŽ¯å¢ƒ > çŽ¯å¢ƒä¿�æŠ¤
CMS: TRS (createPageHTML é�™æ€�åˆ†é¡µ, xxgk_list_N.shtml)
åˆ—è¡¨: ul.newsList > li > a[title] + span.time
è¯¦æƒ…: div.zoomcon > UCAPCONTENT
ç”Ÿäº§åº“ 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https://www.jxdy.gov.cnz6https://www.jxdy.gov.cn/dyxxxgk/dyhjbh/xxgk_list.shtmlu"   å¤§ä½™åŽ¿äººæ°‘æ”¿åºœ-çŽ¯å¢ƒä¿�æŠ¤zcrawl_jxdy_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*å¤§ä½™åŽ¿ä¿¡æ�¯å…¬å¼€\s*$z\s+ú )r   ÚreÚsubÚstrip)Úts    ú$/root/gov_crawler/crawl_jxdy_hjbh.pyÚclean_titler   '   sV   € ä�’�bÓ€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰Ð3°R¸Ó;€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|j                  |||f«       Œ‰ t        «       }g }	|D ]/  }
|
d   |vsŒ|j                  |
d   «       |	j                  |
«       Œ1 |	S )u1   è§£æž�åˆ—è¡¨é¡µ, è¿”å›ž [(title, url, date), ...]zl<li>\s*<a href="([^"]+)"[^>]*title="([^"]*)"[^>]*>.*?</a>\s*<span class="time">\s*([^<]+?)\s*</span>\s*</li>é   é   é   )zhttp://zhttps://z/dyhjbh/)r	   ÚcompileÚSÚfinditerÚgroupr   Ú
startswithr   r   ÚappendÚsetÚadd)Ú	html_textÚbase_urlÚitemsÚpatÚmÚhrefÚtitleÚdateÚseenÚoutÚits              r   Ú
parse_listr'   0   sú   € à€EÜ
�*‰*ð	<ä
�‰ó€Cð
 �\‰\˜)Ó$ò 	*ˆØŸG™G A›J¨¯©°«
°A·G±G¸A³J×4DÑ4DÓ4F�TˆeˆØ�‰Ð6Ô7Ü˜8 TÓ*ˆDØ˜TÑ!ØÜ˜EÓ"ˆÙØØ�‰�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|«      }t        j                  d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)z <UCAPCONTENT>(.*?)</UCAPCONTENT>zC<div[^>]*(?:id|class)="[^"]*zoomcon[^"]*"[^>]*>(.*?)</div>\s*</div>r   r   z^\s*<UCAPCONTENT>z</UCAPCONTENT>\s*$z<a[^>]+href="([^"]+)"[^>]*>z0\.(?:pdf|docx?|xlsx?|zip|rar|wps|et|dps)(?:\?|$))r	   Úsearchr   r   r
   ÚfindallÚIr   )r   Úurlr    ÚbodyÚattsÚas         r   Úparse_detailr0   K   sÈ   € ä
�	‰	Ð5°yÄ"Ç$Á$ÓG€AÙÜ�I‰IÐ\Ð^gÔik×imÑimÓnˆÙØ�2ˆvˆØ�7‰7�1‹:€Dä�6‰6Ð&¨¨DÓ1€DÜ�6‰6Ð'¨¨TÓ2€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_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,}ú

r3   r4   )r	   r
   Úsplitr   ÚjoinÚ	enumerateÚreplace)	r   r7   ÚlnÚlinesr%   ÚtextÚir   r6   s	           @r   Úhtml_to_textrB   [   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�}
	 t%        j&                  |
t(        d¬«      }d|_        t1        |j2                  |
«      }t/        d|	› dt5        |«      › d|
› �«       |sŒp|D �]u  \  }}}	 |j7                  d||f«       |j9                  «       d   dkD  r|dz  }Œ9t%        j&                  |t(        d¬«      }d|_        t;        |j2                  |«      \  }}|j=                  «       st/        d|d d › �«       Œ—t?        |«      }|rdjA                  |«      nd}tC        jD                  ||d d z   jG                  d«      «      jI                  «       }|r|d d nd}|j7                  dtJ        ||||d|ddd|dd|tL        d|v rdnd|f«       |j7                  d|jN                  |tJ        |f«       |jQ                  «        |dz  }t/        d |› d!|d d" › �«       �Œx tS        jT                  d$«       �Œ |jW                  «        t/        d%|› d&|› d'|› �«       y # t,        $ r$}t/        d|	› d|
› d|› �«       |dz  }Y d }~�ŒPd }~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 æ•°æ�®åº“è·¯å¾„)rE   rF   z--script-name)rE   z/mnt/r   z1https://www.jxdy.gov.cn/dyxxxgk/dyhjbh/xxgk_list_z.shtmlé   )ÚheadersÚtimeoutzutf-8ú[u   ] è¯·æ±‚å¤±è´¥ z: u	   ] åˆ—è¡¨ u    æ�¡ zASELECT COUNT(*) FROM gov_raw WHERE source_url=? AND script_name=?u     è·³è¿‡ç©ºæ­£æ–‡: r9   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'   r@   r5   ÚexecuteÚfetchoner0   r   rB   r;   ÚhashlibÚmd5ÚencodeÚ	hexdigestÚ	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathrT   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countÚpager,   ÚrÚer   r"   Úart_urlÚpub_dateÚdrÚcontent_htmlr.   ÚcontentÚatt_txtrg   Úsummarys                           r   Úmainrƒ   n   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™Ó(ó 0ˆØ�1Š9Ü‰CàEÀdÀVÈ6ÐRˆ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 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ð9	2ô@ 	�
‰
�3Žða0ðd 	‡J�J„LÜ	ˆO˜I˜; j°°¸:ÀiÀ[Ð
QÕRøôW ò 	Ü�A�d�V˜?¨3¨%¨r°!°Ð5Ô6Ø˜‰NˆIÝûð	ûôJ ò 2Ø˜Q‘�	Ü˜˜u S b˜z˜l¨"¨Q¨CÐ0×1Ò1ûð2ús>   Ä#LÅ0/MÆ AMÇ>CMÌ	M
Ì&MÍM
Í	M:ÍM5Í5M:Ú__main__)Ú__doc__rM   rf   rU   r	   rX   Úsysrn   Úhtmlr   Úurllib.parser   r^   ÚDOMAINr]   rj   rQ   rk   r`   r   r'   r0   rB   rƒ   Ú__name__© r   r   ú<module>rŒ      s†   ðñ
ó Û Û 	Û 	Û Û 
Û Ý Ý  ã à	"€ØC€Ø0€	Ø"€Ø€
ð @ØOØ'ñ€òòò6ò ò&ESðP ˆzÒÙ…Fð r   