Ë
    ¸¬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Zd	Zd
ZddiZdad„ Zefd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)u‚  
crawl_xiangfuqu_hjbh.py - å¼€å°�ç¥¥ç¬¦åŒº-çŽ¯å¢ƒä¿�æŠ¤
CMS: UCAP (JSæ¸²æŸ“), éœ€Playwrightæ¸²æŸ“åˆ—è¡¨
åˆ—è¡¨: /kfsxfqwz/c00511/pc/list.html (JSæ¸²æŸ“, 15æ�¡/é¡µ, 4é¡µå…±56æ�¡)
      Playwrightç‚¹å‡»ç¿»é¡µ: a.num[2], a.num[3]
è¯¦æƒ…: /kfsxfqwz/c00511/pc/content/content_{id}.html (å�¯ç›´æŽ¥HTTPè®¿é—®)
æ ‡é¢˜: <meta ArticleTitle>
æ—¥æœŸ: <meta PubDate>
æ­£æ–‡: div.article-content > p
é    N)ÚBeautifulSoup)Úsync_playwrightz/root/search.dbzhttps://www.xiangfuqu.gov.cnu   ç¥¥ç¬¦åŒº-çŽ¯å¢ƒä¿�æŠ¤u   æ²³å�—õ   çŽ¯å¢ƒå…¬ç¤ºé   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 ó  — t         €7t        j                  «       a t         j                  j	                  t
        «       	 t         j                  | d¬«      }d|_        |j                  S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né<   ©Útimeoutzutf-8zERR:)ÚSESSIONÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚencodingÚtextÚ	ExceptionÚprint)ÚurlÚrÚes      ú)/root/gov_crawler/crawl_xiangfuqu_hjbh.pyr   r   $   so   € ä€Ü×"Ñ"Ó$ˆÜ�‰×ÑœwÔ'ðÜ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆøÜò Ü��Q�CˆjÔÜûðús   ¿)A) Á)	B
Á2BÂB
c           
      ó€  — g }t        «       5 }|j                  j                  d¬«      }|j                  «       }|j	                  t
        › d�dd¬«       t        d| dz   «      D ]›  }|dkD  r)	 |j                  d|› d	�d
¬«       |j                  d«       |j                  dd«      }t        d|› dt        |«      › d�d¬«       |D ]7  }|d   j                  t
        › d�«      sŒ|j                  |d   |d   f«       Œ9 Œ� |j                  «        ddd«       |S #  t        d|› d�«       Y  Œ.xY w# 1 sw Y   |S xY w)z?Use Playwright to render JS list and get all items across pagesT)Úheadlessz/kfsxfqwz/c00511/pc/list.htmlÚnetworkidlei0u  )Ú
wait_untilr
   é   za.num:text("z")iˆ  r	   iÐ  u     æ— æ³•ç¿»åˆ°ç¬¬u   é¡µï¼Œå�œæ­¢za[href*="content_"]zEels => els.map(el => ({title: el.textContent.trim(), href: el.href}))u     ç¬¬u   é¡µ: õ   æ�¡©ÚflushÚhrefz/kfsxfqwz/c00511/pc/content/ÚtitleN)r   ÚchromiumÚlaunchÚnew_pageÚgotoÚBASE_URLÚrangeÚclickÚwait_for_timeoutr   Úeval_on_selector_allÚlenÚ
startswithÚappendÚclose)Ú	max_pagesÚ	all_itemsÚpwÚbrowserÚpageÚpgÚitemsÚitems           r   Úfetch_all_list_itemsr9   2   si  € à€IÜ	Ó	ð ˜bØ—+‘+×$Ñ$¨dÐ$Ó3ˆØ×ÑÓ!ˆØ�	‰	”X�JÐ;Ð<Ø*°Eð 	ô 	;ô ˜˜9 q™=Ó)ò 	DˆBØ�AŠvðØ—J‘J ¨b¨T°Ð4¸d�JÔCØ×)Ñ)¨$Ô/ð ×-Ñ-Ø%ØWóˆEô �E˜"˜˜U¤3 u£: ,¨cÐ2¸$Õ?Øò D�Ø˜‘<×*Ñ*¬h¨ZÐ7SÐ+TÕUØ×$Ñ$ d¨6¡l°D¸±MÐ%BÕCñDð!	Dð( 	�‰Œ÷5ð6 ÐøðÜÐ-¨b¨T°Ð>Ô?Úú÷ð6 Ðús+   �AD3Á-(DÂAD3Ã%-D3ÄD0Ä-D3Ä3D=c                 óò  — t        | d«      }d}|j                  dddi«      }|r |j                  dd«      j                  «       }d}|j                  dddi«      }|r;|j                  dd«      }t	        j
                  d|«      }|r|j                  d	«      }d}|j                  d
