Ë
    ÿÏŽjA  ã                   óÆ  — 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ZdZd„ Zd„ Zd#d„Zd„ Zdefd„Zedk(  rƒdej,                  v r
 ed¬«       ydej,                  v rR e ed«      «      Z ee«      Z ed ee«      z  «       edd D ]"  Z eded   dd ›ded   ›ded    dd! ›�«       Œ$ y ede¬"«       yy)$ug   
è¾½å®�ï¼ˆè�¥å�£ï¼‰æ²¿æµ·äº§ä¸šåŸºåœ°-é€šçŸ¥å…¬å‘Š
https://ykcyjd.yingkou.gov.cn/003/003003/about.html
é    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-Languageu1   è¾½å®�ï¼ˆè�¥å�£ï¼‰æ²¿æµ·äº§ä¸šåŸºåœ°-é€šçŸ¥å…¬å‘Šu   è�¥å�£é   é   z(https://ykcyjd.yingkou.gov.cn/003/003003c                 ó6   — | dk(  r	t         dz   S t         d| z  z   S )Né   z/about.htmlz/%d.html)ÚBASE_URL)Úpages    ú!/root/gov_crawler/crawl_ykcyjd.pyÚget_list_urlr      s$   € Øˆq‚yÜ˜-Ñ'Ð'ä˜* tÑ+Ñ+Ð+ó    c                 ób   — t        j                  | t        dd¬«      }d|_        |j                  S )Né   T)ÚheadersÚtimeoutÚallow_redirectszutf-8)ÚrequestsÚgetÚHEADERSÚencodingÚtext)ÚurlÚrs     r   Ú
fetch_pager      s&   € Ü�‰�S¤'°2ÀtÔL€AØ€A„JØ�6‰6€Mr   r   c                 ó  — g }t        j                  d| t         j                  «      }|s|S |j                  d«      }d}t        j                  ||t         j                  «      D ]¥  }|j                  d«      }|j                  d«      j                  «       }|j                  d«      j                  «       }	|j                  d«      rd|z   }n|j                  d«      sd	|z   }|j                  d«      sŒ‘|j                  |||	d
œ«       Œ§ |S )Nz%<ul[^>]*id="infolist"[^>]*>(.*?)</ul>r   zx<li[^>]*>.*?<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"[^>]*>(.*?)</a>.*?<span[^>]*class="ewb-list-date"[^>]*>(.*?)</span>é   é   ú/úhttps://ykcyjd.yingkou.gov.cnÚhttpzhttps://ykcyjd.yingkou.gov.cn/)r   ÚtitleÚdate)ÚreÚsearchÚDOTALLÚgroupÚfinditerÚstripÚ
startswithÚappend)
Úhtmlr
   ÚitemsÚmÚul_htmlÚ
li_patternÚm2r   r!   Údate_strs
             r   Úextract_list_itemsr2   $   sì   € Ø€EÜ
�	‰	Ð:¸DÄ"Ç)Á)ÓL€AÙØˆà�g‰g�a‹j€Gð M€JÜ�k‰k˜* g¬r¯y©yÓ9ò 
EˆØ�h‰h�q‹kˆØ—‘˜“×!Ñ!Ó#ˆØ—8‘8˜A“;×$Ñ$Ó&ˆØ�>‰>˜#ÔØ1°CÑ7‰CØ—‘ Ô'Ø2°SÑ8ˆCØ�~‰~Ð=Ô>ØØ�‰˜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| «      }|r|j                  d«      j	                  «       }d}g }d}t        j                  d| t         j                  «      }|r|j                  d«      }|�r"t        j                  d|t         j                  t         j                  z  «      D ]š  }	|	j                  d«      }
t        j
                  d	d|	j                  d
