Ë
    lÊjl$  ã            
       óþ  — 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Zej                  j                  dd«      Z	ddddœZ
d	Zd
ZdZdgZ eddedz
  z
  d«      D ]  Zej#                  de› d�«       Œ d„ Zd„ Zd„ Zd&d„Zd'd„Zedk(  rødej0                  v r…dZ eej0                  «      D ]Y  \  ZZedk(  sŒedz    eej0                  «      k  sŒ%ej0                  edz      j=                  d«      sŒGej0                  edz      Z n er	 ee«       y ed¬«       ydej0                  v rM eed   «      Z ee«      Z  e!d ee «      › d�«       e dd D ]  Z" e!d e"d!   dd" › d#e"d$   › d#e"d%   › �«       Œ! y ed¬«       yy)(uK   
å››å·�æ–°é—»ç½‘-èµ„é˜³é¢‘é�“-åŽŸåˆ›æ–‡è‰º
https://zq.newssc.org/2017ycxw/
é    NÚDB_PATHz/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageu   èµ„é˜³åŽŸåˆ›æ–‡è‰ºu   èµ„é˜³é   z;https://zq.newssc.org/2017ycxw/?spm=zm5056-001.0.0.2.w9S7zKéž   é   éÿÿÿÿzGhttps://zq.newssc.org/2017ycxw/system/more/0017004000000/0017004000000_z.shtmlc                 ó`   — t        j                  | t        d¬«      }d|_        |j                  S )Né   )ÚheadersÚtimeoutÚgb2312)ÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚurlÚrs     ú!/root/gov_crawler/crawl_zqycxw.pyÚ
fetch_pager      s$   € Ü�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€Mó    c                 óF  — g }d}t        j                  || t         j                  «      D ]t  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  |||dœ«       Œv |S )z_Parse list page: <ul class="ul-listy"> <li><a href="URL"><p>TITLE</p><span>DATE</span></a></li>zH<li><a href="(https?://[^"]+)"[^>]*>\s*<p>(.*?)</p>\s*<span>(.*?)</span>r   é   é   )r   ÚtitleÚdate)ÚreÚfinditerÚDOTALLÚgroupÚstripÚappend)ÚhtmlÚitemsÚpatternÚmr   r   Údate_strs          r   Úextract_list_itemsr(   "   sŠ   € à€EØY€GÜ�[‰[˜ $¬¯	©	Ó2ò EˆØ�g‰g�a‹j×ÑÓ ˆØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:×#Ñ#Ó%ˆØ�‰˜S¨5¸(ÑCÕDð	Eð
 €Lr   c           
      ó	  — d}t        j                  d| t         j                  «      }|r |j                  d«      j	                  «       }nmt        j                  d| t         j                  «      }|rF|j                  d«      j	                  «       }t        j
                  dd|«      }|j	                  «       }d}t        j                  d| t         j                  «      }|r |j                  d«      j	                  «       }n7t        j                  d| «      }|r|j                  d«      j	                  «       }d}g }t        j                  d| t         j                  «      }|r|j                  d«      }n;t        j                  d	| t         j                  «      }|r|j                  d«      }nd}|�rt        j                  d
|t         j                  t         j                  z  «      D ]™  }	|	j                  d«      }
t        j
                  dd|	j                  d«      «      j	                  «       }|
