Ë
    ¸¬uj7  ã            	       ó–  — 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dZ ej                   d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(  r”dej:                  v ZerdndZ e «         e dez   dz   ez   «        ej                  «       Z! ee¬«      \  Z"Z# e d e$ e% ej                  «       e!z
  d«      «      z   dz   «        e d e$e"«      z   dz    e$e#«      z   «       yy) ua  
å’¸å®�å¸‚-çŽ¯è¯„å®¡æ‰¹ (sthjj.xianning.gov.cn)
==============================
CMS: å’¸å®�æ”¿åºœé—¨æˆ· (TRS å†…å®¹ç®¡ç�†)
åˆ—è¡¨: /xxgk/fdzdgknr/gysyjs/sthj_30351/hpsp/
è¯¦æƒ…: /.../202602/t20260213_4264790.shtml
æ­£æ–‡: div.view.TRS_UEDITOR

ç”¨æ³•:
    python3 crawl_xianning.py          # å…¨é‡�
    python3 crawl_xianning.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚtimezoneÚ	timedeltau   å’¸å®�å¸‚-çŽ¯è¯„å®¡æ‰¹zhttp://sthjj.xianning.gov.cnzBhttp://sthjj.xianning.gov.cn/xxgk/fdzdgknr/gysyjs/sthj_30351/hpsp/Ú	SEARCH_DBz/root/search.dbiG  )Údaysz%Y-%m-%dz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó¾   — 	 t        j                  | t        dd¬«      }d|_        |j                  S # t
        $ r!}t        dt        |«      z   «       Y d }~y d }~ww xY w)Né   F)ÚheadersÚtimeoutÚverifyzutf-8z  ! fetch fail: )ÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚstr)ÚurlÚrÚes      ú#/root/gov_crawler/crawl_xianning.pyÚfetchr      sP   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò ÜÐ ¤3 q£6Ñ)Ô*Üûðús   ‚/2 ²	A»AÁAc                 ór  — g }t        j                  d| t         j                  «      D �]  }|j                  d«      }t        j                  d|«      }|st        j                  d|«      }t        j                  d|«      }|sŒ\|j                  d«      j                  «       }t        |j                  «       «      dk\  r|j                  d«      j                  «       nd}|sŒ»t        |«      dkD  sŒÊ|j                  ||j                  d	«      r|nt        |z   |r|j                  d«      ndd
