Ë
    †É…jå  ã                   ó"  — 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mZmZ ddlZ e	ej                  «      dkD  r2ej                  d   j                  «       r eej                  d   «      ndZe� ed ee«      z   «        ej                   dd«      ZdZd	Zd
ZddiZ ej,                  «        ed¬«      z
  j/                  d«      ZdZ ej4                  «       Zej8                  j;                  e«       d„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)u6   crawl_xceda.py - å®£åŸŽç»�å¼€åŒºç®¡å§”ä¼š-å…¬ç¤ºå…¬å‘Šé    N)ÚdatetimeÚ	timedeltaé   z[AutoPg] max_pages=Ú	SEARCH_DBz/root/search.dbu%   å®£åŸŽç»�å¼€åŒºç®¡å§”ä¼š-å…¬ç¤ºå…¬å‘Šzhttps://xceda.xuancheng.gov.cnz>https://xceda.xuancheng.gov.cn/News/showList/3245/page_{}.htmlz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36iG  )Údaysz%Y-%m-%dz
2023-06-19c                  ó´  — 	 t         j                  t        j                  d«      d¬«      } d| _        t        j                  d| j                  «      }|rt        |j                  d«      «      S t        j                  d| j                  «      }|r"t        |j                  d«      «      }|dz   dz  S y	# t        $ r}t        d
|› �d¬«       Y d}~y	d}~ww xY w)zGet total pages from first pager   é   ©Útimeoutúutf-8zpagecount="(\d+)"ztotal="(\d+)"é   é   é^   zError getting total pages: T©ÚflushN)ÚsessionÚgetÚLIST_URLÚformatÚencodingÚreÚsearchÚtextÚintÚgroupÚ	ExceptionÚprint)ÚrÚmÚtotalÚes       ú /root/gov_crawler/crawl_xceda.pyÚget_total_pagesr#      s³   € ðÜ�K‰KœŸ™¨Ó*°BˆKÓ7ˆØˆŒ
Ü�I‰IÐ*¨A¯F©FÓ3ˆÙÜ�q—w‘w˜q“z“?Ð"Ü�I‰IÐ&¨¯©Ó/ˆÙÜ˜Ÿ™ ›
“OˆEØ˜B‘J 2Ñ%Ð%ØøÜò ÜÐ+¨A¨3Ð/°tÕ<Üûðús   ‚A,B4 Á/AB4 Â4	CÂ=CÃCc                 ó  — g }t        j                  d| «      D ]h  }|j                  d«      }t        |j                  d«      z   }|j                  d«      j	                  «       }|t
        k  rŒU|j                  |||f«       Œj |S )z2Parse list page, return list of (url, title, date)zb<li>\s*<span>\[(\d{4}-\d{2}-\d{2})\]</span>\s*<a href="(/News/show/\d+\.html)"[^>]*title="([^"]*)"r   é   é   )r   Úfinditerr   ÚBASE_URLÚstripÚCUTOFF_DATEÚappend)ÚhtmlÚitemsr   Údate_strÚurlÚtitles         r"   Ú
parse_listr1   0   sƒ   € à€EÜ�[‰[ØmØóò -ˆð —7‘7˜1“:ˆÜ˜Ÿ™ ›Ñ#ˆØ—‘˜“
× Ñ Ó"ˆð ”kÒ!Øà�‰�c˜5 (Ð+Õ,ð-ð €Ló    c                 óš  — 	 t         j                  | d¬«      }d|_        |j                  }|j	                  d«      }|dk  r5|j	                  d«      }|dk\  r|d| }|j                  d«      }|dk\  r|}ny|dk  ryd}|}d	}|t        |«      k  �r||   d
k(  rd}|}	nï||   dk(  rÜ|r×|	|dz    }
d	}|
j                  d«      rŒB|
j                  d«      rP|dz  }|dk(  r |||dz    }t        j                  dd|«      }t        j                  dd|«      }|j                  «       S |
j                  d«      sI|
j                  d«      s8|
j                  d«      s'|
j                  d«      s|
j                  d«      r|dz  }d	}n||   dk(  r|r	 |dz  }|t        |«      k  r�Œy# t        $ r}t        d| › d|› �d¬«       Y d}~yd}~ww xY w)z%Fetch detail page and extract contentr	   r
   r   z$<div class="m-contnet j-fontContent"r   zclass="m-contnet j-fontContent"Nz<divFú<Tú>r   z<!--z</divz9^\s*(?:<p[^>]*>\s*(?:&nbsp;|\s)*\s*</p>\s*|<br\s*/?>\s*)*Ú z<h1[^>]*>.*?</h1>z<brz<imgz<inputz<hrú
zError fetching ú: r   )r   r   r   r   ÚfindÚrfindÚlenÚ
startswithr   Úsubr)   r   r   )r/   r   r,   ÚstartÚprefixÚ	div_startÚdepthÚiÚin_tagÚ	tag_startÚtagÚcontentr!   s                r"   Úfetch_detailrG   B   s   € ð8Ü�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆð —	‘	Ð@ÓAˆØ�1Š9Ø—I‘IÐ?Ó@ˆEØ˜Šzà˜f˜u˜�Ø"ŸL™L¨Ó0�	Ø ’>Ø%‘Eàà�1Š9Øð ˆØˆØˆØ”#�d“)‹mØ�A‰w˜#Š~Ø�Ø‘	Ø�a‘˜C’ÙØ˜y¨¨1©Ð-�CØ"�FØ—~‘~ fÔ-Ø Ø—~‘~ gÔ.Ø ™
˜Ø  Aš:Ø&*¨5°°1± o˜Gä&(§f¡fÐ-iÐkmÐovÓ&w˜Gä&(§f¡fÐ-AÀ2ÀwÓ&O˜GØ#*§=¡=£?Ð2Ø Ÿ^™^¨EÔ2¸3¿>¹>È&Ô;QÐZ]×ZhÑZhÐiqÔZrÐ{~÷  |Jñ  |Jð  KPô  |QØŸ>™>¨&Ô1Ø! Q™J˜EØ‘Ø�a‘˜D’ÙàØ�‰FˆAð7 ”#�d“)Œmð8 øÜò Ü� ˜u B q cÐ*°$Õ7Üûðús,   ‚A4F$ Á7F$ Á=B(F$ Ä&A;F$ Æ$	G
Æ-GÇG
c           	      ó
  — t        j                  t        d¬«      }|j                  «       }d}d}d}| D ]x  \  }}}	 t	        |«      }	|	st        d|dd › �d¬«       |d	z  }Œ.|j                  d
