Ë
    ¸¬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Z	dZ
dZdZdZd	Zej                  j!                  e«      Z ej&                  d
d«      ZeZddddœZdZ ej0                  «       Zej4                  j7                  e«       dZdZe eej>                  «      k  r‘ej>                  e   Z e jC                  d«      r e"e jG                  dd«      d   «      Zn:e dk(  r5edz    eej>                  «      k  r e"ej>                  edz      «      Zedz  Zedz  Ze eej>                  «      k  rŒ‘eekD  reZd„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)e*dk(  r e)«        yy)uF  
å¤©æ´¥çŽ¯è¯„å…¬ç¤ºå¹³å�°ï¼ˆæ¬£å›½çŽ¯çŽ¯ä¿�ç§‘æŠ€ï¼‰â€” ä¿¡æ�¯å…¬ç¤º çˆ¬è™«
site: www.tjxgh.cn (ThinkPHP)
æ �ç›®: /index.php/category/index/id/49.html (ä¿¡æ�¯å…¬ç¤º, å…±48é¡µ568æ�¡, 12æ�¡/é¡µ)
åˆ—è¡¨: ul.news1 > li > a(titleå®Œæ•´æ ‡é¢˜, class=pg-color) + span æ—¥æœŸ (YYYY-MM-DD)
åˆ†é¡µ: /index.php/category/index/id/49/p/{N}.html
è¯¦æƒ…: /index.php/arc/show/id/{N}.html
è¯¦æƒ…ç»“æž„: div.view > h1.view-title æ ‡é¢˜ + p.MsoNormal æ®µè�½(Wordè½¬æ�¢HTML) + å�¯èƒ½è¡¨æ ¼/é™„ä»¶
ç¼–ç �: é¡µé�¢å£°æ˜Žutf-8ä½†å�«ä¸ªåˆ«æ�Ÿå��å­—èŠ‚ -> decode('utf-8', errors='replace')
2026-08-01 æ–°å»º
é    N)Úurljoinu%   å¤©æ´¥çŽ¯è¯„å…¬ç¤ºå¹³å�°-ä¿¡æ�¯å…¬ç¤ºu   å¤©æ´¥zwww.tjxgh.cnzhttp://www.tjxgh.cnz7http://www.tjxgh.cn/index.php/category/index/id/49.htmlé0   Ú	SEARCH_DBz/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageé   é   z--pages=ú=z--pagesc                 ó²   — 	 t         j                  | t        ¬«      }|j                  dk7  ry |j                  j                  dd¬«      S # t        $ r Y y w xY w)N©ÚtimeoutéÈ   zutf-8Úreplace)Úerrors)ÚsessionÚgetÚTIMEOUTÚstatus_codeÚcontentÚdecodeÚ	Exception)ÚurlÚresps     ú /root/gov_crawler/crawl_tjxgh.pyÚfetchr   9   sV   € ðÜ�{‰{˜3¬ˆ{Ó0ˆØ×Ñ˜sÒ"Øà�|‰|×"Ñ" 7°9Ð"Ó=Ð=øÜò Ùðús   ‚*A
 ­A
 Á
	AÁAc                 ó†   — t        j                  dd| xs d«      } t        j                  dd| «      } | j                  «       S )u8   æ ‡é¢˜æ¸…æ´—: strip å®žä½“å‰�ç¼€ + çœ�ç•¥å�·æˆªæ–­å�Žç¼€u   ^[\s\xa0Â·\u00b7]+Ú z\s*\.{3,}\s*$)ÚreÚsubÚstrip)Útitles    r   Úclean_titler!   D   s8   € ä�F‰FÐ(¨"¨eªk°rÓ:€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó@  — g }t        j                  d| t         j                  «      }|s|S t        j                  d|j	                  d«      t         j                  «      D ]»  }|j	                  d«      }t        j                  d|«      }|sŒ-|j	                  d«      t        |j	                  d«      «      }}|sŒ[|j                  d«      st        t        |«      }t        j                  d|«      }|r|j	                  d«      nd}	|j                  |||	d	œ«       Œ½ |S )
u,   è§£æž�åˆ—è¡¨: ul.news1 > li > a + spanæ—¥æœŸz/<ul[^>]*class="[^"]*news1[^"]*"[^>]*>(.*?)</ul>z<li[^>]*>(.*?)</li>r   z)<a[^>]+href="([^"]+)"[^>]*title="([^"]*)"é   Úhttpz(\d{4}-\d{2}-\d{2})r   )r    r   Údate)
r   ÚsearchÚDOTALLÚfinditerÚgroupr!   Ú
startswithr   ÚBASE_URLÚappend)
ÚhtmlÚitemsÚmÚliÚsegÚaÚhrefr    Údr&   s
             r   Ú
