Ë
    ¸¬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mZ ddlmZ dZ	dZ
dZde
› d	�d
œZdZdZdej                  v Z ej"                  «       Zej&                  j)                  e«       de_        d„ Zd„ Zd„ Zedk(  r e«        yy)uÂ   Crawler for å›½å®¶çº§é�‚å®�ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº - å…¬ç¤ºå…¬å‘Š
   https://snjkq.suining.gov.cn/xinwen/list/0508cc5f620b47cfad06549fa5fe3a95.html
   CMS: Custom (Bootstrap), pagination: ?page=N
é    N)ÚBeautifulSoup)Údatetimez2/xinwen/list/0508cc5f620b47cfad06549fa5fe3a95.htmlzhttps://snjkq.suining.gov.cné   zuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36ú/)z
User-AgentÚRefererz/root/search.dbÚsnjkqz--incrementalFc                 ó  — t         › t        › d| › �}t        j                  |d¬«      }d|_        t        |j                  d«      }g }|j                  d«      }|D ]¬  }|j                  d«      }|j                  d«      }|r|sŒ*|j                  d	d
«      j                  «       }	|j                  dd
«      j                  «       }
|j                  d¬«      }|
r|
j                  d«      s	t         |
z   }
|j                  |	|
|dœ«       Œ® |S )Nz?page=é   ©Útimeoutúutf-8úhtml.parserzul.news-list liÚaÚspanÚtitleÚ ÚhrefT©ÚstripÚhttp)r   ÚurlÚdate)ÚDOMAINÚ	BASE_LISTÚsÚgetÚencodingr   ÚtextÚselectÚfindr   Úget_textÚ
startswithÚappend)Úpage_numr   ÚrÚsoupÚitemsÚlisÚlir   Ú	date_spanr   r   Údate_strs               ú /root/gov_crawler/crawl_snjkq.pyÚget_list_pager-   "   sü   € ÜˆH”Y�K˜v h ZÐ
0€CÜ	�‰ˆc˜2ˆÓ€AØ€A„JÜ˜Ÿ™ Ó/€DØ€EØ
�+‰+Ð'Ó
(€CØò 
FˆØ�G‰G�C‹LˆØ—G‘G˜F“Oˆ	Ù™	ØØ—‘�g˜rÓ"×(Ñ(Ó*ˆØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆØ×%Ñ%¨DÐ%Ó1ˆÙ˜Ÿ™¨Ô/Ü˜D‘=ˆDØ�‰˜u¨T¸8ÑDÕEð
Fð €Ló    c                 óP  — 	 t         j                  | d¬«      }d|_        t        |j                  d«      }|j                  d«      }|r|j                  d¬	«      nd}d}|j                  d
«      }|rp|j                  d«      }|D ]Z  }	|	j                  d¬	«      }
d|
v st        j                  d|
«      sŒ0t        j                  d|
«      }|sŒI|j                  d«      } n |j                  d«      }|s|j                  d«      }d}g }|rì|j                  ddg«      D ]  }|j                  «        Œ t        |«      }t        j                  dd|«      }t        j                  dd|«      }|j                  d«      }|rx|j                  d«      D ]d  }|j                  dd«      j!                  «       }|j                  d¬	«      }|r|j#                  d«      s	t$        |z   }|j'                  ||dœ«       Œf ||||fS # t        $ r}t	        d|› �«       ddg dfcY d }~S d }~ww xY w)Nr
   r   r   z  [ERROR] Fetch detail failed: r   r   zdiv.h2.fw-boldTr   z.article-infor   u   å�‘å¸ƒæ—¶é—´z\d{4}-\d{2}-\d{2}z(\d{4}-\d{2}-\d{2})é   zarticle.article-contentzdiv.xqing-web-boxÚscriptÚstylez *<tablez<tablez>\s+<z>
<zdiv.xqing-web-filer   r   r   )Únamer   )r   r   r   Ú	ExceptionÚprintr   r   Ú
select_oner!   Úfind_allÚreÚsearchÚgroupÚ	decomposeÚstrÚsubr   r"   r   r#   )r   r%   Úer&   Útitle_elr   r+   Úinfo_elÚspansr   ÚtxtÚmÚarticleÚcontent_htmlÚattachmentsÚtagÚfile_divÚa_tagÚlinkÚfnames                       r,   Ú
get_detailrL   7   s)  € ðÜ�E‰E�#˜rˆEÓ"ˆØˆŒ
ô ˜Ÿ™ Ó/€Dð �‰Ð/Ó0€HÙ-5ˆH×Ñ DÐÔ)¸2€Eð €HØ�o‰o˜oÓ.€GÙØ× Ñ  Ó(ˆØò 	ˆDØ—-‘- d�-Ó+ˆCØ Ñ$¬¯	©	Ð2FÈÕ(LÜ—I‘IÐ4°cÓ:�ÚØ Ÿw™w q›z�HÙð	ð �o‰oÐ7Ó8€GÙØ—/‘/Ð"5Ó6ˆØ€LØ€KÙà×#Ñ# X¨wÐ$7Ó8ò 	ˆCØ�M‰M�Oð	ô ˜7“|ˆä—v‘v˜k¨8°\ÓBˆÜ—v‘v˜h¨°Ó=ˆð ×%Ñ%Ð&:Ó;ˆÙØ!×*Ñ*¨3Ó/ò A�Ø—y‘y ¨Ó,×2Ñ2Ó4�ØŸ™¨T˜Ó2�Ù §¡°Ô 7Ü! D™=�DØ×"Ñ"¨E¸$Ñ#?Õ@ðAð �, ¨XÐ5Ð5øôa ò ÜÐ/°¨sÐ3Ô4Ø�2�r˜2ˆ~Õûðús   ‚G> Ç>	H%ÈH ÈH%È H%c                  óê  — t        j                  t        «      } | j                  «       }|j	                  d«       | j                  «        d}d}d}t        rt        nd}t        d|dz   «      D �]™  }t        d|› d�«       t        |«      }|st        d«        �not        dt        |«      › d	�«       |D �]N  }|d
   }	|d   }
