Ë
    ½”yj)  ã                   óN  — 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 ej                  «        dZ	dZ
dZdZdZdZd	Zd
ZdddddœZ ej$                  dd«      Z ej(                  «       Zej,                  j/                  e«       de_        d„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u  æ‰˜å…‹æ‰˜åŽ¿äººæ°‘æ”¿åºœ â€” éƒ¨é—¨æ–‡ä»¶ (æœ�åŠ¡å™¨æ­£å¼�ç‰ˆ)
æ �ç›®: http://www.tuoxian.gov.cn/zfxxgkzl/fdzdgknr_22198/bmwj/
CMS: TRSï¼Œé�™æ€�åˆ†é¡µ index_N.html (å…± 334 é¡µ)
è¯¦æƒ…: meta ArticleTitle + meta PubDate + div.TRS_UEDITOR
âš ï¸� 2026-08-10: æœ�åŠ¡å™¨ IP è¢«å¥‡å®‰ä¿¡äº‘ WAF éš�æœºæ‹¦æˆª(502, WZWS-RAY å¤´)ï¼Œ
   æœ¬åœ° Mac å�¯ç¨³å®šè®¿é—® â†’ å½“å‰�èµ°ã€Œæœ¬åœ°æŠ“å�–â†’JSONLâ†’scpâ†’import_tuoxian_bmwj.py å¯¼å…¥ã€�é™�çº§é—­çŽ¯ã€‚
   æœ¬è„šæœ¬ä¸º WAF è§£é”�å�Žæ�¢å¤�ç”¨ï¼Œé…�ç½®æ³¨å†Œ enabled=falseã€‚
é    Nzhttp://www.tuoxian.gov.cnz7http://www.tuoxian.gov.cn/zfxxgkzl/fdzdgknr_22198/bmwj/u%   æ‰˜å…‹æ‰˜åŽ¿äººæ°‘æ”¿åºœ-éƒ¨é—¨æ–‡ä»¶u	   å†…è’™å�¤u   æ”¿åºœå…¬å‘Šzcrawl_tuoxian_bmwj.pyé   z
2023-08-10zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zUtext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9zhttp://www.tuoxian.gov.cn/)z
User-AgentÚAcceptzAccept-LanguageÚRefererÚ	SEARCH_DBz/root/search.dbFc           
      óv  — t        d«      D ]s  }	 t        j                  | dd¬«      }|j                  dk(  r|j                  c S t        d|dz   › d|j                  › �d¬	«       t        j                  d|dz  z   «       Œu y # t        $ r,}t        d|dz   › dt        |«      d d
 › �d¬	«       Y d }~ŒNd }~ww xY w)Nr   é   T)ÚtimeoutÚallow_redirectséÈ   z  retry é   ú: ©Úflushé<   é   )
ÚrangeÚsessionÚgetÚstatus_codeÚtextÚprintÚ	ExceptionÚstrÚtimeÚsleep)ÚurlÚiÚrÚes       ú'/root/gov_crawler/crawl_tuoxian_bmwj.pyÚfetchr!   $   s·   € Ü�1‹Xò ˆð	?Ü—‘˜C¨¸T�ÓBˆAØ�}‰} Ò#Ø—v‘v’Ü�H˜Q˜q™S˜E  A§M¡M ?Ð3¸4Õ@ô 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	?Ü�H˜Q˜q™S˜E ¤C¨£F¨3¨B K =Ð1¸×>Ò>ûð	?ús   �2BÁ BÂ	B8Â"B3Â3B8c                 óf  — g }t        «       }t        j                  d| t        j                  t        j                  z  «      }|D �]h  }t        j
                  d|«      }|sŒ|j                  d«      |j                  d«      j                  «       }}t        j                  dd|«      j                  «       }t        |«      dk  s%t        j
                  d|t        j                  «      sŒ¦|j                  d	«      rt        |dd  z   }n8|j                  d
«      r
t        |z   }n|j                  d«      r|}n	t        |z   }|j                  t        «      s�Œ||v r�Œ|j                  |«       d}	t        j
                  d|«      }