j                  d«      sd|
z   }
|
j                  dd«      }
|j                  |xs |
j                  d«      d   |
dœ«       Œ› t        j                  d|«      }|D ]Q  }|j                  d«      s|j                  d«      rd|z   n|}|j                  |j                  d«      d   |dœ«       ŒS g }t        j                  d|t         j                  t         j                  z  «      D ]‘  }|j                  d«      }|j                  d«      r!|j                  |j                  d«      «       ŒF|j                  d«      }t        j
                  dd|«      }|j	                  «       }|sŒ�|j                  |«       Œ“ dj                  |«      }|rt        |j	                  «       «      dk  rˆ|r8dj                  |D �cg c]  }d|d   › d|d   › d�‘Œ c}«      }|r|› d|› �n|}nNt        j
                  dd |«      }t        j
                  d!d |«      j	                  «       }|rt        |«      dkD  r|}|||||t        t         d"œS c c}w )#z.Extract title, content, date from detail page.Ú z<h1>(.*?)</h1>r   z<title>(.*?)</title>u   \s*[-â€”|]\s*.*$uV   <div class="note">.*?<span>(\d{4}å¹´\d{1,2}æœˆ\d{1,2}æ—¥\s*\d{1,2}:\d{2}:\d{2})</span>z-(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s*\d{1,2}:\d{2})zF<div class="content-main">(.*?)(?:</div>\s*<div class="note1"|</main>)z<div class="content-main">(.*)zJ<a\s+[^>]*href="([^"]*\.(?:doc|docx|pdf|xls|xlsx|rar|zip))"[^>]*>(.*?)</a>z<[^>]+>r   Úhttpzhttps://zq.newssc.orgzhttps://zq.newssc.orghttps://zhttps://ú/r   )Únamer   z<img[^>]*src="([^"]+)"z+<p[^>]*>(.*?)</p>|<table[^>]*>(.*?)</table>r   z<tablez

é   ú
z- [r-   z](r   ú)ú z\s+)r   Úcontentr   r   ÚattachmentsÚ	site_namer    )r   Úsearchr   r    r!   Úsubr   Ú
IGNORECASEÚ
startswithÚreplacer"   ÚsplitÚfindallÚjoinÚlenÚ	SITE_NAMEÚGROUP)r#   Ú
source_urlr   r&   ÚtÚpub_dater2   r3   Úcontent_htmlÚa_tagÚlink_urlÚ	link_textÚimg_patternÚimg_urlÚpartsÚelemÚtagÚp_textÚaÚlinksr   s                        r   Úextract_contentrO   .   s  € ð €EÜ
�	‰	Ð# T¬2¯9©9Ó5€AÙØ—‘˜“
× Ñ Ó"‰ä�I‰IÐ-¨t´R·Y±YÓ?ˆÙØ—‘˜“
× Ñ Ó"ˆAä—‘Ð*¨B°Ó2ˆAØ—G‘G“IˆEð €HÜ
�	‰	ÐkÐmqÔsu×s|Ñs|Ó}€AÙØ—7‘7˜1“:×#Ñ#Ó%‰ô �I‰IÐFÈÓMˆÙØ—w‘w˜q“z×'Ñ'Ó)ˆHð €GØ€KÜ
�	‰	Ð[Ð]aÔce×clÑclÓm€AÙØ—w‘w˜q“z‰ô �I‰IÐ7¸¼r¿y¹yÓIˆÙØŸ7™7 1›:‰LàˆLâä—[‘[Ð!nÐp|ô  A÷  Lñ  Lô  OQ÷  OXñ  OXñ  Xó  Yò 	`ˆEØ—{‘{ 1“~ˆHÜŸ™˜z¨2¨u¯{©{¸1«~Ó>×DÑDÓFˆIØ×&Ñ& vÔ.Ø2°XÑ=�Ø#×+Ñ+Ð,KÈZÓX�Ø×Ñ¨	Ò(L°X·^±^ÀCÓ5HÈÑ5LÐU]Ñ^Õ_ð	`ô —j‘jÐ!:¸LÓIˆØ"ò 	QˆGØ×%Ñ% fÔ-Ø?F×?QÑ?QÐRUÔ?VÐ1°GÒ;Ð\c�Ø×Ñ¨¯©°cÓ(:¸2Ñ(>ÀwÑOÕPð	Qð ˆÜ—K‘KÐ NÐP\Ô^`×^gÑ^gÔjl×jwÑjwÑ^wÓxò 	)ˆDØ—*‘*˜Q“-ˆCØ�~‰~˜hÔ'Ø—‘˜SŸY™Y q›\Õ*ð Ÿ™ A›�äŸ™ 
¨B°Ó7�ØŸ™›�ÚØ—L‘L Õ(ð	)ð —+‘+˜eÓ$ˆñ ”c˜'Ÿ-™-›/Ó*¨RÒ/ÙØ—I‘IÀ{ÖSÀ!  Q v¡Y K¨r°!°E±(°¸1Ò=ÒSÓTˆEÙ/4˜˜˜t E 7Ñ+¸%‰Gô —6‘6˜* c¨<Ó8ˆDÜ—6‘6˜& # tÓ,×2Ñ2Ó4ˆDÙœ˜D›	 BšØ�ð ØØØØ"ÜÜñð ùò Ts   Ï<Rc                 óH  — | sd} t        d| › d�«       t        | «      }t        || «      }|j                  «       D ]d  \  }}|dk(  rt        |› d|› �«       Œ|dk(  r4t        |› dt	        |«      › d�«       t        |d	d
 «       t        d«       ŒUt        |› d|› �«       Œf |S )zTest a single article.z4https://zq.newssc.org/system/20250114/001501646.htmlz=== Testing: z ===r3   z: r2   z (z chars):Niè  ú...)Úprintr   rO   r$   r=   )r   r#   ÚresultÚkÚvs        r   Ú
crawl_testrV   Ž   s°   € áØDˆÜ	ˆM˜#˜˜dÐ
#Ô$Ü�c‹?€DÜ˜T 3Ó'€FØ—‘“ò ‰ˆˆ1Ø�ÒÜ�Q�C�r˜!˜�+ÕØ�)Š^Ü�Q�C�rœ#˜a›&˜ Ð*Ô+Ü�!�E�T�(ŒOÜ�%�Lä�Q�C�r˜!˜�+Õðð €Mr   Fc                 ó  — ddl }g }t        «       }t        t        «      D ]±  \  }}t	        d|dz   › dt        t        «      › d|› �«       t        |«      }t        |«      }t	        dt        |«      › d�«       |D ]B  }|d	   |vsŒ|j                  |d	   «       |j                  |«       | sŒ3t        |«      d
k\  sŒB n | sŒ¢t        |«      d
k\  sŒ± n t	        dt        |«      › �«       | rœ|dd
 D ]“  }t	        d|d   dd › d�«       t        |d	   «      }t        ||d	   «      }	t	        d|	d   › �«       t	        d|	d   › �«       t	        dt        |	d   «      › d|	d   dd › �«       t	        dt        |	d   «      › �«       Œ• y|j                  t        d¬«      }