«      «      j	                  «       }|
j                  d«      s|
j                  d«      rd|
z   n|
}
|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                  |«       Œ7|j                  d«      }t        j
                  d	d|«      }t        j
                  dd|«      }|j	                  «       }|sŒ‰|j                  |«       Œ› dj                  |«      }|rt        |j	                  «       «      dk  rNt        j
                  d	d|«      }t        j
                  dd|«      j	                  «       }|rt        |«      dkD  r|}|||||t        t        dœS )NÚ z&<h3[^>]*id="ivs_title"[^>]*>(.*?)</h3>r   z<title>(.*?)</title>u   \s*[-â€”|]\s*.*$u&   å�‘å¸ƒæ—¶é—´ï¼š(\d{4}-\d{1,2}-\d{1,2})z<<div[^>]*class="ewb-article-content"[^>]*>(.*?)</div>\s*<!--zG<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|rar|zip))"[^>]*>(.*?)</a>z<[^>]+>r   r    r   r   éÿÿÿÿ)Únamer   z<img[^>]*src="([^"]+)"z+<p[^>]*>(.*?)</p>|<table[^>]*>(.*?)</table>r   z<tablez&[nN][bB][sS][pP];ú z

r   z\s+)r!   Úcontentr"   r   ÚattachmentsÚ	site_namer&   )r#   r$   r%   r&   r(   Úsubr'   ÚIr)   r*   ÚsplitÚfindallÚjoinÚlenÚ	SITE_NAMEÚGROUP)r+   Ú
source_urlr!   r-   ÚtÚpub_dater8   r9   Úcontent_htmlÚa_tagÚlink_urlÚ	link_textÚimg_urlÚpartsÚelemÚtagÚp_textr   s                     r   Úextract_contentrO   :   sP  € Ø€EÜ
�	‰	Ð;¸TÄ2Ç9Á9ÓM€AÙØ—‘˜“
× Ñ Ó"‰ä�I‰IÐ-¨t´R·Y±YÓ?ˆÙØ—‘˜“
× Ñ Ó"ˆAÜ—‘Ð*¨B°Ó2ˆAØ—G‘G“IˆEà€HÜ
�	‰	Ð;¸TÓB€AÙØ—7‘7˜1“:×#Ñ#Ó%ˆà€GØ€KØ€Lä
�	‰	ÐQÐSWÔY[×YbÑYbÓc€AÙØ—w‘w˜q“zˆâÜ—[‘[Ð!kÐmyÔ{}×{Ñ{ô  CE÷  CLñ  CLñ  |Ló  Mò 	`ˆEØ—{‘{ 1“~ˆHÜŸ™˜z¨2¨u¯{©{¸1«~Ó>×DÑDÓFˆIØ×&Ñ& vÔ.ØIQ×I\ÑI\Ð]`ÔIaÐ:¸XÒEÐgo�Ø×Ñ¨	Ò(L°X·^±^ÀCÓ5HÈÑ5LÐU]Ñ^Õ_ð	`ô —z‘zÐ";¸\ÓJò 	QˆGØ×%Ñ% fÔ-ØGN×GYÑGYÐZ]ÔG^Ð9¸GÒCÐdk�Ø×Ñ¨¯©°cÓ(:¸2Ñ(>ÀwÑOÕPð	Qð
 ˆÜ—K‘KÐ NÐP\Ô^`×^gÑ^gÔjl×jnÑjnÑ^nÓoò 
	)ˆDØ—*‘*˜Q“-ˆCØ�~‰~˜hÔ'Ø—‘˜SÕ!àŸ™ A›�ÜŸ™ 
¨B°Ó7�ÜŸ™Ð 5°s¸FÓC�ØŸ™›�ÚØ—L‘L Õ(ð
	)ð —+‘+˜eÓ$ˆá”c˜'Ÿ-™-›/Ó*¨RÒ/Ü�v‰v�j # |Ó4ˆÜ�v‰v�f˜c 4Ó(×.Ñ.Ó0ˆÙ”C˜“I ’NØˆGð ØØØØ"ÜÜñð r   Fc                 óÎ  — dd l }g }t        «       }t        d|dz   «      D ]–  }t        |«      }t	        d|||d d fz  «       t        |«      }t        ||«      }t	        dt        |«      z  «       |D ]/  }	|	d   |vsŒ|j                  |	d   «       |j                  |	«       Œ1 | sŒ‡t        |«      dk\  sŒ– n t	        dt        |«      z  «       | rš|d d D ]‘  }	t	        d	|	d
   d d z  «       t        |	d   «      }t        ||	d   «      }
t	        d|
d
   z  «       t	        d|
d   z  «       t	        dt        |
d   «      |
d   d d fz  «       t	        dt        |
d   «      z  «       Œ“ y |j                  t        d¬«      }|j                  d«       |j                  «       }d}d}t        |«      }t        |«      D ]ô  \  }}	|j                  d|	d   f«       |j!                  «       r|dz  }Œ2t        |	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   xs |	d   |
d   |
d   ||
d   |
d   f	«       |dz  }|dz  dk(  sŒÕ|j)                  «        t	        d||fz  «       Œö |j)                  «        |j+                  «        t	        d |||fz  «       y )!Nr   r   z[Page %d/%d] %sé<   z  Found %d itemsr   é   z
Total unique items: %dz
=== Detail: %s ===r!   é(   z  Title: %sz
  Date: %sr"   z  Content (%d chars): %sr8   éÈ   z  Attachments: %dr9   )r   zPRAGMA busy_timeout=30000z)SELECT id FROM gov_raw WHERE page_url = ?F)Úensure_asciir4   z§INSERT INTO gov_raw (title, content, summary, publish_date, page_url, site_name, attachments, group_name, source_url)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)r7   r:   r&   r   z  Progress: %d/%d inserted...z-
Done. Inserted: %d, Existing: %d (total: %d))Úsqlite3ÚsetÚranger   Úprintr   r2   r@   Úaddr*   rO   Úconnectr   ÚexecuteÚcursorÚ	enumerateÚfetchoneÚjsonÚdumpsrA   ÚcommitÚclose)Ú	test_modeÚ	max_pagesrV   Ú	all_itemsÚ	seen_urlsr
   r   r+   r,   ÚitemÚresultÚconnÚcÚinsertedÚexistingÚtotalÚidxÚattachments_jsons                     r   Úcrawlrq      s9  € ÛØ€IÜ“€Iä�a˜ Q™Ó'ò ˆÜ˜4Ó ˆÜÐ 4¨°C¸¸°HÐ"=Ñ=Ô>Ü˜#‹ˆÜ" 4¨Ó.ˆÜÐ ¤3 u£:Ñ-Ô.Øò 	'ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Õ&ð	'ò œ˜Y›¨1Ó,Ùðô 