œ«       �Œ |S )Nz<li[^>]*>(.*?)</li>é   z"href="([^"]+)"[^>]*title="([^"]*)"zhref="([^"]+)"[^>]*>([^<]+)z <span>(\d{4}-\d{2}-\d{2})</span>é   Ú é   Úhttp)Útitler   Úpub_date)ÚreÚfinditerÚDOTALLÚgroupÚsearchÚstripÚlenÚgroupsÚappendÚ
startswithÚBASE_URL)ÚhtmlÚitemsÚmÚliÚlinkÚdateÚhrefr    s           r   Ú
parse_listr4   %   sù   € Ø€EÜ�[‰[Ð/°´r·y±yÓAó ˆØ�W‰W�Q‹ZˆÜ�y‰yÐ>ÀÓCˆÙÜ—9‘9Ð;¸RÓ@ˆDÜ�y‰yÐ<¸bÓAˆÚØ—:‘:˜a“=×&Ñ&Ó(ˆDÜ-0°·±³Ó-?À1Ò-D�D—J‘J˜q“M×'Ñ'Ô)È"ˆEÚœ˜U› a›Ø—‘Ø"Ø#'§?¡?°6Ô#:™4ÄÈ4ÁÙ15 §
¡
¨1¤¸2ñö ðð €Ló    c           	      óü  — t        | «      }|sddddœS d}t        j                  d|«      }|r6t        j                  d|j	                  d«      «      d   j                  «       }d}t        j                  d|«      }|rK|j	                  d«      › dt        |j	                  d	«      «      d
›dt        |j	                  d«      «      d
›�}|s)t        j                  d|«      }|r|j	                  d«      }d}t        j                  d|t        j                  «      }|r|j	                  d«      }|rt        |«      dk  r8t        j                  d|t        j                  «      }|r|j	                  d«      }|r€t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }|j                  «       }|||dœS )Nr   )r    Úcontentr!   z<title>([^<]+)z[_\u2014\-|]r   r   z+(\d{4})\u5e74(\d{1,2})\u6708(\d{1,2})\u65e5ú-r   Ú02dé   z(\d{4}-\d{2}-\d{2})z.class="view TRS_UEDITOR[^"]*"[^>]*>(.*?)</div>é2   z)class="content word_cen"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)r   r"   r&   Úsplitr%   r'   Úintr$   r(   ÚsubÚI)r   r-   r    r/   r!   r7   s         r   Úfetch_detailrA   8   s—  € Ü�‹:€DÙØ¨¸Ñ;Ð;à€EÜ
�	‰	Ð# TÓ*€AÙä—‘˜¨!¯'©'°!«*Ó5°aÑ8×>Ñ>Ó@ˆà€HÜ
�	‰	Ð@À$ÓG€AÙØ—g‘g˜a“j�\ ¤3 q§w¡w¨q£z£?°3Ð"7°q¼¸Q¿W¹WÀQ»Z»ÈÐ8MÐNˆÙÜ�I‰IÐ,¨dÓ3ˆÙØ—w‘w˜q“zˆHà€GÜ
�	‰	ÐCÀTÌ2Ï9É9ÓU€AÙØ—'‘'˜!“*ˆÙ”c˜'“l RÒ'Ü�I‰IÐBÀDÌ"Ï)É)ÓTˆÙØ—g‘g˜a“jˆGáÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆØ—-‘-“/ˆà w¸HÑEÐEr5   c                 ó´  — | st        d«       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                  «        t        dt        |«      z   dz   t        |«      z   dz   «       ||fS # t        $ r}|dz  }Y d }~�Œd }~ww xY w)Nz  - no data©r   r   r   zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALzwINSERT OR IGNORE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, tags) VALUES (?,?,?,?,?,?,?)r    r   iô  r   r7   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=?z  [DB] new: z skip: z FTS synced)r   Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEr   Útotal_changesr   ÚcommitÚcloser   )r.   rE   ÚdbÚokÚfailÚitr   s          r   Úto_dbrP   \   s^  € ÙÜˆmÔØÛØ	�‰œÓ	#€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Ü	ˆ.œ3˜r›7Ñ
" YÑ
.´°T³Ñ
:¸]Ñ
JÔKØˆtˆ8€Oøô ò 	Ø�A‰IŽDûð	ús   ÁBD>Ä>	EÅEÅEc           
      ó¢  — t        t        «      }|st        d«       yt        |«      }|st        d«       y|D �cg c]  }|d   sŒ	|d   t        k\  sŒ|‘Œ }}t        dt        t        |«      «      z   dz   t        t        |«      «      z   «       |r t        d|d   d   z   d	z   |d
   d   z   «       | r(|d d }t        dt        t        |«      «      z   dz   «       |syg }t        |d«      D ]É  \  }}t        |d   «      }|d   xs |d   |d   |d   |d   xs |j                  dd«      dœ}	|j                  |	«       t        dt        |«      z   dz   t        t        |«      «      z   dz   |	d   z   dz   |	d   d d z   dz   t        t        |d   «      «      z   dz   «       t        j                  d«       ŒË t        |«      \  }
}|
|fS c c}w )Nz  FAILED to fetch list pagerC   z  FAILED to parse listr!   z  List: z items, within 3yr: z    Range: r   z ~ éÿÿÿÿr   z  TEST mode: z itemsr   r   r    r7   r   )r    r   r7   r!   z  [ú/ú] ú é(   z... (zB)g333333Ó?)r   ÚLIST_URLr   r4   ÚCUTOFFr   r(   Ú	enumeraterA   r   r*   ÚtimeÚsleeprP   )Útestr-   r.   rO   Ú	all_itemsÚresultsÚiÚitemÚdetailÚentryrM   rN   s               r   Úcrawlrc   †   s  € Ü”‹?€DÙÜÐ+Ô,Øä�tÓ€EÙÜÐ&Ô'Øà#ÖS˜ r¨*£~¸"¸Z¹.ÌFÓ:R’ÐS€IÐSÜ	ˆ*”sœ3˜u›:“Ñ
&Ð)?Ñ
?Ä#ÄcÈ)ÃnÓBUÑ
UÔVÙÜˆm˜i¨™l¨:Ñ6Ñ6¸Ñ>ÀÈ2ÁÈzÑAZÑZÔ[áØ˜b˜q�Mˆ	Üˆo¤¤C¨	£NÓ 3Ñ3°hÑ>Ô?áØà€GÜ˜Y¨Ó*ò 
‰ˆˆ4Ü˜d 5™kÓ*ˆà˜G‘_Ò5¨¨W©Ø˜‘;Ø˜iÑ(Ø˜zÑ*ÒF¨d¯h©h°zÀ2Ó.Fñ	
ˆð 	�‰�uÔÜˆe”c˜!“f‰n˜sÑ"¤S¬¨Y«Ó%8Ñ8¸4Ñ?À%È
ÑBSÑSÐVYÑYÐ\aÐbiÑ\jÐknÐlnÐ\oÑoÐryÑyÔ|ô  ADð  EKð  LUñ  EVó  AWó  }Xñ  Xð  [_ñ  _ô  	`Ü�
‰
�3�ð
ô �W‹~�H€BˆØˆtˆ8€Oùò5 Ts   »
GÁGÁGÚ__main__z--testÚTESTÚFULLú[rT   )r\   z  Time: r   Úsz  New: z Skip: )F)&Ú__doc__r"   ÚsysÚosrZ   r   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrH   r,   rW   Úgetenvr   ÚnowÚutcÚstrftimerX   r   r   r4   rA   rP   rc   Ú__name__Úargvr\   Úmoder   Út0rM   rN   r   Úround© r5   r   ú<module>rz      sX  ðñ÷ × ß 2Ñ 2ß Û 	Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà%€	Ø+€ØQ€ØˆB�I‰I�kÐ#4Ó5€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€Øð  Nð  O€òòò&"FòH(óT%ðN ˆzÒØ�s—x‘xÐ€DÙ‰6˜v€DÙ	„GÙ	ˆ#�	‰/˜DÑ
  4Ñ
'Ô(Ø	ˆ�‰‹€BÙ˜$Ô�H€BˆÙ	ˆ*‘s™5  §¡£¨R¡°Ó3Ó4Ñ
4°sÑ
:Ô;Ù	ˆ)‘c˜"“gÑ
 	Ñ
)©C°«IÑ
5Õ6ð r5   