|
j                  d«       |
j                  d«       |
j                  «       }d}d}|D ]÷  }|j                  d|d	   f«       |j                  «       }|r|dz  }Œ1t        |d	   «      }t        ||d	   «      }	|	d   rt!        j"                  |	d   d¬«      nd }|j                  d!|	d   |	d   |	d   d"z   t$        z   d"z   |	d   r|	d   dd nd z   |	d   |	d	   |	d#   ||	d$   |	d	   f	«       |dz  }|d%z  dk(  sŒÍ|
j'                  «        t	        d&|› dt        |«      › d'�«       Œù |
j'                  «        |
j)                  «        t	        d(|› d)|› �«       y)*z"Crawl list pages and detail pages.r   Nz[Page r   r,   z] z  Found ú itemsr   r   z
Total unique items: z
=== Detail: r   é(   z... ===z	  Title: z  Date: r   z  Content (r2   z	 chars): éÈ   z  Attachments: r3   r
   )r   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=15000z)SELECT id FROM gov_raw WHERE page_url = ?F)Úensure_asciir*   z§INSERT INTO gov_raw (title, content, summary, publish_date, page_url, site_name, attachments, group_name, source_url)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)r1   r4   r    r.   z  Inserted rQ   z
Done. Inserted: z, Existing: )Úsqlite3ÚsetÚ	enumerateÚ	PAGE_URLSrR   r=   r   r(   Úaddr"   rO   Úconnectr   ÚexecuteÚcursorÚfetchoneÚjsonÚdumpsr>   ÚcommitÚclose)Ú	test_moder\   Ú	all_itemsÚ	seen_urlsÚpiÚpage_urlr#   r$   ÚitemrS   ÚconnÚcÚinsertedÚexistingÚrowÚattachments_jsons                   r   Ú
crawl_listru   ¡   sa  € ãà€IÜ“€Iô "¤)Ó,ò ‰ˆˆHÜ��r˜!‘t�f˜Aœc¤)›nÐ-¨R°¨zÐ:Ô;Ü˜(Ó#ˆÜ" 4Ó(ˆÜ�œ˜U›˜ FÐ+Ô,Øò 	ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Ô&Ú¤ Y£°1Ó!4Ùð	ò œ˜Y›¨1Ó,Ùðô 
Ð"¤3 y£>Ð"2Ð
3Ô4áà˜b˜q�Mò 	BˆDÜ�N 4¨¡=°°"Ð#5Ð"6°gÐ>Ô?Ü˜d 5™kÓ*ˆDÜ$ T¨4°©;Ó7ˆFÜ�I˜f W™oÐ.Ð/Ô0Ü�H˜V F™^Ð,Ð-Ô.Ü�K¤ F¨9Ñ$5Ó 6Ð7°yÀÈ	ÑARÐSWÐTWÐAXÐ@YÐZÔ[Ü�O¤C¨¨}Ñ(=Ó$>Ð#?Ð@ÕAð	Bð 	ð �?‰?œ7¨Bˆ?Ó/€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ø�‰‹€Aà€HØ€HØò @ˆà	�	‰	Ð=ÀÀUÁ¸~ÔNØ�j‰j‹lˆÙØ˜‰MˆHØä˜$˜u™+Ó&ˆÜ   t¨E¡{Ó3ˆØTZÐ[hÒTiœ4Ÿ:™: f¨]Ñ&;È%ÕPÐoqÐà	�	‰	ð5ð �w‘Ø�yÑ!Ø˜‘ 3Ñ&¬Ñ2°SÑ8ÐW]Ð^gÒWh¸FÀ9Ñ<MÈdÈsÑ<SÐnpÑqØ�v‘Ø�u‘Ø�{Ñ#Ø Ø�w‘Ø�u‘ð
ô	
ð 	�A‰ˆØ�b‰=˜AÓØ�K‰KŒMÜ�K ˜z¨¬3¨y«>Ð*:¸#Ð>Õ?ð=@ð@ 	‡K�K„MØ‡J�J„LÜ	Ð˜x˜j¨°X°JÐ
?Õ@r   Ú__main__z--testr+   T)ri   z--listzPage 1: rX   z  r   rY   z | r   r   )N)F)#Ú__doc__r   ÚsysÚosre   Útimer   Úenvironr   r   r   r>   r?   Ú	MAX_PAGESr_   ÚrangeÚnr"   r   r(   rO   rV   ru   Ú__name__Úargvr   r^   ÚiÚargr=   r8   r#   r$   rR   rn   © r   r   ú<module>r„      sÚ  ðñ÷ )× (× (à
�*‰*�.‰.˜Ð$5Ó
6€ð DØZØ0ñ€ð
 !€	Ø€Ø€	ð
 Bð€	ñ 
ˆs�C˜9 q™=Ñ)¨2Ó	.ò j€AØ×ÑÐ^Ð_`Ð^aÐagÐhÕiðjòò	ò]ó@ó&NAðb ˆzÒØ�3—8‘8ÑØˆÙ §¡Ó)ò 	‰FˆAˆsØ�h‹ 1 q¡5©3¨s¯x©x«=Ó#8¸S¿X¹XÀaÈÁc¹]×=UÑ=UÐV\Õ=]Ø—h‘h˜q ™s‘m�Ùð	ñ Ù�s�Oá Ö&Ø	�S—X‘XÑ	á˜) A™,Ó'ˆÙ" 4Ó(ˆÙ�™˜U›˜ FÐ+Ô,Ø˜"˜1�Iò 	NˆDÙ�B�t˜G‘} S bÐ)Ð*¨#¨d°6©l¨^¸3¸tÀE¹{¸mÐLÕMñ	Nñ 	˜UÖ#ð' r   