|d   }|j	                  d|	f«       |j                  «       r|dz  }Œ<t        d|
d d › d�«       t        |	«      \  }}}}|rt        |j                  «       «      dk  rt        d«       d|
› d�}|xs |}t        j                   dd|«      }t        j                   dd|«      j                  «       }|d d }|}|r|dz  }|D ]  }|d|d
   › d|d   › d�z  }Œ 	 |j	                  d|xs |
|	t"        |||dd d!f	«       |j$                  dkD  r!|dz  }| j                  «        t        d"«       n|dz  }�ŒQ �Œœ | j+                  «        t        d$«       t        d%|› d&|› d'|› �«       y # t&        $ r.}t        d#|› �«       |dz  }| j)                  «        Y d }~�Œ·d }~ww xY w)(Na  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT, url TEXT UNIQUE, content TEXT,
        summary TEXT, publish_date TEXT,
        crawl_time TEXT, source TEXT, site_name TEXT,
        category TEXT, error TEXT
    )r   iç  r0   z	--- Page z ---z  No more items, stopping.z  Found z itemsr   r   r   z)SELECT id FROM gov_raw WHERE page_url = ?z  Fetching: é(   z...é2   z+  [WARN] Content too short, using list dataz<p>z</p>z<[^>]+>ú z\s+i,  u$   

<p><strong>é™„ä»¶ï¼š</strong></p>
z<p><a href="z">r3   z	</a></p>
zÃINSERT OR IGNORE INTO gov_raw
                    (title, page_url, source_url, content, summary, publish_date, site_name, category, status)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)u   é�‚å®�ç»�æµŽæŠ€æœ¯å¼€å�‘åŒºu   å…¬ç¤ºå…¬å‘ŠÚ	publishedz    [+] Importedz    [ERROR] DB insert: z
===== Done =====zNew: z, Skip: z	, Error: )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚincrementalÚ	MAX_PAGESÚranger5   r-   ÚlenÚfetchonerL   r   r8   r=   r   Úrowcountr4   ÚrollbackÚclose)ÚconnÚcÚ	count_newÚ
count_skipÚcount_errorÚ	max_pagesÚpager'   ÚitemÚpage_urlÚ
list_titleÚ	list_dater   rE   rF   Údetail_dateÚpub_dateÚ
clean_textÚsummaryÚfull_contentÚattr>   s                         r,   Úcrawlrq   n   s·  € Ü�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð 	‡K�K„Mà€IØ€JØ€Kõ )•	¨c€Iä�a˜ Q™Ó'ó 7 ˆÜ�	˜$˜˜tÐ$Ô%Ü˜dÓ#ˆÙÜÐ.Ô0ÚÜ�œ˜U›˜ FÐ+Ô,Øó 0	 ˆDØ˜E‘{ˆHØ˜g™ˆJØ˜V™ˆIð �I‰IÐAÀHÀ;ÔOØ�z‰zŒ|Ø˜a‘�
Øä�L ¨C¨R Ð 1°Ð5Ô6Ü<FÀxÓ<PÑ9ˆE�< ¨ká¤3 |×'9Ñ'9Ó';Ó#<¸rÒ#AÜÐCÔEØ!$ Z L°Ð5�ð #Ò/ iˆHô Ÿ™ 
¨C°Ó>ˆJÜŸ™ ¨¨ZÓ8×>Ñ>Ó@ˆJØ   #Ð&ˆGð (ˆLÙØÐ IÑI�Ø&ò Y�CØ  l°3°u±:°,¸bÀÀVÁÀÈZÐ$XÑX‘LðYð Ø—	‘	ð :ð Ò(˜j¨(´F¸LÈ'ØÐ<¸nÈkð[ô\ð
 —:‘: ’>Ø ‘N�IØ—K‘K”MÜÐ,Õ.à !‘O�JùòY0	 ð7 ðr 	‡J�J„LÜ	ÐÔ Ü	ˆE�)�˜H Z L°	¸+¸Ð
GÕHøô ò  ÜÐ/°¨sÐ3Ô4Ø˜qÑ �Ø—‘—’ûð ús   Æ-AH;È;	I2É#I-É-I2Ú__main__)Ú__doc__ÚrequestsrR   r8   ÚosÚsysÚbs4r   r   r   r   rY   ÚHEADERSrT   ÚCRAWLER_NAMEÚargvrX   ÚSessionr   ÚheadersÚupdateÚverifyr-   rL   rq   Ú__name__© r.   r,   ú<module>r�      sµ   ðñó
 Û Û 	Û 	Û 
Ý Ý ð A€	Ø	'€Ø€	ð JØ�˜ˆ|ñ€ð €Ø€ð  §¡Ð)€à€H×ÑÓ€Ø ‡	�	× Ñ �Ô Ø€„òò*46ònNIðb ˆzÒÙ	…Gð r.   