Ë
    ¸¬ujT!  ã                   óº   — 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
Z
dZdZdZdZddd	œZd
Zg d¢ZddddddddœZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u-  
crawl_jmdbq_hjbh.py â€” è�†é—¨å¸‚ä¸œå®�åŒºäººæ°‘æ”¿åºœã€Œç”Ÿæ€�çŽ¯å¢ƒã€�3 ä¸ªç²¾å‡†å­�æ �ç›®
http://www.jmdbq.gov.cn/col/col2535/index.html (è�šå�ˆé¡µ: çŽ¯å¢ƒå½±å“�è¯„ä»·27235 + ç”Ÿæ€�çŽ¯ä¿�å®£ä¼ 27236 + çŽ¯ä¿�ç�£å¯Ÿ27237)
TRS WCM ç³»:
- åˆ—è¡¨: col2535 è�šå�ˆé¡µä»…å�„å­�æ �ç›® 5 æ�¡; ç²¾å‡†å­�æ �ç›® col27235/27236/27237 å�•é¡µå…¨é‡�(24/20/12 æ�¡)
- åˆ†é¡µ API: POST /module/web/jpage/dataproxy.jsp (formç¼–ç �, startrecord/endrecord/perpage + col/webid/columnid/unitid/webname/permissiontype)
    è¿”å›ž XML: <record><![CDATA[<li><a href title>æ ‡é¢˜</a><span>æ—¥æœŸ</span></li>]]></record>
- è¯¦æƒ…: /art/YYYY/M/D/art_{col}_{id}.html
    æ ‡é¢˜ div.con-title, æ—¥æœŸ span.date(å�‘å¸ƒæ—¥æœŸï¼š2026-06-29 16:09), æ­£æ–‡ ContentStartâ†’ZJEG_RSS.content.end
- é™„ä»¶: æ­£æ–‡å†… a æ ‡ç­¾(å¦‚æœ‰), å†…åµŒURLä¿�ç•™
é    Nzhttp://www.jmdbq.gov.cnu   è�†é—¨å¸‚ä¸œå®�åŒºç”Ÿæ€�çŽ¯å¢ƒzcrawl_jmdbq_hjbh.pyu   æ¹–åŒ—zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Languageé   ))icj  u   çŽ¯å¢ƒå½±å“�è¯„ä»·)idj  u   ç”Ÿæ€�çŽ¯ä¿�å®£ä¼ )iej  u   çŽ¯ä¿�ç�£å¯Ÿé   é&   ú/Ú321696u   ä¸œå®�åŒºäººæ°‘æ”¿åºœ)ÚcolÚwebidÚpathÚsourceContentTypeÚunitidÚwebnameÚpermissiontypec                 óÈ   — | sy| j                  «       } t        j                  dd| t        j                  ¬«      } | j                  «       } t        j                  dd| «      } | S )u=   æ ‡é¢˜æ¸…æ´—: strip &middot;&nbsp;&#32; å®žä½“å‰�ç¼€ä¸Žç©ºç™½Ú z&middot;|&nbsp;|&#160;|&#32;©Úflagsz\s+ú )ÚstripÚreÚsubÚI)Úts    ú%/root/gov_crawler/crawl_jmdbq_hjbh.pyÚclean_titler   4   sN   € áØØ	�‰‹	€AÜ
�‰Ð.°°A¼R¿T¹TÔB€AØ	�‰‹	€AÜ
�‰ˆv�s˜AÓ€AØ€Hó    c           	      ó  ‡— | }g Šˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }t        j                  dd|t         j                  t         j                  z  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd	|t         j                  ¬«      }t        j                  d
d|«      }t	        j
                  |«      }t        ‰d«      D ]&  \  }\  }}}|j                  d|› d�d|› d|› d�«      }Œ( t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       ‰fS )uP   HTML -> æ–‡æœ¬, ä¿�ç•™ a é“¾æŽ¥(å†…åµŒURL)ä¸Žè¡¨æ ¼, åŽ» script/style, 

 åˆ†æ®µc                 óž  •— | j                  d«      | j                  d«      }}t        j                  dd|«      }t        j                  |«      j                  «       }|r"|j                  d«      s|j                  d«      r|xs dS t        j                  j                  t        |«      }‰j                  |||f«       dt        ‰«      › d�S )	Nr   é   ú<[^>]+>r   ú#Ú
