Ë
    ¸¬ujâ  ã                   ób  — d Z ddlZddlZddlZddlZddlmZmZmZ ddlZddl	Z	ddlZ e	j                  e	j                  j                  «       dZdZ ej                  dd«      ZdZ ej$                  ej&                  «       ed	¬
«      z
  j)                  d«      ZddiZd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rzdej:                  v ZerdndZ e «         e de› de› �«        ej                  «       Z! ee¬«      \  Z"Z# e d e$ ej                  «       e!z
  d«      › d�«        e de"› de#› �«       yy) u©  
å¤©é—¨å¸‚äººæ°‘æ”¿åºœ-çŽ¯è¯„å…¬ä¼—å�‚ä¸Ž (www.tianmen.gov.cn)
===========================================
åˆ—è¡¨: index.shtml, index_1.shtml, ... æ¯�é¡µ20æ�¡
è¯¦æƒ…: /zwgk/zdlyxxgk/hjbh/hpgzcy/202606/t20260608_5954048.shtml
      <div class="article_content"> â†’ <div class="view TRS_UEDITOR"> å�«æ­£æ–‡

ç”¨æ³•:
    python3 crawl_tianmen_hjbh.py          # å…¨é‡�
    python3 crawl_tianmen_hjbh.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚ	timedeltaÚtimezoneu   å¤©é—¨å¸‚-çŽ¯è¯„å…¬ä¼—å�‚ä¸Žz5https://www.tianmen.gov.cn/zwgk/zdlyxxgk/hjbh/hpgzcy/Ú	SEARCH_DBz/root/search.dbé   iG  )Údaysz%Y-%m-%dz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c           	      ó  — | dk(  r
t         dz   }nt         d| dz
  › d�z   }	 t        j                  |t        dd¬«      }d|_        |j
                  S # t        $ r'}t        d	| › d
t        |«      d d › �«       Y d }~y d }~ww xY w)Né   zindex.shtmlÚindex_z.shtmlé   F©ÚheadersÚtimeoutÚverifyúutf-8z  ! list page z fail: é<   )	Ú	LIST_BASEÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚstr)ÚpageÚurlÚrÚes       ú'/root/gov_crawler/crawl_tianmen_hjbh.pyÚ
fetch_listr!      s…   € Øˆq‚yÜ˜-Ñ'‰ä˜F 4¨¡6 (¨&Ð1Ñ1ˆðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò Ü�˜t˜f G¬C°«F°3°B¨K¨=Ð9Ô:Üûðús   ¡/A Á	BÁA<Á<Bc                 ó¦  — g }t        j                  d| t         j                  «      D ]¦  }|j                  d«      }|j                  d«      }|j	                  d«      s=|j	                  d«      rt
        |dd  z   }n|j	                  d«      rd|z   nt
        |z   }|j                  d«      j                  «       }|j                  |||d	œ«       Œ¨ |S )
NzP<li><span>(\d{4}-\d{2}-\d{2})</span>\s*<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"r
   é   Úhttpz./ú/zhttps://www.tianmen.gov.cné   )Útitler   Úpub_date)ÚreÚfinditerÚDOTALLÚgroupÚ
startswithr   ÚstripÚappend)ÚhtmlÚitemsÚmr(   r   r'   s         r    Ú
parse_listr3   (   sÀ   € Ø€EÜ�[‰[Ø[ØŒb�i‰ióò Iˆð —7‘7˜1“:ˆØ�g‰g�a‹jˆØ�~‰~˜fÔ%Ø�~‰~˜dÔ#Ü # a b 'Ñ)‘à<?¿N¹NÈ3Ô<OÐ2°SÒ8ÔU^ÐadÑUd�Ø—‘˜“
× Ñ Ó"ˆØ�‰˜u¨S¸hÑGÕHðIð €Ló    c                 ó:  — 	 t        j                  | t        dd¬«      }d|_        |j                  }t        j                  d|t
        j                  «      }|r“|j                  d«      }t        j                  dd|t
        j                  t
        j                  z  ¬	«      }t        j                  d
d|t
        j                  t
        j                  z  ¬	«      }|j                  «       }|S y# t        $ r$}t        dt        |«      d d › �«       Y d }~yd }~ww xY w)Nr   Fr   r   z3<div class="view[^>]*>(.*?)</div>\s*</div>\s*</div>r
   z<script[^>]*>.*?</script>Ú )Úflagsz<style[^>]*>.*?</style>z  ! detail fail: r   )r   r   r   r   r   r)   Úsearchr+   r,   ÚsubÚIr.   r   r   r   )r   r   r0   r2   Úcontentr   s         r    Úfetch_detailr<   9   sÝ   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆä�I‰IÐLÈdÔTV×T]ÑT]Ó^ˆÙØ—g‘g˜a“jˆGÜ—f‘fÐ9¸2¸wÌbÏiÉiÔXZ×X\ÑX\ÉnÔ]ˆGÜ—f‘fÐ7¸¸WÌBÏIÉIÔVX×VZÑVZÉNÔ[ˆGØ—m‘m“oˆGØˆNØøÜò ÜÐ!¤# a£&¨¨" + Ð/Ô0Üûðús   ‚C)C- Ã-	DÃ6DÄDc                 óJ  — | sydd l }|j                  t        «      }|j                  d«       |j                  d«       d\  }}| D ]†  }	 |j                  dt        |j                  d«      xs dd d |j                  d	d«      |j                  d
d«      |j                  d«      xs dd d ddf«       |j                  dkD  r|dz  }n|dz  }Œˆ |j                  dt        f«       |j                  «        |j                  «        ||fS # t        $ r}|dz  }Y d }~Œ×d }~ww xY w)N©r   r   r   zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALzxINSERT OR REPLACE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, tags) VALUES (?,?,?,?,?,?,?)r'   r6   iô  r   r;   r(   é
   u   çŽ¯è¯„å…¬ä¼—å�‚ä¸Žr
   z·INSERT INTO gov_search(rowid, title, site_name, summary) SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?)
Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEr   Útotal_changesr   ÚcommitÚclose)r1   r@   ÚdbÚokÚfailÚitr   s          r    Úto_dbrK   K   s2  € ÙØÛØ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð)ô Ø—V‘V˜G“_Ò*¨¨D¨SÐ1Ø—F‘F˜5 "Ó%Ø—F‘F˜9 bÓ)Ø—V‘V˜JÓ'Ò-¨2¨s°Ð3ØØ(ðô	ð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð'ð, ‡J�Jð	\ô 
ˆô	ð ‡I�I„KØ‡H�H„JØˆtˆ8€Oøô ò 	Ø�A‰I�Dûð	ús   Á
BD
Ä
	D"ÄDÄD"c                 ó(  — g }t        «       }t        dt        dz   «      D ]¾  }t        |«      }|s n¯t	        |«      }|st        d|› d�«        n‘d}|D ]F  }|d   |v rŒ|j                  |d   «       |d   r|d   t        k  rŒ1|j                  |«       |dz  }ŒH |r|d   d   nd}|r|d   d   nd}	t        d|› d	t        |«      › d