|
r|
j                  d«      }	|j                  |||	f«       �Œk |S )Nz<tr[^>]*>.*?</tr>z&<a[^>]*href="([^"]+)"[^>]*>([^<]*)</a>r   é   z\s+ú é   z\.html?$z./ú/ÚhttpÚ ú(\d{4}-\d{2}-\d{2}))ÚsetÚreÚfindallÚSÚIÚsearchÚgroupÚstripÚsubÚlenÚ
startswithÚ	LIST_BASEÚBASE_URLÚaddÚappend)ÚhtmlÚitemsÚseenÚrowsÚrowÚmÚhrefÚtitleÚfullÚdate_strÚdms              r    Ú
parse_listrD   1   sa  € Ø€EÜ‹5€DÜ�:‰:Ð*¨D´"·$±$¼¿¹±+Ó>€DØó .ˆÜ�I‰IÐ?ÀÓEˆÙØØ—g‘g˜a“j !§'¡'¨!£*×"2Ñ"2Ó"4ˆeˆÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÜˆu‹:˜Š>¤§¡¨;¸¼b¿d¹dÔ!CØØ�?‰?˜4Ô Ü˜t A B˜xÑ'‰DØ�_‰_˜SÔ!Ü˜d‘?‰DØ�_‰_˜VÔ$Ø‰Dä˜tÑ#ˆDØ�‰œxÔ(ÙØ�4‰<ÙØ�‰�ŒØˆÜ�Y‰YÐ-¨sÓ3ˆÙØ—x‘x “{ˆHØ�‰�e˜T 8Ð,Ö-ð3.ð4 €Ló    c                 óD  — d}t        j                  d| «      }|r|j                  d«      j                  «       }|sGt        j                  d| «      }|r/|j                  d«      j	                  dd«      j                  «       }d}t        j                  d| «      }|r8t        j                  d|j                  d«      «      }|r|j                  d«      }d}t        j                  d| «      }|r|j                  «       }d}|}|t        | «      k  rX|d	kD  rS| j                  d
|«      r|dz  }|dz  }n"| j                  d|«      r|dz  }|dz  }n|dz  }|t        | «      k  r|d	kD  rŒS| || }|r­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|«      }|j                  «       }|||fS )Nr(   z3<meta[^>]*name="ArticleTitle"[^>]*content="([^"]+)"r   z<title>([^<]+)</title>u   æ‰˜å…‹æ‰˜åŽ¿äººæ°‘æ”¿åºœ_z.<meta[^>]*name="PubDate"[^>]*content="([^"]+)"r)   z,<div[^>]*class="[^"]*TRS_UEDITOR[^"]*"[^>]*>r   z<divr%   z</div>é   z<(script|style)[^>]*>.*?</\1>)Úflagsz\s*<div id="docAppendix".*$z0\s*<div class="video" style="display: none;">.*$z</div>\s*(?:</div>\s*)+$)r+   r/   r0   r1   ÚreplaceÚendr3   r4   r2   r-   r.   )	r9   r@   r>   rB   rC   ÚcontentÚstartÚdepthr   s	            r    Úparse_detailrN   R   sÞ  € Ø€EÜ
�	‰	ÐHÈ$ÓO€AÙØ—‘˜“
× Ñ Ó"ˆÙÜ�I‰IÐ/°Ó6ˆÙØ—G‘G˜A“J×&Ñ&Ð'BÀBÓG×MÑMÓOˆEØ€HÜ
�	‰	ÐCÀTÓJ€AÙÜ�Y‰YÐ-¨q¯w©w°q«zÓ:ˆÙØ—x‘x “{ˆHØ€GÜ
�	‰	ÐAÀ4ÓH€AÙØ—‘“ˆØˆØˆØ”#�d“)Šm ¨¢	Ø�‰˜v qÔ)Ø˜‘
�Ø�Q‘‘Ø—‘ ¨1Ô-Ø˜‘
�Ø�Q‘‘à�Q‘�ð ”#�d“)Šm ¨£	ð �u˜Q�-ˆÙÜ—&‘&Ð9¸2¸wÌbÏdÉdÔUW×UYÑUYÉkÔZˆÜ—&‘&Ð7¸¸WÌBÏDÉDÔQˆÜ—&‘&ÐLÈbÐRYÔac×aeÑaeÔfˆÜ—&‘&Ð4°hÀÓHˆØ—-‘-“/ˆØ�(˜GÐ#Ð#rE   c                  ó  — t        j                  t        «      } | j                  «       }g }t	        dt
        dz   «      D ]®  }t        |dkD  rd|› d�ndz   }t        |«      }|st        dt        › d|› d�d¬	«        nst        |«      }|st        dt        › d|› d