Ð
$¤s¨9£~Ñ
5Ô6áØ˜b˜q�Mò 	DˆDÜÐ(¨4°©=¸¸"Ð+=Ñ=Ô>Ü˜d 5™kÓ*ˆDÜ$ T¨4°©;Ó7ˆFÜ�- &¨¡/Ñ1Ô2Ü�, ¨¡Ñ/Ô0ÜÐ,´°F¸9Ñ4EÓ0FÈÈyÑHYÐZ^Ð[^ÐH_Ð/`Ñ`ÔaÜÐ%¬¨F°=Ñ,AÓ(BÑBÕCð	Dð 	à�?‰?œ7¨Bˆ?Ó/€DØ‡L�LÐ,Ô-Ø�‰‹€Aà€HØ€HÜ�	‹N€Eä˜yÓ)ò G‰	ˆˆTØ	�	‰	Ð=ÀÀUÁ¸~ÔNØ�:‰:Œ<Ø˜‰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‘Ò. $ v¡,Ø�u‘Ø�{Ñ#Ø Ø�w‘Ø�u‘ð
ô	
ð 	�A‰ˆØ�b‰=˜AÓØ�K‰KŒMÜÐ1°X¸uÐ4EÑEÕFð9Gð< 	‡K�K„MØ‡J�J„LÜ	Ð
:¸hÈÐRWÐ=XÑ
XÕYr   Ú__main__z--testT)rd   z--listzPage 1: %d itemsz  r!   rS   z | r"   r   é2   )rd   re   )r   )Ú__doc__r#   ÚsysÚosr`   Útimer   Úenvironr   r   r   rA   rB   ÚPER_PAGEÚ	MAX_PAGESr	   r   r   r2   rO   rq   Ú__name__Úargvr+   r,   rY   r@   rh   © r   r   ú<module>r~      s%  ðñ÷ )× (× (à
�*‰*�.‰.˜Ð$5Ó
6€ð DØZØ0ñ€ð
 @€	Ø€Ø€Ø€	à5€ò,òóò,BðJ  Yó GZðT ˆzÒØ�3—8‘8ÑÙ˜ÖØ	�S—X‘XÑ	Ù™, q›/Ó*ˆÙ" 4Ó(ˆÙÐ ¡3 u£:Ñ-Ô.Ø˜"˜1�Iò 	[ˆDÚ d¨7¡m°C°RÒ&8¸$¸v»,ÈÈUÉÐTWÐUWÑHXÐYÕZñ	[ñ 	˜¨Ö3ð r   