d¬«      }	|	r¢g }
|	j                  d«      D ](  }|j                  d¬«      }|sŒ|
j                  |«       Œ* |	j                  d«      D ]  }|
j                  t        |«      «       Œ |
rdj                  |
«      }n |	j                  d¬«      j                  «       }|rt	        j                  dd|«      }|r|d d nd}||||fS )Nzhtml.parserÚ ÚmetaÚnameÚArticleTitleÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})r   Údivzarticle-content)Úclass_ÚpT)ÚstripÚtablez

ú
)Ú	separatorz&nbsp;éÈ   )r   Úfindr   rD   ÚreÚsearchÚgroupÚfind_allÚget_textr/   ÚstrÚjoinÚsub)Úhtmlr   Úsoupr#   Ú
meta_titleÚdate_strÚpubdate_metar?   ÚmÚacÚpartsrC   ÚtxtÚtblÚsummarys                  r   Úextract_detailr]   S   sx  € Ü˜˜}Ó-€Dð €EØ—‘˜6 F¨NÐ#;Ó<€JÙØ—‘˜y¨"Ó-×3Ñ3Ó5ˆð €HØ—9‘9˜V f¨iÐ%8Ó9€LÙØ×"Ñ" 9¨bÓ1ˆÜ�I‰IÐ,¨gÓ6ˆÙØ—w‘w˜q“zˆHð €GØ	�‰�5Ð!2ˆÓ	3€BÙ	ØˆØ—‘˜SÓ!ò 	"ˆAØ—*‘* 4�*Ó(ˆCÚØ—‘˜SÕ!ð	"ð —;‘;˜wÓ'ò 	#ˆCØ�L‰Lœ˜S›Õ"ð	#áØ—k‘k %Ó(‰Gà—k‘k¨D�kÓ1×7Ñ7Ó9ˆGáÜ—&‘&˜ B¨Ó0ˆá&ˆg�d�s‰m¨B€GØ�(˜G WÐ,Ð,ó    c                 óø  — dd l }|j                  t        d¬«      }|j                  «       }d}g }| D ]†  \  }}}}	}
	 |j	                  d|
f«       |j                  «       rŒ.|j	                  d|
|t        |||	|
dt        t        df«       |j                  }|r|j                  ||t        |	xs df«       |d	z  }Œˆ |j                  «        |rK|D ]  \  }}}}		 |j	                  d||||	f«       Œ  |j                  «        t        dt        |«      › d�«       |j                  «        |S # t        $ r}t        d
|d d › d|› �«       Y d }~�Œd }~ww xY w# t        $ r}t        d|› d|› �«       Y d }~Œ¥d }~ww xY w)Nr   é
   r	   z)SELECT id FROM gov_raw WHERE page_url = ?zíINSERT INTO gov_raw 
                   (page_url, title, site_name, publish_date, content, summary,
                    source_url, category, industry, group_name, script_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   zcrawl_xiangfuqu_hjbh.pyr;   r   z  [DB ERROR] é   z: zVINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)z  [FTS ERROR] id=u     FTSå�Œæ­¥: r   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚfetchoneÚ	SITE_NAMEÚINDUSTRYÚGROUPÚ	lastrowidr/   r   r   Úcommitr-   r0   )Ú