javascriptÚ__LINK__Ú__)Úgroupr   r   Úhtml_libÚunescaper   Ú
startswithÚurllibÚparseÚurljoinÚBASEÚappendÚlen)ÚmÚhrefÚtxtÚabs_urlÚlinkss       €r   Ú
_link_replz html_to_text.<locals>._link_replD   s¦   ø€ Ø—G‘G˜A“J §¡¨£
ˆcˆÜ�f‰f�Z  SÓ)ˆÜ×Ñ Ó$×*Ñ*Ó,ˆÙ�d—o‘o cÔ*¨d¯o©o¸lÔ.KØ’9˜"ÐÜ—,‘,×&Ñ&¤t¨TÓ2ˆØ�‰�d˜G SÐ)Ô*Øœ#˜e›*˜ RÐ(Ð(r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>r   z<(script|style)[^>]*>.*?</\1>r   z</(p|div|li|tr|h[1-6]|br)>ú

z<(p|div|li|tr|h[1-6]|br)[^>]*>ú
r   r   r"   r#   z	<a href="z" target="_blank">z</a>z\rz\n{3,}z[ \t\u00a0]+r   )	r   r   ÚSr   r%   r&   Ú	enumerateÚreplacer   )Úhtml_segÚsegr3   Úir/   r1   r0   r2   s          @r   Úhtml_to_textr<   ?   sH  ø€ à
€CØ€Eô)ô �&‰&Ð:¸JÈÔSU×SWÑSWÔZ\×Z^ÑZ^ÑS^Ô
_€Cä
�&‰&Ð1°2°sÄ"Ç$Á$ÌÏÉÁ+Ô
N€Cä
�&‰&Ð.°¸Ä2Ç4Á4Ô
H€CÜ
�&‰&Ð2°D¸#ÄRÇTÁTÔ
J€CÜ
�&‰&�˜R Ó
%€CÜ
×
Ñ
˜CÓ
 €Cä#,¨U°AÓ#6ò ^ÑˆÑˆD�'˜3Ø�k‰k˜H Q C rÐ*¨i¸°yÐ@RÐSVÐRWÐW[Ð,\Ó]‰ð^ä
�&‰&�˜˜CÓ
 €CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&� # sÓ
+€CØ�9‰9‹;˜ÐÐr   c           
      óN  — t        t        «      }||d<   d|d<   d|d<   d|d<   	 | j                  t        dz   i t        ¥t        › d|› d	�d
dœ¥|t
        ¬«      }d|_        |j                  }g }t        j                  d|t        j                  «      D ]å  }|j                  d«      }	t        j                  d|	t        j                  «      }