|› d|	› d|› �
«       |dk(  sŒ¾ n t        dt        |«      › d�«       | r|d d }t        dt        |«      › d�«       |syt        |«      D ]Y  \  }
}t        d|
dz   › dt        |«      › d	|d   d d › d�dd¬«       t        |d   «      }||d<   t        t        |«      › d�«       Œ[ t        |«      \  }}||fS )Nr
   z  [Page z] empty, reached endr   r   r(   ú?éÿÿÿÿú] z items (z ~ z), new: z	  Total: z items within 3yrr   z  TEST mode: z itemsr>   z  [r%   r'   é(   z... r6   T)ÚendÚflushr;   ÚB)ÚsetÚrangeÚ	MAX_PAGESr!   r3   r   ÚaddÚCUTOFFr/   ÚlenÚ	enumerater<   rK   )ÚtestÚ	all_itemsÚ	seen_urlsr   r0   r1   ÚnewÚitemÚfÚlÚir;   rH   rI   s                 r    Úcrawlrc   s   së  € Ø€IÜ“€IÜ�aœ Q™Ó'ò ˆÜ˜$ÓˆÙÙÜ˜4Ó ˆÙÜ�H˜T˜FÐ"6Ð7Ô8ÙØˆØò 	ˆDØ�E‰{˜iÑ'ØØ�M‰M˜$˜u™+Ô&Ø�JÒ D¨Ñ$4´vÒ$=ØØ×Ñ˜TÔ"Ø�1‰H‰Cð	ñ %*ˆE�!‰H�ZÒ ¨sˆÙ%*ˆE�"‰I�jÒ!°ˆÜ�˜˜˜b¤ U£ ¨H°Q°C°s¸1¸#¸XÀcÀUÐKÔLØ�!‹8Ùð+ô, 
ˆI”c˜)“nÐ%Ð%6Ð
7Ô8ÙØ˜b˜q�Mˆ	Ü�œc )›nÐ-¨VÐ4Ô5ÙØÜ˜YÓ'ò "‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸tÐDÈ"ÐTXÕYÜ˜t E™{Ó+ˆØ!ˆˆY‰Ü”�W“�˜aÐ Õ!ð	"ô
 �YÓ�H€BˆØˆtˆ8€Or4   Ú__main__z--testÚTESTÚFULLú[rO   )r[   z  Time: r
   Úsz  New: z Skip: )F)%Ú__doc__r)   ÚsysÚosÚtimer   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrC   r   Úgetenvr   rV   ÚnowÚutcÚstrftimerX   r   r!   r3   r<   rK   rc   Ú__name__Úargvr[   Úmoder   Út0rH   rI   Úround© r4   r    ú<module>r{      s@  ðñ
÷ × ß 2Ñ 2ß Û 	Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà+€	ØD€	ØˆB�I‰I�kÐ#4Ó5€	Ø€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€ØÐZÐ[€òòò"ò$&óP%ðN ˆzÒØ�s—x‘xÐ€DÙ‰6˜v€DÙ	„GÙ	ˆAˆiˆ[˜˜4˜&Ð
!Ô"Ø	ˆ�‰‹€BÙ˜$Ô�H€BˆÙ	ˆH‘U˜9˜4Ÿ9™9›; r™>¨1Ó-Ð.¨aÐ
0Ô1Ù	ˆG�B�4�w˜t˜fÐ
%Õ&ð r4   