items_datarb   ÚconnÚcÚinsertedÚ	fts_batchr#   rU   r?   r\   Úpage_urlÚnew_idr   ÚridÚsites                  r   Ú
save_to_dbrv   |   s›  € ÛØ�?‰?œ7¨Bˆ?Ó/€DØ�‰‹€AØ€HØ€IØ7Aò 5Ñ3ˆˆx˜ '¨8ð	5Ø�I‰IÐAÀHÀ;ÔOØ�z‰zŒ|ØØ�I‰Ið?ð ˜5¤)¨X°wÀØ˜>¬8´UÐ<UðWôð —[‘[ˆFÙØ× Ñ  &¨%´¸GºMÀrÐ!JÔKØ˜‰M‰Hð!5ð& 	‡K�K„MÙØ)2ò 	6Ñ%ˆC�˜˜gð6Ø—	‘	ØlØ˜%  wÐ/õð	6ð 	�‰ŒÜ�œc )›nÐ-¨SÐ1Ô2Ø‡J�J„LØ€Oøô ò 	5Ü�M %¨¨ * ¨R°¨sÐ3×4Ò4ûð	5ûô ò 6ÜÐ)¨#¨¨b°°Ð4×5Ñ5ûð6ús6   ¼#D*Á AD*ÃEÄ*	EÄ3EÅEÅ	E9ÅE4Å4E9c                  ó  — dd l } | j                  t        › d�¬«      }|j                  dt        dd¬«       |j                  dd	d
¬«       |j                  «       }|j                  rt        n|j                  }t        dt        j                  d«      › d�d¬«       t        |«      }|st        d«       y t        dt        |«      › d�«       d}g }|D ]W  \  }}t        |«      }	|	sŒt        |	|«      \  }
}}}|j!                  |
xs ||xs d|||f«       t        j"                  d«       ŒY t%        |«      }||z  }t        d|› dt        |«      › d�«       t        d«       t        d|› d�«       t        dt        › �«       y )Nr   u   çˆ¬è™«)Údescriptionz--pagesr   u   çˆ¬å�–é¡µæ•°(å…±4é¡µ))ÚtypeÚdefaultÚhelpz--fullÚ
store_trueu   å…¨é‡�çˆ¬å�–(4é¡µ))Úactionr{   ú[z%H:%M:%Su   ] Playwrightæ¸²æŸ“åˆ—è¡¨...Tr    u	   æ— æ•°æ�®u   
å…±èŽ·å�– u
    æ�¡é“¾æŽ¥r;   g333333Ó?u   å…¥åº“ú/r   u   
===== å®Œæˆ� =====u   æ–°å¢žå…¥åº“: u    æ�¡u   ç«™ç‚¹: )ÚargparseÚArgumentParserrh   Úadd_argumentÚintÚ
parse_argsÚfullÚ	MAX_PAGESÚpagesr   ÚtimeÚstrftimer9   r-   r   r]   r/   Úsleeprv   )r€   ÚparserÚargsr1   r2   Ú	total_newÚbatchr"   r#   Údetail_htmlÚdtÚddr?   r\   Úsaveds                  r   Úmainr“   ¥   s}  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°QÐ=TÐÔUØ
×Ñ˜¨Ð<PÐÔQØ×ÑÓ€Dà!ŸYšY•	¨D¯J©J€IÜ	ˆAŒd�m‰m˜JÓ'Ð(Ð(CÐ
DÈDÕQÜ$ YÓ/€IÙÜˆkÔØä	ˆLœ˜Y›Ð(¨
Ð
3Ô4Ø€IØ€Eà ò ‰ˆˆeÜ˜$“iˆÙØÜ#1°+¸tÓ#DÑ ˆˆB�˜Ø�‰�b’k˜E 2¢8¨¨W°g¸tÐDÔEÜ�
‰
�3�ðô �uÓ€EØ�Ñ€IÜ	ˆF�5�'˜œ3˜u›:˜, cÐ
*Ô+ä	Ð Ô"Ü	ˆN˜9˜+ TÐ
*Ô+Ü	ˆH”Y�KÐ
 Õ!r^   Ú__main__)Ú__doc__r   rJ   ÚsysÚosrˆ   Úbs4r   Úplaywright.sync_apir   rd   r(   rh   rj   ri   r†   r   r   r   r9   r]   rv   r“   Ú__name__© r^   r   ú<module>rœ      s‹   ðñ	ó Û 	Û 
Û 	Û Ý Ý /à
€Ø)€Ø$€	Ø€Ø€Ø€	ð ÐPð€ð €òð $-ó òB&-òR&òR "ðF ˆzÒÙ…Fð r^   