parse_listr6   K   sí   € à€EÜ
�	‰	ÐDÀdÌBÏIÉIÓV€AÙØˆÜ�k‰kÐ0°!·'±'¸!³*¼b¿i¹iÓHò BˆØ�h‰h�q‹kˆÜ�I‰IÐBÀCÓHˆÙØØ—g‘g˜a“j¤+¨a¯g©g°a«jÓ"9ˆeˆÙØØ�‰˜vÔ&Üœ8 TÓ*ˆDÜ�I‰IÐ,¨cÓ2ˆÙˆq�w‰w�qŒz BˆØ�‰˜u¨T¸4Ñ@ÕAðBð €Lr"   c           	      ó\  ‡— d}d}t        j                  d| t         j                  «      }|r/t        t        j                  dd|j                  d«      «      «      }| j                  d«      }| j                  d|«      }| j                  d|«      }||fD �cg c]
  }|dkD  sŒ	|‘Œ }	}|	rt        |	«      n|d	z   }
|dk\  r| ||
 nd}|s||dddfS g }t        j                  d
|«      D ]©  }|j                  d«      j                  «       }|j                  d«      j                  «       }t        j                  d|j                  «       «      sd|j                  «       v sŒx|j                  d«      st        ||«      n|}|j                  ||f«       Œ« g }t        «       }|D ].  \  }}||v rŒ|j                  |«       |j                  ||f«       Œ0 g }d}|}t        j                  dd|t         j                  ¬«      }g Šˆfd„}t        j                  d||t         j                  ¬«      }‰rdnd}t        j                   d|«      }|D �]  }t        j                  dˆfd„|«      }t        j                  d|«      r |j                  |j                  «       «       ŒTt        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       }|sŒñ|j                  |«       �Œ dj#                  |«      }t        j                  dd|«      }d}|rdj#                  d „ |D «       «      }|||j                  «       ||fS c c}w )!ul   æ��å�–æ­£æ–‡: div.view > h1.view-title + MsoNormalæ®µè�½; è¿”å›ž (title, date, content, has_table, att_html)r   z4<h1[^>]*class="[^"]*view-title[^"]*"[^>]*>(.*?)</h1>ú<[^>]+>r   z<div class="view">z<div class="page"z<div class="footerr   i † z+<a[^>]+href="([^"]+)"[^>]*>([^<]{1,80})</a>r$   z,\.(pdf|docx?|xlsx?|zip|rar|wps|et|dps)(\?|$)Úuploadsr%   z2<h1[^>]*class="[^"]*view-title[^"]*"[^>]*>.*?</h1>)Úflagsc                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   z TBLr   ú )r-   r*   Úlen©r0   Útbl_phs    €r   Ú_tbl_phz extract_content.<locals>._tbl_ph‹   s.   ø€ Ø�‰�a—g‘g˜a“jÔ!Øœ˜V› Q™˜ tÐ,Ð,r"   z<table[^>]*>.*?</table>z(?=<\s*p[^>]*>|<\s*div[^>]*>)z\x00TBL(\d+)\x00c                 ó>   •— ‰t        | j                  d«      «         S )Nr   )Úintr*   r>   s    €r   ú<lambda>z!extract_content.<locals>.<lambda>”   s   ø€ °F¼3¸q¿w¹wÀq»z»?Ñ4K€ r"   z<tablez	<br\s*/?>ú
z&nbsp;|&ensp;|&emsp;ú z&[a-z]+;z[ \t\u3000]+z\n+ú

