Ë
    ¸¬uj…  ã                   ó  — d dl 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d dlm	Z	  e j                  dd«      ZdZdZ ej                  «        ed¬	«      z
  j                  d
«      ZddiZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)ÚdatetimeÚ	timedelta)Úsync_playwrightÚ	SEARCH_DBz/root/search.dbu   èŒŒå¹³åŒº-é€šçŸ¥å…¬ç¤ºz+http://www.chiping.gov.cn/channel_x_0_5747/iG  )Údaysz%Y-%m-%dú
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                  ó¤  — g } t        «       }t        «       5 }|j                  j                  ddg¬«      }|j	                  t
        d   ¬«      }|j                  «       }|j                  t        dd¬«       	 |j                  d	«      }|D ]Ô  }|j                  d
«      }|j                  d«      }	|sŒ(|j                  d«      }
|
sŒ<|
|vsŒA|j                  |
«       |
j                  d«      r|
nd|
› �}|j                  d«      xs |j                  «       j                  «       }|	r|	j                  «       j                  «       nd}| j!                  |dd ||dœ«       ŒÖ | r| d   d   t"        k  rn7|j                  d«      }|sn#|j%                  «        |j'                  d«       �Œ3|j)                  «        ddd«       | S # 1 sw Y   | S xY w)z?Open page in Playwright, click through ALL pages, collect itemsTz--disable-dev-shm-usage)ÚheadlessÚargsr   )Ú
user_agentÚnetworkidlei0u  )Ú
wait_untilÚtimeoutzdiv.list liÚaz.timeÚhrefÚhttpzhttp://www.chiping.gov.cnÚtitleÚ NéÈ   )r   ÚurlÚdateéÿÿÿÿr   z)a.layui-laypage-next:not(.layui-disabled)i   )Úsetr   ÚchromiumÚlaunchÚnew_contextÚHEADERSÚnew_pageÚgotoÚBASE_URLÚquery_selector_allÚquery_selectorÚget_attributeÚaddÚ
startswithÚ
inner_textÚstripÚappendÚCUTOFFÚclickÚwait_for_timeoutÚclose)Ú	all_itemsÚ	extractedÚpÚbrowserÚcontextÚpageÚlisÚlir   Útime_elr   Úfull_urlr   r   Únext_btns                  ú"/root/gov_crawler/crawl_chiping.pyÚget_all_items_from_playwrightr9      sÈ  € à€IÜ“€Iä	Ó	ð  ˜aØ—*‘*×#Ñ#¨TÐ9RÐ8SÐ#ÓTˆØ×%Ñ%´¸Ñ1FÐ%ÓGˆØ×ÑÓ!ˆØ�	‰	”( }¸eˆ	ÔDàà×)Ñ)¨-Ó8ˆCØò 
`�Ø×%Ñ% cÓ*�Ø×+Ñ+¨GÓ4�ÚØŸ/™/¨&Ó1�CÚ˜s¨)Ò3Ø!Ÿ™ cÔ*Ø*-¯.©.¸Ô*@¡3ÐHaÐbeÐafÐFg˜Ø !§¡°Ó 8Ò R¸A¿L¹L»N×<PÑ<PÓ<R˜Ù?F˜w×1Ñ1Ó3×9Ñ9Ô;ÈB˜Ø!×(Ñ(°5¸¸#°;ÀxÐY]Ñ)^Õ_ð
`ñ ˜Y r™]¨6Ñ2´VÒ;Øð ×*Ñ*Ð+VÓWˆHÙØØ�N‰NÔØ×!Ñ! #Ô&ñ1 ð4 	�‰Œ÷A ðD Ð÷E ðD Ðús   —BGÂ3GÃGÃC/GÇGc                 ó  — 	 t        j                  | t        d¬«      }d|_        |j                  }d}t        j                  d|t
        j                  «      }|r#|j                  d«      j                  «       d d }n`t        j                  d|t
        j                  «      }|r9|j                  d«      j                  «       d d }t        j                  d	d|«      }d}d