�d¬	«        nL|j                  |«       t        dt        › d|› dt        |«      › d�d¬	«       t        j                  d«       Œ° t        dt        › dt        |«      › d�«       dx}}|D ]ð  \  }	}
}|j                  d|
f«      j!                  «       }|r|dz  }Œ0t        |
«      }|s|dz  }ŒCt#        |«      \  }}}|s|	}|s|}|rt        |j%                  «       «      dk  rd}	 |j                  d|
|
||t&        |t(        t*        t        f	«       | j-                  «        |dz  }t        dt        › d|› d|d d › d|› d�	d¬	«       t        j                  d«       Œò |j                  dt&        f«       | j-                  «        | j3                  «        t        dt        › d|› d|› �«       y # t.        $ r}| j1                  «        |dz  }Y d }~ŒŠd }~ww xY w)Nr   Úindex_z.htmlr(   ú[z] Page z: fetch failTr   z: 0 items (end)r   z itemsg      à?z	] Total: r   z)SELECT id FROM gov_raw WHERE page_url = ?é
   u   æ­£æ–‡ä¸ºç©ºz¬INSERT INTO gov_raw (source_url, page_url, title, publish_date, site_name, content, group_name, industry, script_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)z] +é(   z (ú)gš™™™™™é?zòINSERT INTO gov_search(rowid,title,site_name,summary)
           SELECT r.id, r.title, r.site_name, substr(r.content,1,500)
           FROM gov_raw r
           WHERE r.id NOT IN (SELECT rowid FROM gov_search)
             AND r.site_name = ?z
[z] Done. New: z, Skipped: )Úsqlite3Úconnectr   Úcursorr   Ú	MAX_PAGESr5   r!   r   ÚSCRIPT_NAMErD   Úextendr3   r   r   ÚexecuteÚfetchonerN   r1   Ú	SITE_NAMEÚGROUPÚINDUSTRYÚcommitr   ÚrollbackÚclose)ÚconnrW   Ú	all_itemsÚpgr   r9   r:   Ú	new_countÚ
skip_countr@   Úitem_urlrB   ÚexistingÚdetail_htmlÚ
real_titleÚ	real_daterK   r   s                     r    Úcrawlrm   z   s�  € Ü�?‰?œ9Ó%€DØ�[‰[‹]€FØ€IÜ�A”y 1‘}Ó%ò ˆÜ°°a²˜V B 4 uÑ-¸RÑ@ˆÜ�S‹zˆÙÜ�A”k�] '¨"¨¨\Ð:À$ÕGÙÜ˜4Ó ˆÙÜ�A”k�] '¨"¨¨_Ð=ÀTÕJÙØ×Ñ˜ÔÜ�”+�˜g b T¨¬C°«J¨<°vÐ>ÀdÕKÜ�
‰
�3�ðô 
ˆAŒkˆ]˜)¤C¨	£NÐ#3°6Ð
:Ô;ØÐ€I�
Ø%.ò Ñ!ˆˆx˜Ø—>‘>Ø7¸(¸ó
ç
‰(‹*ð 	ñ Ø˜!‰OˆJØÜ˜H“oˆÙØ˜!‰OˆJØÜ)5°kÓ)BÑ&ˆ
�I˜wÙØˆJÙØ ˆIÙœ#˜gŸm™m›oÓ.°Ò3Ø$ˆGð	Ø�N‰Nð9à˜8 Z°¼IÀwÔPUÔW_ÔalÐmôð
 �K‰KŒMØ˜‰NˆIÜ�A”k�] # i [°°:¸c¸r°?Ð2CÀ2ÀiÀ[ÐPQÐRÐZ^Õ_ô 	�
‰
�3�ð=ð@ ‡N�Nð	$ô
 
ˆôð 	‡K�K„MØ‡J�J„LÜ	ˆC”ˆ}˜M¨)¨°KÀ
¸|Ð
LÕMøô ò 	Ø�M‰MŒOØ˜!‰O�Jûð	ús   ÆA!IÉ	J É!I;É;J Ú__main__)Ú__doc__Úrequestsr+   ÚsysÚosr   rU   Úurllib3Údisable_warningsr6   r5   r]   r^   r_   rY   rX   ÚCUTOFFÚHEADERSÚgetenvr   ÚSessionr   ÚheadersÚupdateÚverifyr!   rD   rN   rm   Ú__name__© rE   r    ú<module>r~      sÎ   ðñ÷ ,× +× +Û Ø €× Ñ Ô à&€ØE€	Ø3€	Ø€Ø€Ø%€Ø€	Ø	€ð DØeØ'Ø+ñ	€ð ˆB�I‰I�kÐ#4Ó5€	à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ Ø€„ò
òòB%$òP=Nð@ ˆzÒÙ	…Gð rE   