z\n{3,}c              3   ó4   K  — | ]  \  }}d |›d|›d�–— Œ y­w)z<p><a href="z" target="_blank">z</a></p>N© )Ú.0ÚhÚns      r   ú	<genexpr>z"extract_content.<locals>.<genexpr>¦   s    è ø€ ò ZÙFJÀaÉºAºqÔAñZùs   ‚)r   r'   r(   r!   r   r*   ÚfindÚminr)   r   Úlowerr+   r   r-   ÚsetÚaddÚsplitÚjoin)r.   Úpage_urlr    r&   r0   Úi1Úi2Úi3ÚxÚendsÚendr2   Úattsr3   r4   ÚnameÚabs_hrefÚ
atts_dedupÚseen_hrJ   rK   ÚpartsÚ	has_tableÚbodyr@   ÚblocksÚblkÚtxtr   Úatt_htmlr?   s                                 @r   Úextract_contentrg   a   sU  ø€ à€EØ€Dä
�	‰	ÐIÈ4ÔQS×QZÑQZÓ[€AÙÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆà	�‰Ð'Ó	(€BØ	�‰Ð&¨Ó	+€BØ	�‰Ð'¨Ó	,€BØ˜B�xÖ)�! 1 q£5ŠAÐ)€DÐ)ÙŒ#ˆdŒ)  f¡€CØ š'ˆ$ˆr�#‰, r€CÙØ�d˜B  2Ð%Ð%à€DÜ�[‰[ÐGÈÓMò *ˆØ�w‰w�q‹z×ÑÓ!ˆØ�w‰w�q‹z×ÑÓ!ˆÜ�9‰9ÐDÀdÇjÁjÃlÔSÐW`Ðdh×dnÑdnÓdpÒWpØ6:·o±oÀfÔ6M”w˜x¨Ô.ÐSWˆHØ�K‰K˜ 4Ð(Õ)ð*ð €JÜ‹U€FØò "‰ˆˆ1Ø�‰;ØØ�
‰
�1ŒØ×Ñ˜1˜a˜&Õ!ð	"ð €EØ€IØ€Dä�6‰6ÐGÈÈTÔY[×YbÑYbÔc€Dð €Fô-ô �6‰6Ð,¨g°tÄ2Ç9Á9ÔM€DÙ‘ €Iä�X‰XÐ6¸Ó=€FØó ˆä�f‰fÐ(Ó*KÈSÓQˆÜ�9‰9�Y Ô$Ø�L‰L˜Ÿ™›Ô%ØÜ�f‰f�\ 4¨Ó-ˆÜ�f‰f�Z  SÓ)ˆÜ�f‰fÐ,¨c°3Ó7ˆÜ�f‰f�[ " cÓ*ˆÜ�f‰f�_ c¨3Ó/ˆÜ�f‰f�V˜T 3Ó'ˆØ�i‰i‹kˆÚØ�L‰L˜Öðð �k‰k˜%Ó €GÜ�f‰f�Y ¨Ó0€Gà€HÙØ—9‘9ñ ZØNXôZó Zˆà�$˜Ÿ™›¨°HÐ<Ð<ùòw *s   Â
N)Â"N)c                 ó®  — | j                  d|d   |d   f«      j                  «       }|ry| j                  d|d   |d   |d   |d   |d	   |d   |d
   |d   |d   f	«       | j                  dkD  re| j                  d|d   f«      j                  «       d   }t        j                  dd|d   xs d«      dd }| j                  d||d   |d   |f«       yy)u0   å…¥åº“ gov_raw + gov_search; è¿”å›ž 'new'/'skip'z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r   Ú	site_nameÚskipzšINSERT OR IGNORE INTO gov_raw(page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table) VALUES(?,?,?,?,?,?,?,?,?)Ú
source_urlr    r   r&   Ú
group_nameÚscript_namera   r   z'SELECT id FROM gov_raw WHERE page_url=?r8   r   Nr   zRINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES(?,?,?,?)Únew)ÚexecuteÚfetchoneÚrowcountr   r   )ÚcurÚitemÚexistsÚridÚsummarys        r   Ústore_recordrw   «   s  € à�[‰[Ø@Ø	ˆe‰�d˜;Ñ'Ð(ó*ç*2©(«*ð ñ ØØ‡K�Kð	$à	ˆe‰�d˜<Ñ(¨$¨w©-¸¸i¹Ø	ˆf‰�t˜KÑ(¨$¨|Ñ*<Ø	ˆmÑ	˜d ;Ñ/ð	1ô2ð ‡|�|�aÒØ�k‰kÐCÀdÈ5ÁkÀ^ÓT×]Ñ]Ó_Ð`aÑbˆÜ—&‘&˜ R¨¨i©Ò)>¸BÓ?ÀÀÐEˆØ�‰Ø`Ø�$�w‘-  kÑ!2°GÐ<ô	>ð Ør"   c                  ó¬  — t        j                  t        d¬«      } | j                  «       }d}d}d}d}t	        «       }t        dt        dz   «      D �]J  }|dk(  rt        nd|z  }t        |«      }	|	s!|dz  }|dk\  r|dkD  rt        d|z  «        �nŒBd}t        |	«      }
|
st        d|z  «        níd}|
D ]Ò  }|d   |v rŒ|j                  |d   «       t        |d   «      }|s|dz  }Œ5t        ||d   «      \  }}}}}|s|d	   }|s|d
   }|s|s|dz  }Œb|r|r|dz   |z   j                  «       n|}|d   |||t        t        t         t"        |dœ	}t%        ||«      }|dk(  r|dz  }|dz  }n|dz  }t'        j(                  d«       ŒÔ t        d|||fz  «       �ŒM | j+                  «        | j-                  «        t        dt        |||fz  «       y )Né<   r   r   r   z<http://www.tjxgh.cn/index.php/category/index/id/49/p/%d.htmlu"   Page %d è¯·æ±‚å¤±è´¥, æ��å‰�å�œæ­¢u   Page %d æ— åˆ—è¡¨æ•°æ�®r   r    r&   rF   )	r   r    r   r&   ri   rl   rk   rm   ra   rn   g333333Ó?u#   Page %d: æ–°å¢ž %d, ç´¯è®¡æ–°å¢ž %du8   å®Œæˆ�: æ€»è®¡ %d | æ–°å¢ž: %d | è·³è¿‡: %d | å¤±è´¥: %d)Úsqlite3ÚconnectÚDB_PATHÚcursorrP   ÚrangeÚ
