Ë
    ¸¬ujá  ã                   ó<  — 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	 e	j                  e	j                  j                  «       dZdZdZ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.fxxh.gov.cn)
===========================================
åˆ—è¡¨: /channel/list/11354.html, 11354_{n}.html (pages 2-10), newslist.thtml (pages 11+)
è¯¦æƒ…: /content/2026/1074549.html, <div id="Detailcontent" class="Detailcontent_inner"> å�«æ­£æ–‡

ç”¨æ³•:
    python3 crawl_fxxh_bmtz.py          # å…¨é‡�(19é¡µ)
    python3 crawl_fxxh_bmtz.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚ	timedeltaÚtimezoneu   ç»†æ²³åŒº-ä¾¿æ°‘é€šçŸ¥z*https://www.fxxh.gov.cn/channel/list/11354z&https://www.fxxh.gov.cn/newslist.thtmlz/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�}n| dk  rt         › d| › d�}nt        › d| › �}	 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.htmlé
   Ú_z?id=11354&pn=é   F©ÚheadersÚtimeoutÚverifyúutf-8z  ! list page z fail: é<   )
Ú	LIST_BASEÚLIST_DYNÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚstr)ÚpageÚurlÚrÚes       ú$/root/gov_crawler/crawl_fxxh_bmtz.pyÚ
fetch_listr"      s™   € Øˆq‚yÜ�˜5Ð!‰Ø	�ŠÜ�˜1˜T˜F %Ð(‰ä�
˜-¨ vÐ.ˆðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò Ü�˜t˜f G¬C°«F°3°B¨K¨=Ð9Ô:Üûðús   ®/A Á	BÁ'B	Â	Bc                 ób  — g }t        j                  d| t         j                  «      D ]„  }|j                  d«      }|j	                  d«      s|j	                  d«      rd|z   nd|z   }|j                  d«      j                  «       }|j                  d«      }|j                  |||d	œ«       Œ† |S )
Nz‡<a class="list1-ul-link"[^>]*href="([^"]+)"[^>]*>.*?<div class="list1-ul-link-inner">([^<]+).*?tabs2Right-part2">\s*(\d{4}-\d{2}-\d{2})r	   Úhttpú/zhttps://www.fxxh.gov.cnzhttps://www.fxxh.gov.cn/é   é   )Útitler   Úpub_date)ÚreÚfinditerÚDOTALLÚgroupÚ
startswithÚstripÚappend)ÚhtmlÚitemsÚmr   r(   r)   s         r!   Ú
parse_listr4   )   s¨   € Ø€EÜ�[‰[ð	7ð 	Œb�i‰ió	ò Iˆð �g‰g�a‹jˆØ�~‰~˜fÔ%Ø58·^±^ÀCÔ5HÐ+¨cÒ1ÐNhÐknÑNnˆCØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:ˆØ�‰˜u¨S¸hÑGÕHðIð €Ló    c                 ó6  — 	 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   z(<div id="Detailcontent"[^>]*>(.*?)</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   r1   r3   Úcontentr    s         r!   Úfetch_detailr=   9   sÖ   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆä�I‰IÐAÀ4ÌÏÉÓSˆÙØ—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Ø—=‘=“?Ð"ØøÜò ÜÐ!¤# a£&¨¨" + Ð/Ô0Üûðús   ‚C'C+ Ã+	DÃ4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(   r7   iô  r   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ÚconnectÚ	SEARCH_DBÚexecuteÚ	SITE_NAMEr   Útotal_changesr   ÚcommitÚclose)r2   r@   ÚdbÚokÚfailÚitr    s          r!   Úto_dbrL   J   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                 ó4  — g }t        «       }| rdnt        }t        d|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 )Né   r	   z  [Page z] empty, reached endr   r   r)   ú?éÿÿÿÿú] z items (z ~ z), new: z	  Total: z items within 3yrz  TEST mode: z itemsr?   z  [r%   r(   é(   z... r7   T)ÚendÚflushr<   ÚB)ÚsetÚ	MAX_PAGESÚranger"   r4   r   ÚaddÚCUTOFFr0   ÚlenÚ	enumerater=   rL   )ÚtestÚ	all_itemsÚ	seen_urlsÚmax_pr   r1   r2   ÚnewÚitemÚfÚlÚir<   rI   rJ   s                  r!   Úcrawlrf   r   sô  € Ø€IÜ“€IÙ‰Aœ9€EÜ�a˜ ™Ó#ò ˆÜ˜$ÓˆÙÙÜ˜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€Or5   Ú__main__z--testÚTESTÚFULLú[rQ   )r]   z  Time: r	   Úsz  New: z Skip: )F)%Ú__doc__r*   ÚsysÚosÚtimer   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrD   r   r   rB   rW   ÚnowÚutcÚstrftimerZ   r   r"   r4   r=   rL   rf   Ú__name__Úargvr]   Úmoder   Út0rI   rJ   Úround© r5   r!   ú<module>r}      s4  ðñ	÷ × ß 2Ñ 2ß Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà%€	Ø9€	Ø5€Ø€	Ø€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€ØÐZÐ[€òòò ò"&óP&ðP ˆ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Ð
%Õ&ð r5   