D ]×  }t        j                  ||t
        j                  «      }|sŒ+t        j                  dd|j                  d«      t
        j                  t
        j                  z  ¬«      }	t        j                  dd|	t
        j                  t
        j                  z  ¬«      }	t        |	j                  «       «      dkD  sŒÇ|	j                  «       } n d}
dD ]=  }t        j                  ||«      }|sŒ|j                  d«      j                  dd«      }
 n ||
|fS #  Y yxY w)Né   )Úheadersr   zutf-8r   z)<meta name="ArticleTitle" content="(.*?)"é   r   z<title>(.*?)</title>z^.*? - [^\-]+? - )z3<div class="content-text"[^>]*>(.*?)</div>\s*</div>z.<div class="content"[^>]*>(.*?)</div>\s*</div>z-<div class="detail"[^>]*>(.*?)</div>\s*</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>é2   )u:   å�‘å¸ƒæ—¥[æœŸæœŸ]\s*[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})z(\d{4}[-/]\d{1,2}[-/]\d{1,2})ú/ú-)r   r   r   )ÚrequestsÚgetr   ÚencodingÚtextÚreÚsearchÚDOTALLÚgroupr'   ÚsubÚIÚlenÚreplace)r   ÚrÚhtmlr   ÚarÚtÚcontentÚpatÚmÚcr   s              r8   Úfetch_detailrV   8   s¬  € ð#Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆàˆÜ�Y‰YÐCÀTÌ2Ï9É9ÓUˆÙØ—H‘H˜Q“K×%Ñ%Ó'¨¨Ð-‰Eä—	‘	Ð1°4¼¿¹ÓCˆAÙØŸ™ ›
×(Ñ(Ó*¨4¨CÐ0�ÜŸ™Ð3°R¸Ó?�Øˆð
ò 	ˆCô
 —	‘	˜#˜t¤R§Y¡YÓ/ˆAÚÜ—F‘FÐ7¸¸Q¿W¹WÀQ»ZÌrÏyÉyÔY[×Y]ÑY]É~Ô^�Ü—F‘FÐ5°r¸1ÄBÇIÁIÌbÏdÉdÁNÔS�Ü�q—w‘w“y“> BÓ&ØŸg™g›i�GÙð	ð ˆØtò 	ˆCÜ—	‘	˜#˜tÓ$ˆAÚØ—w‘w˜q“z×)Ñ)¨#¨sÓ3�Ùð		ð
 �d˜GÐ#Ð#øðÙús   ‚D	H ÄBH Æ(2H Ç(H ÈHc                 ó˜  — t        j                  t        «      }|j                  d«       |j	                  «       }|j                  d«       d}t        | «      D ]Î  \  }}|j                  d|d   f«       |j                  «       rŒ-t        |d   «      \  }}}|xs |d   }|xs |d   }|r|j                  «       sd}|j                  d	|||d d
 |d   t        |df«       |j                  dkD  r|dz  }|dz   dz  dk(  sŒ¨|j                  «        t        d|› d|dz   › d�d¬«       ŒÐ |j                  «        |j                  «        |S )NzPRAGMA journal_mode=WALzáCREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT, content TEXT, summary TEXT,
        source_url TEXT UNIQUE, site_name TEXT,
        publish_date TEXT, category TEXT
    )r   z*SELECT 1 FROM gov_raw WHERE source_url = ?r   r   r   u   <p>æ— æ³•èŽ·å�–æ­£æ–‡</p>z—INSERT OR REPLACE INTO gov_raw 
            (title, content, summary, source_url, site_name, publish_date, category)
            VALUES (?,?,?,?,?,?,?)r   r   r=   é   z  Saved r@   z	 items...T©Úflush)Úsqlite3Úconnectr   ÚexecuteÚcursorÚ	enumerateÚfetchonerV   r'   Ú	SITE_NAMEÚrowcountÚcommitÚprintr,   )	ÚitemsÚconnrU   Ú	new_countÚiÚitemr   r   rR   s	            r8   Ú