_MAX_PAGESÚLIST_URLr   Úprintr6   rQ   rg   r   Ú	SITE_NAMEÚ
GROUP_NAMEÚDOMAINÚSCRIPT_NAMErw   ÚtimeÚsleepÚcommitÚclose)Úconnrr   Ún_newÚn_skipÚn_failÚfail_streakÚ	seen_urlsÚpager   r.   r/   Úpage_newÚitÚdetailr    r&   r   ra   rf   rs   Úrs                        r   Úmainr•   Â   s&  € Ü�?‰?œ7¨BÔ/€DØ
�+‰+‹-€CØ€EØ€FØ€FØ€KÜ“€IÜ�aœ a™Ó(ó 4OˆØ !š)�hØJÈTÑQð 	ä�S‹zˆÙØ˜1ÑˆKØ˜aÒ D¨1¢HÜÐ:¸TÑAÔBÚØØˆÜ˜4Ó ˆÙÜÐ+¨dÑ2Ô3ÙØˆØò #	ˆBØ�%‰y˜IÑ%ØØ�M‰M˜"˜U™)Ô$Ü˜2˜e™9Ó%ˆFÙØ˜!‘�ØÜ8GÈÐPRÐSXÑPYÓ8ZÑ5ˆE�4˜ )¨XÙØ˜7™�ÙØ˜&‘z�Ù¡8Ø˜!‘�ØÙÙCJ˜7 VÑ+¨hÑ6×=Ñ=Ô?ÐPX�à˜%‘yØØ"ØÜ&Ü(Ü$Ü*Ø&ñ
ˆDô ˜S $Ó'ˆAØ�EŠzØ˜‘
�Ø˜A‘‘à˜!‘�Ü�J‰J�s�OðG#	ôH 	Ð3°t¸XÀuÐ6MÑMÖNði4Oðj 	‡K�K„MØ‡J�J„LÜ	Ð
DÌ
ÐTYÐ[aÐciÐGjÑ
jÕkr"   Ú__main__)+Ú__doc__r   ÚsysÚosr†   rz   ÚrequestsÚurllib.parser   r‚   rƒ   r„   r,   r€   ÚTOTAL_PAGESÚpathÚbasenameÚ__file__r…   Úgetenvr   r|   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   Úir=   Úargvr3   r+   rB   rR   r   r!   r6   rg   rw   r•   Ú__name__rH   r"   r   ú<module>r¨      s�  ðñ
ó 
Û 
Û 	Û Û Û Ý  à3€	Ø€
Ø	€Ø €ØD€Ø€Ø�g‰g×Ñ˜xÓ(€àˆB�I‰I�kÐ#4Ó5€	Ø
€ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ à€
ð €Ø‰#ˆc�h‰h‹-ÒØ�‰�‰€AØ‡|�|�JÔÙ˜Ÿ™  a›¨Ñ+Ó,‰
Ø	
ˆiŠ˜A ™E¡C¨¯©£MÒ1Ù˜Ÿ™ ! a¡%™Ó)ˆ
¨1°©6¨1Øˆ�F€Að ‰#ˆc�h‰h‹-Óð �ÒØ€Jòòòò,G=òTò.?lðD ˆzÒÙ…Fð r"   