|
sŒ<|
j                  d«      }t        |
j                  d«      xs& t        j                   dd|
j                  d«      «      «      }t"        j$                  j'                  t        |«      }|
j                  d«      j)                  «       }|j+                  |||f«       Œç |S # t        $ r}t        d|› d|› �«       g cY d}~S d}~ww xY w)uP   é€šè¿‡ dataproxy API èŽ·å�–å­�æ �ç›®å…¨éƒ¨æ�¡ç›® -> [(title, art_url, pub_date)]Úcolumnidr   Ústartrecordi'  Ú	endrecordÚperpagez/module/web/jpage/dataproxy.jspz/col/colz/index.htmlÚXMLHttpRequest)ÚRefererzX-Requested-With)ÚheadersÚdataÚtimeoutúutf-8z	[ERR] colz dataproxy: Nz&<record><!\[CDATA\[(.*?)\]\]></record>zEhref="([^"]+)"[^>]*title="([^"]*)"[^>]*>(.*?)</a><span>([^<]+)</span>r   r   r   é   é   )ÚdictÚ
PROXY_BASEÚpostr+   ÚHEADERSÚTIMEOUTÚencodingÚ	ExceptionÚprintÚtextr   Úfinditerr6   r$   Úsearchr   r   r(   r)   r*   r   r,   )Úsessionr>   ÚnamerE   ÚrÚeÚxmlÚoutr.   r:   Úlmr/   ÚtitleÚart_urlÚpubs                  r   Úfetch_columnr_   _   s�  € ä”
Ó€DØ€DˆÑØ€DˆÑØ€DˆÑØ€Dˆ�Oð	Ø�L‰LÜÐ4Ñ4ð;”wð ;¬d¨V°8¸H¸:À[Ð+QØ)9ò;àœwð	 ó (ˆð
 ˆŒ
ð �&‰&€CØ
€CÜ�[‰[ÐBÀCÌÏÉÓNò 	*ˆØ�g‰g�a‹jˆÜ�Y‰YÐ_ÐadÔfh×fjÑfjÓkˆÙØØ�x‰x˜‹{ˆÜ˜BŸH™H Q›KÒN¬2¯6©6°*¸bÀ"Ç(Á(È1Ã+Ó+NÓOˆÜ—,‘,×&Ñ&¤t¨TÓ2ˆØ�h‰h�q‹k×ÑÓ!ˆØ�
‰
�E˜7 CÐ(Õ)ð	*ð €Jøô ò Ü�	˜(˜ <°¨sÐ3Ô4Ø�	ûðús   ¥<E> Å>	F$ÆFÆF$ÆF$c                 óð  — t        j                  d| t         j                  «      }|rt        |j	                  d«      «      nd}|sSt        j                  d| t         j                  «      }|r,t        |j	                  d«      j                  d«      d   «      }t        j                  d| «      }d}|rGd|j	                  d«      t        |j	                  d	«      «      t        |j	                  d
«      «      fz  }d}t        j                  d| «      }t        j                  d| «      }|r@|j                  «       }|r|j                  «       n
t        | «      }	| ||	 j                  «       }|xs d|xs d|g fS )u4   è¯¦æƒ…é¡µ -> (title, publish_date, body_html, links)z$<p class="con-title">\s*(.*?)\s*</p>r   r   z<title>(.*?)</title>ú-r   u0   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dr   rH   z<meta name=\"ContentStart\">zZJEG_RSS\.content\.endN)r   rT   r6   r   r$   ÚsplitÚintÚendÚstartr-   r   )
Úhtml_srcr]   r.   r\   ÚpublishÚ	body_htmlÚstart_mÚend_mÚsrX   s
             r   Úparse_detailrl      s-  € ô 	�	‰	Ð9¸8ÄRÇTÁTÓJ€AÙ'(ŒK˜Ÿ™ ›