t        ||||	f«       |j                  dkD  r|d	z  }t        d|dd › d|› �d¬«       n|d	z  }Œz |j                  «        |j                  «        |||fS # t        $ r%}
t        d|dd › d|
› �d¬«       |d	z  }Y d}
~
ŒÉd}
~
ww xY w)zSave items to databaseé<   r
   r   z  [SKIP] No content: Né(   Tr   r   zhINSERT OR IGNORE INTO gov_raw (site_name, title, page_url, publish_date, content) VALUES (?, ?, ?, ?, ?)z  [NEW] é2   z | z  [ERR] r8   )Úsqlite3ÚconnectÚDB_PATHÚcursorrG   r   ÚexecuteÚ	SITE_NAMEÚrowcountr   ÚcommitÚclose)r-   ÚconnÚcÚ	new_countÚ
skip_countÚerror_countr/   r0   r.   rF   r!   s              r"   Ú
save_to_dbrZ   ~   s-  € ä�?‰?œ7¨BÔ/€DØ�‰‹€Aà€IØ€JØ€Kà %ò ÑˆˆU�Hð	Ü" 3Ó'ˆGÙÜÐ-¨e°C°R¨j¨\Ð:À$ÕGØ˜qÑ �Øà�I‰IØzÜ˜E 3¨°'Ð:ôð �z‰z˜AŠ~Ø˜Q‘�	Ü˜  s¨  ¨C°¨zÐ:À$ÖGà˜a‘�
øð!ð* 	‡K�K„MØ‡J�J„LØ�j +Ð-Ð-øô ò 	Ü�H˜U 3 B˜Z˜L¨¨1¨#Ð.°dÕ;Ø˜1Ñ�Kûð	ús   ¼%CÁ"ACÃ	DÃC=Ã=Dc            	      óø  — t        dt        › d�d¬«       t        dt        › �d¬«       t        «       } t        d| › �d¬«       g }t	        dt        | t        xs | «      dz   «      D ]Œ  }	 t        j                  t        j                  |«      d¬	«      }d
|_        t        |j                  «      }|st        d|› d�d¬«        n0|j                  |«       t        d|› dt        |«      › d�d¬«       ŒŽ t        dt        |«      › �d¬«       |st        dd¬«       y t#        |«      \  }}}t        dd¬«       t        d|› d|› d|› �d¬«       y # t         $ r}t        d|› d|› �d¬«       Y d }~�Œd }~ww xY w)Nz=== z ===Tr   zCutoff: zTotal pages: r   r	   r
   r   z  Page z: no items (stopping)r8   z itemsz error: z
Total items to process: zNo new items found.z
=== Summary ===zNew: z, Skipped: z
, Errors: )r   rQ   r*   r#   ÚrangeÚminÚ_MAX_PGr   r   r   r   r   r1   r   Úextendr;   r   rZ   )	Útotal_pagesÚ	all_itemsÚpager   r-   r!   rW   rX   rY   s	            r"   Úmainrc       su  € Ü	ˆD”�˜4Ð
 ¨Õ-Ü	ˆH”[�MÐ
"¨$Õ/ä!Ó#€KÜ	ˆM˜+˜Ð
'¨tÕ4à€IÜ�aœ˜[¬'Ò*@°[ÓAÀ!ÑCÓDò ˆð	Ü—‘œHŸO™O¨DÓ1¸2�Ó>ˆAØ ˆAŒJÜ˜qŸv™vÓ&ˆEÙÜ˜ ˜vÐ%:Ð;À4ÕHÙØ×Ñ˜UÔ#Ü�G˜D˜6 ¤C¨£J <¨vÐ6¸dÖCðô 
Ð&¤s¨9£~Ð&6Ð
7¸tÕDáÜÐ#¨4Õ0Øä)3°IÓ)>Ñ&€Iˆz˜;ä	Ð dÕ+Ü	ˆE�)�˜K¨
 |°:¸k¸]Ð
KÐSWÖXøô ò 	Ü�G˜D˜6 ¨!¨Ð-°TÕ:Ýûð	ús   Á+AEÃ.EÅ	E9ÅE4Å4E9Ú__main__)$Ú__doc__Úrequestsr   rL   ÚosÚsysr   r   Ú_SYSr;   ÚargvÚisdigitr   r^   r   ÚstrÚgetenvrN   rQ   r(   r   ÚHEADERSÚnowÚstrftimeÚTHREE_YEARS_AGOr*   ÚSessionr   ÚheadersÚupdater#   r1   rG   rZ   rc   Ú__name__© r2   r"   ú<module>rw      s  ðá <Û Û 	Û Û 	Û 
ß (ó Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/à
ˆ"�)‰)�KÐ!2Ó
3€Ø3€	Ø+€ØK€àð  Dð€ð  �8—<‘<“>¡I°5Ô$9Ñ9×CÑCÀJÓO€à€à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò"ò$:òx .òDYðB ˆzÒÙ…Fð r2   