save_to_dbrj   ^   sT  € Ü�?‰?œ9Ó%€DØ‡L�LÐ*Ô+Ø�‰‹€AØ‡I�Ið 	ô 
ð €IÜ˜UÓ#ò E‰ˆˆ4Ø	�	‰	Ð>ÀÀeÁÀÔOØ�:‰:Œ<Øä+¨D°©KÓ8Ñˆˆt�WØÒ&˜˜g™ˆØÒ#�t˜F‘|ˆÙ˜gŸm™mœoØ1ˆGð 	
�	‰	ð &ð �G˜U 4 C˜[¨$¨u©+´yÀ$ÈÐKô	Mð �:‰:˜Š>Ø˜‰NˆIà�‰E�R‰<˜1ÓØ�K‰KŒMÜ�H˜Y˜K q¨¨1©¨¨YÐ7¸tÖDð+Eð. 	‡K�K„MØ‡J�J„LØÐó    c                  ó<  — t        j                  t        «      } | j                  «       }	 |j	                  d«       | j                  «        t        d|j                  › d�d¬«       | j                  «        y # t        $ r}t        d|› �d¬«       Y d }~Œ/d }~ww xY w)NzãINSERT OR REPLACE INTO gov_search (rowid, title, site_name, summary)
            SELECT r.id, r.title, r.site_name, r.summary
            FROM gov_raw r LEFT JOIN gov_search s ON r.id = s.rowid
            WHERE s.rowid IS NULLz  FTS: z	 new rowsTrY   z  FTS error: )
r[   r\   r   r^   r]   rc   rd   rb   Ú	Exceptionr,   )rf   rU   Úes      r8   Ú
update_ftsro   …   s„   € Ü�?‰?œ9Ó%€DØ�‰‹€Að/Ø	�	‰	ð %ô 	&ð 	�‰ŒÜ�˜Ÿ
™
�| 9Ð-°TÕ:ð 	‡J�J…Løô ò /Ü�˜a˜SÐ!¨×.Ò.ûð/ús   «<A8 Á8	BÂBÂBc                  óh  — t        dt        › �d¬«       t        dd¬«       t        «       } | D �cg c]  }|d   t        k\  sŒ|‘Œ } }t        dt	        | «      › d�d¬«       t        dd¬«       t        | «      }t        d	|› �d¬«       t        d
d¬«       t        «        t        dd¬«       y c c}w )Nz
Starting: TrY   zPhase 1: Crawling list pages...r   z  Collected z items (within 3 years)zPhase 2: Fetching details...z  New items saved: zPhase 3: Updating FTS...zDone!)rd   ra   r9   r)   rL   rj   ro   )re   rh   Únews      r8   Úmainrr   “   s¨   € Ü	ˆJ”y�kÐ
"¨$Õ/ô 
Ð
+°4Õ8Ü)Ó+€EØÖ5�1  6¡¬fÓ!4ŠQÐ5€EÐ5Ü	ˆLœ˜U›˜Ð$;Ð
<ÀDÕIô 
Ð
(°Õ5Ü
�UÓ
€CÜ	Ð ˜uÐ
%¨TÕ2ô 
Ð
$¨DÕ1Ü„Lä	ˆ'˜Öùò 6s   °B/ÁB/Ú__main__)ÚosÚsysrF   ÚjsonrB   r   r   r[   Úplaywright.sync_apir   Úgetenvr   ra   r    ÚnowÚstrftimer)   r   r9   rV   rj   ro   rr   Ú__name__© rk   r8   ú<module>r}      s—   ðã 	Ø Pß "× "Ó "ß (Û Ý /àˆB�I‰I�kÐ#4Ó5€	Ø$€	Ø8€Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€ØÐWÐ
X€ò'òR$òL%òNòð( ˆzÒÙ…Fð rk   