Ô#¨b€EÙÜ�I‰IÐ-¨x¼¿¹Ó>ˆÙÜ §¡¨£
× 0Ñ 0°Ó 5°aÑ 8Ó9ˆEä
�	‰	ÐEÀxÓP€AØ€GÙØ  A§G¡G¨A£J´°A·G±G¸A³J³ÄÀQÇWÁWÈQÃZÃÐ#QÑQˆà€IÜ�i‰iÐ7¸ÓB€GÜ�I‰IÐ/°Ó:€EÙØ�K‰K‹MˆÙ"ˆE�K‰KŒM¬¨H«ˆØ˜Q˜q�M×'Ñ'Ó)ˆ	ØŠ=�D˜'š/ T¨9°bÐ8Ð8r   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                  |d¬«      }|j                  «       }|j                  d«       d}d}d}t!        j"                  «       }	t$        D �]¢  \  }
}t'        |	|
|«      }t)        d|› d|
› dt+        |«      › d�«       |D �]V  \  }}}	 |j                  d||f«       |j-                  «       d   dkD  r|dz  }Œ9|	j/                  |t0        t2        ¬«      }d|_        t7        |j8                  |«      \  }}}}|j;                  «       st)        d|d d › �«       |dz  }Œž|r|}|r|}t=        |«      \  }}|rdj?                  d„ |D «       «      nd}|r|d d nd}|j                  dt@        ||||d|ddd|dd|tB        d|v rdnd|f«       |j                  d |jD                  |t@        |f«       |jG                  «        |dz  }t)        d!|› d"|d d# › �«       �ŒY tK        jL                  d&«       �Œ¥ |jO                  «        t)        d'|› d(|› d)|› �«       y # tH        $ r$}|dz  }t)        d$|d d › d%|› �«       Y d }~�Œ¿d }~ww xY w)*Nz--pagesr   u4   æŠ“å�–é¡µæ•°(æ¯�å­�æ �ç›®é¡µæ•°, è¯¥ç«™å�•é¡µå…¨é‡�))ÚtypeÚdefaultÚhelpz--dbz/mnt/data/search.dbu   SQLite æ•°æ�®åº“è·¯å¾„)ro   rp   z--script-name)ro   z/mnt/é<   )rF   zPRAGMA busy_timeout=60000r   ú[z colz] API u    æ�¡z?SELECT COUNT(*) FROM gov_raw WHERE page_url=? AND script_name=?)rD   rF   rG   u     è·³è¿‡ç©ºæ­£æ–‡: r   r4   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )Ú.0Úas     r   ú	<genexpr>zmain.<locals>.<genexpr>Â   s   è ø€ Ò%>¨q a¨¥dÑ%>ù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 z: g333333Ó?u   å®Œæˆ�: æ–°å¢ž u
    / é‡�å¤� u
    / é”™è¯¯ )(ÚargparseÚArgumentParserÚadd_argumentrc   ÚSCRIPT_NAMEÚ
parse_argsÚdbÚscript_namer'   Úosr
   Ú
expanduserÚsqlite3ÚconnectÚcursorÚexecuteÚrequestsÚSessionÚCOLUMNSr_   rQ   r-   ÚfetchoneÚgetrM   rN   rO   rl   rR   r   r<   ÚjoinÚ	SITE_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitrP   ÚtimeÚsleepÚclose)ÚapÚargsÚdb_pathr€   ÚconnÚcurÚ	new_countÚ	dup_countÚ	err_countrU   r>   ÚcnameÚitemsr\   r]   Úpub_dateÚdrÚd_titleÚd_dateÚcontent_htmlr2   ÚcontentÚ	links_outÚatt_txtÚsummaryrX   s                             r   Úmainr§   ˜   s  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°Ð9o€OÔpØ‡O�O�FÐ$9Ð@X€OÔYØ‡O�O�O¬[€OÔ9Ø�=‰=‹?€Dà�g‰g€GØ×"Ñ"€KØ×Ñ˜gÔ&Ü—'‘'×$Ñ$ WÓ-ˆä�?‰?˜7¨BÔ/€DØ
�+‰+‹-€CØ‡K�KÐ+Ô,Ø€IØ€IØ€Iä×ÑÓ €Gä"ó '‰ˆ�%Ü˜W h°Ó6ˆÜ��%�˜˜X˜J f¬S°«Z¨L¸Ð=Ô>Ø(-ó #	2Ñ$ˆE�7˜Hð"2Ø—‘Ð]Ð`gÐitÐ_uÔvØ—<‘<“> !Ñ$ qÒ(Ø ‘N�IØØ—[‘[ ´'Ä7�[ÓK�Ø%�”Ü7CÀBÇGÁGÈWÓ7UÑ4�˜ ¨uØ#×)Ñ)Ô+ÜÐ/°°c°r°
¨|Ð<Ô=Ø ‘N�IØÙØ#�EÙØ%�HÜ%1°,Ó%?Ñ"�˜ÙBK˜&Ÿ+™+Ñ%>°IÔ%>Ô>ÐQS�Ù+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ŽðO'ðR 	‡J�J„LÜ	ˆO˜I˜; j°°¸:ÀiÀ[Ð
QÕRøô ò 2Ø˜Q‘�	Ü˜˜u S b˜z˜l¨"¨Q¨CÐ0×1Ò1ûð2ús&   Å/KÅ6A$KÇB9KË	LËK<Ë<LÚ__main__)Ú__doc__rz   Úhtmlr%   r�   r   rƒ   r‘   Úurllib.parser(   r‡   r+   r�   r}   rŽ   rM   rN   r‰   rK   r   r<   r_   rl   r§   Ú__name__rt   r   r   ú<module>r­      s¢   ðñ
ó Û Û 	Û 	Û Û Û ã à €Ø,€	Ø#€Ø€
àØ'ñ€ð €ò€ð ØØØØØ&Øñ€
òòò@ò@9ò2?SðD ˆzÒÙ…Fð r   