Ë
    `dj¾!  ã                   ó  — 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ddlmZ ddl	Z	dZ
dZdZdZdZd	Z e	j                   «       Zej$                  j'                  d
di«       d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u™   
crawl_fengjie.py â€” å¥‰èŠ‚ç½‘-è¦�é—»
http://www.xfjw.net/newspage/news-list/?name=è¦�é—»&columnId=30013
CMS: Nuxt.js SSR + Playwright detail rendering
é    N)ÚBeautifulSoupu   å¥‰èŠ‚ç½‘-è¦�é—»zhttp://www.xfjw.netz/newspage/news-list/Ú30013z/mnt/data/search.dbu   é‡�åº†z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 óª   — dt         ddœ}| dkD  rt        | «      |d<   t        j                  t        › t
        › �|d¬«      }d|_        |j                  S )	Nu   è¦�é—»Ú1)ÚnameÚcolumnIdÚ
currentNavé   Úpageé   )ÚparamsÚtimeoutzutf-8)Ú	COLUMN_IDÚstrÚsessionÚgetÚBASEÚ	LIST_PATHÚencodingÚtext)r   r   Úrs      ú"/root/gov_crawler/crawl_fengjie.pyÚ
fetch_listr      sO   € Ø¬IÀSÑI€FØˆa‚xÜ˜T›ˆˆv‰Ü�‰”t�fœY˜KÐ(°ÀˆÓD€AØ€A„JØ�6‰6€Mó    c                 óÆ  — t        | d«      }g }|j                  dd¬«      }|st        dt        j                  ¬«       |S |j                  dt        j                  d«      ¬	«      }t        d
t        |«      › �t        j                  ¬«       t        «       }|D ]Ä  }|j                  dd«      j                  «       }|r||v rŒ*d|vrŒ/|j                  |«       |j                  d¬«      }t        j                  d|«      }	|	r|	j                  d«      nd}
|	r!|d|	j!                  «        j                  «       n|}|j#                  ||j                  «       |
dœ«       ŒÆ |S )zExtract articles from SSR HTMLúhtml.parserÚdivÚnewsitem©Úclass_z   [ERROR] No newsitem div found!)ÚfileÚaÚinfoClassifyId)Úhrefz  [Debug] Links found: r$   Ú T©Ústripz(\d{4}-\d{2}-\d{2})$r
   N)ÚurlÚtitleÚpub_date)r   ÚfindÚprintÚsysÚstderrÚfind_allÚreÚcompileÚlenÚsetr   r'   ÚaddÚget_textÚsearchÚgroupÚstartÚappend)ÚhtmlÚsoupÚitemsr   Ú	all_linksÚ	seen_urlsr"   r$   r   Úmr*   r)   s               r   Ú
parse_listr@   %   sE  € ä˜˜}Ó-€DØ€Eð �y‰y˜ zˆyÓ2€HÙÜÐ0´s·z±zÕBØˆð ×!Ñ! #¬B¯J©JÐ7HÓ,IÐ!ÓJ€IÜ	Ð#¤C¨	£NÐ#3Ð
4¼3¿:¹:ÕFä“€IØò ˆØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙ�t˜yÑ(ØØ 4Ñ'ØØ�‰�dÔà�z‰z ˆzÓ%ˆä�I‰IÐ-¨tÓ4ˆÙ!"�1—7‘7˜1”:¨ˆÙ,-��Z�a—g‘g“iÐ ×&Ñ&Ô(°4ˆà�‰ØØ—[‘[“]Ø ñ
õ 	ðð( €Lr   c                 óè   — t        | d«      }|j                  d¬«      }g }|D ]?  }|j                  d¬«      }|j                  «       sŒ&|j	                  t        |«      «       ŒA |rt        |«      S dS )Nr   zivu-page-itemr   Tr&   r
   )r   r/   r5   Úisdigitr9   ÚintÚmax)r:   r;   Ú
page_itemsÚnumsÚelÚts         r   Úget_total_pagesrI   K   sn   € Ü˜˜}Ó-€DØ—‘ o�Ó6€JØ€DØò  ˆØ�K‰K˜dˆKÓ#ˆØ�9‰9�;Ø�K‰Kœ˜A›Õð ñ Œ3ˆt‹9Ð# !Ð#r   c                 ó"  — ddl m}  |«       5 }|j                  j                  dddg¬«      }|j	                  «       }|j                  d«       	 |j                  | dd	¬
«       |j                  «       }t        j                  d|j                  d«      «      }|r|j                  d«      nd}d}dD ]8  }		 |j                  |	«      }
|
r"|
j                  «       }t        |«      dkD  r|} nŒ: |sb|j                  dd«      }t        j                   dd|t        j"                  ¬«      }t        j                   dd|t        j"                  ¬«      }|}|rt        j                   dd|«      dd nd}||r|j%                  d«      d   nd||dœ|j'                  «        cddd«       S #  Y Œ÷xY w# t(        $ r8}t+        d|› �«       dddddœcY d}~|j'                  «        cddd«       S d}~ww xY w# |j'                  «        w xY w# 1 sw Y   yxY w)z8Use Playwright to render detail page and extract contentr   )Úsync_playwrightTz--no-sandboxz--disable-gpu)ÚheadlessÚargsi˜:  Únetworkidlei N  )Ú
wait_untilr   z&(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})Úbodyr
   r%   )z[class*=content] > divz.detail-contentÚarticlez[class*=detail]z.news-contentz#contentéÈ   zel => el.innerHTMLz<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>Nú )r)   r*   ÚcontentÚsummaryz  PW Error: )Úplaywright.sync_apirK   ÚchromiumÚlaunchÚnew_pageÚset_default_timeoutÚgotor)   r0   r6   Ú
inner_textr7   Úquery_selectorÚ
inner_htmlr2   Úeval_on_selectorÚsubÚDOTALLÚsplitÚcloseÚ	Exceptionr,   )r(   rK   ÚpÚbrowserr   r)   r?   r*   rU   ÚselrG   ÚtxtrP   rV   Úes                  r   Úparse_detail_playwrightrk   U   sý  € å3á	Ó	ð 1˜aØ—*‘*×#Ñ#¨T¸ÈÐ8YÐ#ÓZˆØ×ÑÓ!ˆØ× Ñ  Ô'ð,	Ø�I‰I�c m¸UˆIÔCð —J‘J“LˆEô —	‘	ÐCÀTÇ_Á_ÐU[ÓE\Ó]ˆAÙ%&�q—w‘w˜q”z¨BˆHð ˆGðHò 
�ðØ×,Ñ,¨SÓ1�BÙØ Ÿm™m›o˜Ü˜s›8 cš>Ø&)˜GÙ!øð
ñ à×,Ñ,¨VÐ5IÓJ�ä—v‘vÐ:¸BÀÌBÏIÉIÔV�Ü—v‘vÐ8¸"¸dÌ"Ï)É)ÔT�Ø�á?F”b—f‘f˜Z¨¨WÓ5°d°sÑ;ÈBˆGð Ù6>˜HŸN™N¨3Ó/°Ò2ÀBØ"Ø"ñ	ð �M‰MŒO÷c1ñ 1øð4Ùûô$ ò 	OÜ�L  Ð$Ô%Ø¨R¸BÈ2ÑNÔNà�M‰MŒO÷c1ñ 1ûðZ	Oûð �M‰M�Oú÷c1ð 1úsh   ŽAHÁA%F,Â63F%Ã)B"F,ÆHÆ%F)Æ'F,Æ,	G-Æ5G(Ç	G-Ç
G0ÇHÇ(G-Ç-G0Ç0HÈHÈHc                 óŠ  — g }| D ]ï  }|d   j                  dd«      }t        j                  dd«      }|j                  d«      xs dj                  dd«      }|j                  d«      xs dj                  dd«      }|j                  d«      xs dj                  dd«      }|j                  d«      xs dj                  dd«      }	d	}
d
|› d|› d|› d|› d|› d|› d|	› d|
› d�}|j                  |«       Œñ ddj	                  |«      z   dz   }t        j                  dt        g|ddd¬«      }t        |«      |j                  fS )Nr)   ú'ú''r(   r%   r*   rV   rU   ÚfengjiezƒINSERT OR IGNORE INTO gov_raw(site_name, source_url, page_url, title, publish_date, summary, content, status, script_name) VALUES('z','z','active','z');
zBEGIN;
zCOMMIT;
Úsqlite3Té<   ©ÚinputÚcapture_outputr   r   )
ÚreplaceÚ	SITE_NAMEr   r9   ÚjoinÚ
subprocessÚrunÚ	SEARCH_DBr2   r.   )r<   Úbatch_labelÚ	sql_partsÚitemrH   ÚsiteÚpuÚpdÚsÚcÚsnÚsqlÚfull_sqlr   s                 r   Úpush_to_searchdbr†   Œ   s_  € Ø€IØò ˆØ�‰M×!Ñ! # tÓ,ˆÜ× Ñ   dÓ+ˆØ�h‰h�u‹oÒ# ×,Ñ,¨S°$Ó7ˆØ�h‰h�zÓ"Ò( b×1Ñ1°#°tÓ<ˆØ�X‰X�iÓ Ò& B×/Ñ/°°TÓ:ˆØ�X‰X�iÓ Ò& B×/Ñ/°°TÓ:ˆØˆðà�f˜C ˜t 3 r d¨#¨a¨S°°B°4°s¸1¸#¸SÀÀÀ<ÐPRÈtÐSXðZð 	ð
 	×Ñ˜Õðð  ˜BŸG™G IÓ.Ñ.°Ñ<€HÜ�‰˜	¤9Ð-°XÈdÐY]ÐgiÔj€AÜˆy‹>˜1Ÿ8™8Ð#Ð#r   c                 ó‚   — | D ]:  }|j                  dd«      }d|› d�}t        j                  dt        g|ddd¬«       Œ< y )	Nrm   rn   zˆINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) SELECT rowid, title, site_name, summary FROM gov_raw WHERE page_url='z3' AND rowid NOT IN (SELECT rowid FROM gov_search);
rp   Tr   rr   )ru   rx   ry   rz   )ÚurlsÚuÚuer„   s       r   Úsync_ftsr‹   ¢   sX   € Øò fˆØ�Y‰Y�s˜DÓ!ˆðà!˜dÐ"VðXð 	ô
 	�‰˜	¤9Ð-°SÈÐTXÐbdÖeñfr   c                  ó²  — d} dt         j                  v r]t         j                  j                  d«      }|dz   t        t         j                  «      k  rt	        t         j                  |dz      «      } dt         j                  v }dt         j                  v }t        dt        › �«       t        d«      }t        |«      }t        d|› �«       | r| |k  r| }g }t        d|dz   «      D ]j  }t        d|› d	|› d
�dd¬«       t        |«      }t        |«      }|j                  |«       t        t        |«      › d�«       t        j                  d«       Œl t        dt        |«      › d�«       |r­t        j                  dt         gdt        › d�ddd¬«      }	|	j"                  j%                  «       r2t'        |	j"                  j%                  «       j)                  d«      «      n	t'        «       }
|D �cg c]  }|d   |
vsŒ|‘Œ }}t        dt        |«      › d�«       |r.t        d«       t+        |t        «      \  }}t        d|› d�«       y d}g }t-        |«      D ]ñ  \  }}t        d|dz   › d	t        |«      › d|d   d d › d
�dd¬«       	 t/        |d   «      }|d    xs |d    |d <   |d!   |d!<   |d"   d d# |d"<   |j1                  |«       t        d$t        |j3                  d!d%«      «      › d&�«       t        |«      d(k\  sŒ©t+        |t        «      \  }}||z  }t7        |D �cg c]  }|d   ‘Œ	 c}«       |rt        d)|d d* › �«       g }Œó |rGt+        |t        «      \  }}||z  }t7        |D �cg c]  }|d   ‘Œ	 c}«       |rt        d)|d d* › �«       t        d+|› d�«       y c c}w # t4        $ r}t        d'|› �«       Y d }~ŒÔd }~ww xY wc c}w c c}w ),Né   z--pagesr
   z--incrementalz--no-detailu   çˆ¬å�–: u   æ€»é¡µæ•°: u     åˆ—è¡¨é¡µ ú/z...rT   T)ÚendÚflushu    æ�¡g333333Ó?u   
å…±èŽ·å�–: rp   z.SELECT page_url FROM gov_raw WHERE site_name='z';r   rr   ú
r(   u   å¢žé‡�è¿‡æ»¤å�Ž: u   è·³è¿‡è¯¦æƒ… (--no-detail)u   å…¥åº“: u    æ�¡ (ä»…åˆ—è¡¨æ•°æ�®)r   z  [z] r)   r*   rU   rV   rR   u   âœ… (r%   zb)u   â�Œ é
   z  DB Error: éd   u   
âœ… å®Œæˆ�ï¼�æ–°å¢žå…¥åº“: )r-   ÚargvÚindexr2   rC   r,   rv   r   rI   Úranger@   ÚextendÚtimeÚsleeprx   ry   rz   Ústdoutr'   r3   rc   r†   Ú	enumeraterk   r9   r   re   r‹   )Ú	max_pagesÚidxÚincrementalÚskip_detailsr:   Útotal_pagesÚ	all_itemsr   r<   r   ÚexistingÚitÚnÚerrÚ	new_countÚbatchÚir}   Údetailrj   s                       r   Úmainrª   ¬   sÇ  € Ø€IØ”C—H‘HÑÜ�h‰h�n‰n˜YÓ'ˆØ�‰7”SœŸ™“]Ò"ÜœCŸH™H S¨1¡WÑ-Ó.ˆIà!¤S§X¡XÐ-€KØ ¤C§H¡HÐ,€Lä	ˆH”Y�KÐ
 Ô!ô �a‹=€DÜ! $Ó'€KÜ	ˆK˜�}Ð
%Ô&á�Y Ò,Øˆà€IÜ�a˜ q™Ó)ò ˆÜ�˜T˜F ! K =°Ð4¸#ÀTÕJÜ˜$ÓˆÜ˜4Ó ˆØ×Ñ˜ÔÜ”�U“�˜DÐ!Ô"Ü�
‰
�3�ðô 
ˆMœ#˜i›.Ð)¨Ð
.Ô/áÜ�N‰N˜I¤yÐ1ØBÄ9À+ÈRÐPØ d°Bô8ˆð 9:¿¹¿¹Ô8H”3�q—x‘x—~‘~Ó'×-Ñ-¨dÓ3Ô4ÌcËeˆØ"+ÖI˜B¨r°%©yÀÒ/H’RÐIˆ	ÐIÜÐ!¤# i£.Ð!1°Ð6Ô7áÜÐ*Ô+Ü! )¬YÓ7‰ˆˆ3Ü�˜˜Ð1Ð2Ô3Øð €IØ€EÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÈÐTXÕYð	Ü,¨T°%©[Ó9ˆFØ# JÑ/ÒE°6¸*Ñ3EˆD�ÑØ$ YÑ/ˆD�‰OØ$ YÑ/°°Ð5ˆD�‰OØ�L‰L˜ÔÜ�Eœ#˜fŸj™j¨°2Ó6Ó7Ð8¸Ð;Ô<ô ˆu‹:˜ÓÜ% e¬YÓ7‰FˆAˆsØ˜‰NˆIÜ¨%Ö0 B�b˜“iÒ0Ô1Ù”E˜L¨¨T¨c¨¨Ð4Ô5Ø‰Eð#ñ& Ü! %¬Ó3‰ˆˆ3Ø�Q‰ˆ	Ü eÖ, �"�U“)Ò,Ô-Ù”˜ S¨¨# Y KÐ0Ô1ä	Ð)¨)¨°DÐ
9Õ:ùòK Jøô* ò 	Ü�D˜˜�*×Ñûð	üò 1ùò -s1   Ç/N&Ç<N&Ê
A)N+Ì#O
Í0OÎ+	OÎ4OÏOÚ__main__)Ú__doc__r0   r-   Úosr˜   Újsonrx   Úbs4r   Úrequestsrv   r   r   r   rz   ÚGROUPÚSessionr   ÚheadersÚupdater   r@   rI   rk   r†   r‹   rª   Ú__name__© r   r   ú<module>r·      s«   ðñó
 
Û 
Û 	Û Û Û Ý Û à€	Ø€Ø"€	Ø€	Ø!€	Ø€à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ ØÐPðô òò$òL$ò5òn$ò,fòI;ðV ˆzÒÙ…Fð r   