
    h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mZ d dl	m
Z
mZ d dlZd dlmZ ej                            d           d dlmZ  G d de          ZdS )	    N)	b64decode	b64encode)urlparsequote)PyQueryz..)Spiderc                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZddZd Zd Zd dZd Zd Zd Zd Zd ZddZd Zd Zd ZdS )!r    c                 ^   t          j        |          | _        n#  i | _        Y nxY wdddddd| _        |                                 | _        | j                            | j        | j         dd           |                     d	| j                    t          d	| j                    d S )
NzuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36ztext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7zzh-CN,zh;q=0.9z
keep-alivezno-cache)z
User-AgentAcceptzAccept-Language
ConnectionzCache-Control/)OriginRefereru   使用站点: )	jsonloadsproxiesheadersget_working_hosthostupdatelogprint)selfextends     1   /storage/emulated/0/纯福利/PY1/今日看料.pyinitzSpider.init   s    :f--DLL bt||| R `/&'
 
 ))++	ty	___MMNNN-$)--...*ty**+++s    	&c                     dS )Nu   🌈 今日看料 r   s    r   getNamezSpider.getName%   s    ""    c                 :    t          fddD                       S )Nc              3   $   K   | ]
}|pd v V  dS )r
   Nr   ).0exturls     r   	<genexpr>z'Spider.isVideoFormat.<locals>.<genexpr>*   s,      JJ#339"%JJJJJJr"   ).m3u8.mp4z.ts)any)r   r'   s    `r   isVideoFormatzSpider.isVideoFormat(   s'    JJJJ1IJJJJJJr"   c                     dS )NFr   r    s    r   manualVideoCheckzSpider.manualVideoCheck,   s    ur"   c                     d S Nr   r    s    r   destroyzSpider.destroy/   s    r"   c                 x   	 t          j        | j        | j        | j        d          }|j        dk    rg g dS |                     |j                  }i }g }g d}d}|D ]\} ||                                          D ]:}	|		                    d          pd|	                                
                                }
r|
rd	k    s                    d
          sd                                v snd                                v sXd                                v sBd                                v s,d                                v sd                                v rdv st          fddD                       r7                    d          r}nd }|                    |
|d           d}<^|sg d}|D ]} ||                                          D ]}	|		                    d          pd|	                                
                                }
r?|
r=d	k    r7                    d          r}nd }|                    |
|d           d}g }t                      }|D ]<}|d         |vr0|                    |           |                    |d                    =|s.ddddddddddd dd!d"dd#d$dd%d&dd'd(dd)d*dd+d,dd-d.dg}||d/<   |                      |d0                    |d1<   |S # t$          $ r!}t'          d2|            g g dcY d }~S d }~ww xY w)3N   r   r   timeout   )classlist)z/#navbarCollapse .navbar-nav .nav-item .nav-linkz.navbar-nav .nav-item .nav-linkz#nav .menu-item az.menu .menu-item aFhrefr
   #httpaboutcontacttagstopstarttimez
/category/c              3       K   | ]}|v V  	d S r0   r   )r%   catr9   s     r   r(   z%Spider.homeContent.<locals>.<genexpr>W   s?        3l  3l33$;  3l  3l  3l  3l  3l  3lr"   )z/dy/z/ks/z/douyu/z/hy/z/hj/z/tt/z/wh/z/asmr/z/xb/z/xsp/z/rdgz/r   )	type_nametype_idT)z.category-list az .slide-toggle + .category-list az.menu .category-list arE   u   热点关注z/category/rdgz/u   抖音z/category/dy/u   快手z/category/ks/u   斗鱼z/category/douyu/u   虎牙z/category/hy/u   花椒z/category/hj/u   推特z/category/tt/u   网红z/category/wh/ASMRz/category/asmr/u   X播z/category/xb/u	   小视频z/category/xsp/r7   $#index article a, #archive article ar8   zhomeContent error: )requestsgetr   r   r   status_codegetpqtextitemsattrstrip
startswithlowerr+   appendsetaddgetlist	Exceptionr   )r   filterresponsedataresultclassesnav_selectorsfound_categoriesselectoritemnamerE   category_selectorsunique_classesseen_idsclser9   s                    @r   homeContentzSpider.homeContent2   s   g	-|DIt|T\cefffH#s**!#R000::hm,,DFG  M  %) 0 0 DNN0022 0 0D99V,,2D99;;,,..D ! 	! 	!// $4::<<//!TZZ\\11$**,,..--4::<<//$**,,..  $t++s  3l  3l  3l  3l  Kk  3l  3l  3l  0l  0l+??3// 1&*GG&0$jjG)-'.( (    ,0(90> $ 4& & &"
 !3 4 4H $X 4 4 6 6 4 4#yy006B#yy{{0022 
4D 
4TS[[#s33 5*.*4d**#NN-1+2, ,    04,4"  NuuH 1 1y>11"))#...LLY000 " "0=NOO"*GG"*GG"*7IJJ"*GG"*GG"*GG"*GG"(5FGG"(_EE"-:JKK" -F7O!\\$$/U*V*VWWF6NM 	- 	- 	-+++,,,,,,,,,,,	-s#   6L KL 
L9L4.L94L9c                 >   	 t          j        | j        | j        | j        d          }|j        dk    rdg iS |                     |j                  }d|                      |d                    iS # t          $ r }t          d|            dg icY d }~S d }~ww xY w)Nr3   r4   r6   r8   rG   zhomeVideoContent error: )rH   rI   r   r   r   rJ   rK   rL   rU   rV   r   )r   rX   rY   re   s       r   homeVideoContentzSpider.homeVideoContent   s    	 |DIt|T\cefffH#s**|#::hm,,DDLL.T)U)UVVWW 	  	  	 0Q00111B<	 s"   5A2 9A2 2
B<BBBc                    	 |                     d                              d          }|r|dk    r| j         | d| d}n| j         | d}t          d|            t	          j        || j        | j        d          }|j        dk    rt          d|j                    g |dd	d
dS | 	                    |j
                  }|                      |d          |          }	|	s|                      |d          |          }	t          dt          |	           d           |                     ||          }
i }|	|d<   ||d<   |
|d<   d	|d<   d|d<   |S # t          $ r$}t          d|            g |dd	d
dcY d }~S d }~ww xY w)Nr   1u   分类页面URL: r3   r4   r6   u   分类页面请求失败:    Z   r   r8   page	pagecountlimittotal0#archive article a, #index article a, .post-card"article a, .post a, .entry-title a   找到 u
    个视频r8   rn   ro   rp   ?B rq   zcategoryContent error: lstriprstripr   r   rH   rI   r   r   rJ   rK   rL   rU   lendetect_page_countrV   r   tidpgrW   r   base_urlr'   rX   rY   videosro   rZ   re   s                r   categoryContentzSpider.categoryContent   s   %	Uzz#--c22H 0bCii4H44r444/H///+c++,,,|Ct|]_```H#s**I83GIIJJJ "BQVWXXX::hm,,D\\$$'Y"Z"Z\_``F  Wdd+O&P&PRUVV3CKK333444 ..tR88IF#F6NF6N"+F; F7O$F7OM 	U 	U 	U/A//000RRSTTTTTTTT	U%   B)E ,B,E 
F#F<FFc                    	 |                     d                              d          }|r|dk    r| j         | d| d}n| j         | d}t          d|            t	          j        || j        | j        d          }|j        dk    rt          d|j                    g |dd	d
dS | 	                    |j
                  }|                      |d          |          }	|	s|                      |d          |          }	t          dt          |	           d           |                     ||          }
i }|	|d<   ||d<   |
|d<   d	|d<   d|d<   |S # t          $ r$}t          d|            g |dd	d
dcY d}~S d}~ww xY w)u   标签页面内容r   rj   u   标签页面URL: r3   r4   r6   u   标签页面请求失败: rk   rl   r   rm   rr   rs   rt   u    个标签相关视频r8   rn   ro   rp   ru   rq   ztagContent error: Nrv   r{   s                r   
tagContentzSpider.tagContent   s   %	Uzz#--c22H 0bCii4H44r444/H///+c++,,,|Ct|]_```H#s**I83GIIJJJ "BQVWXXX::hm,,D\\$$'Y"Z"Z\_``F  Wdd+O&P&PRUVV?CKK???@@@ ..tR88IF#F6NF6N"+F; F7O$F7OM 	U 	U 	U*q**+++RRSTTTTTTTT	Ur   c                 P   d}g }g d}|D ]} ||                                           D ]}|                    d          pd}|                                                                }	|ret	          j        d|                    d                    }
|
r;t          |
                    d                    }||vr|	                    |           |	r<|	
                                r(t          |	          }||vr|	                    |           |r#t          |          }t          d|            |S g d	}|D ]} ||          rt          d
            dS  t           |d                    dk     rt          d           t          |          S t          d           dS )u   改进的页数检测方法i )z.page-navigator az.pagination az.pages az.page-numbers ar9   r
   z	/(\d+)/?$r   rk   u#   从分页器检测到最大页码: )z.page-navigator .nextz.pagination .nextz
.next-pageu   a:contains("下一页")u-   检测到下一页按钮，允许继续翻页z,#archive article, #index article, .post-card   u-   当前页内容较少，可能没有下一页u   使用默认页数: 99999)rM   rN   rL   rO   researchrx   intgrouprR   isdigitmaxr   ry   )r   rY   current_pagero   page_numberspage_selectorsr^   	page_linkr9   rL   matchpage_nummax_pagenext_selectorss                 r   rz   zSpider.detect_page_count   s   	 
 
 
 ' 	6 	6H!T(^^1133 6 6	 ~~f--3 ~~''--//  :IlDKK4D4DEEE :#&u{{1~~#6#6#<77(//999  6DLLNN 6"4yyH|33$++H555#6(  	<((HBBBCCCO
 
 
 ' 	 	HtH~~ EFFFuu
 ttBCCDDqHHABBB|$$$)***ur"   c           	      	   	 |d                              d          s| j         |d          n|d         }t          j        || j        | j        d          }|j        dk    rddd| d	giS |                     |j                  }d
di}g d}|D ]:} ||          }|r+|                                	                                |d<    n;d|vrd|d<   	 g }	 |d          r |d          
                                D ]}
|
                                }|
                    d          }|rm|rk|                     | j                  r|                    | j        d          }|	                    dt          j        ||d          z   dz   |z   dz              |	rd                    |	          n$ |d                                          p|d         |d<   n#  |d         |d<   Y nxY w	 g }t#                      } |d          rt%           |d          
                                d          D ]\  }}
|
                    d          }|r	 t          j        |          }|                    di                               dd          }|r{d| }d}||v rd| d | }|dz  }||v |                    |           |                     d!| d"|            t-          d!| d"|            |                    | d#|            #  Y xY w|sg d$}|D ]}t%           ||          
                                d          D ]\  }}|                    d%          p|                    d          pdrft/          fd&d'D                       rKd| }d}||v rd| d | }|dz  }||v |                    |           |                    | d#            |r_|                     d(t1          |           d)           t-          d(t1          |           d)           d*                    |          |d+<   nd,| |d+<   n1# t2          $ r$}t-          d-|            d,| |d+<   Y d }~nd }~ww xY wd|giS # t2          $ r1}t-          d.|            ddd/|r|d         nd d	gicY d }~S d }~ww xY w)0Nr   r;   r3   r4   r6   r8   u   今日看料u   页面加载失败$)vod_play_fromvod_play_urlr   )z.post-titlezh1.entry-titleh1.post-card-titlevod_nameu   今日看料视频z.tags .keywords ar9   r
   z[a=cr:)idr`   z/]z[/a] z.post-contentvod_contentz.dplayerrk   )r@   zdata-configvideor'   u   视频   _u   解析到视频: z -> $)zvideo sourcer   ziframe[src*="video"]za[href*=".m3u8"]za[href*=".mp4"]srcc              3       K   | ]}|v V  	d S r0   r   )r%   r&   r   s     r   r(   z'Spider.detailContent.<locals>.<genexpr>|  s'      *\*\#3#:*\*\*\*\*\*\r"   )r)   r*   r   u   拼装播放列表，共u   个r:   r   u   正片$u   视频解析错误: zdetailContent error: u   详情页加载失败$)rP   r   rH   rI   r   r   rJ   rK   rL   rO   rM   rN   replacerR   r   dumpsjoinrS   	enumerater   rT   r   r   r+   ry   rV   )r   idsr'   rX   rY   vodtitle_selectorsr^   
title_elemclistktitler9   plist
used_namescconfig_attrconfig	video_urlr`   countvideo_selectorselemre   r   s                           @r   detailContentzSpider.detailContent6  su   ]	C03A0A0A&0I0IUTY(A(((sSTvC|Ct|]_```H#s**>SnilSnSn!o!o pqq::hm,,D"N3C ZYYO+  !T(^^
 &0oo&7&7&=&=&?&?C
OE $$"6J54+,, u!T"566<<>> u u ! vvf~~  uT u#ty99 C'+||DIr'B'B!LLDJdTY?Z?Z4[4[)[^b)bej)jms)sttt8=%rSXXe___44CXCXC]C]C_C_CrcfgqcrM""5%(_M"""16 UU
 4
## ) )$$z*:*:*@*@*B*B! L L L ) )1&'ff]&;&;& )))-K)@)@,2JJw,C,C,G,Gr,R,R	#, 	!H+7A<<D,-E*.**<*</C/C/CE/C/C(-
 +/**<*< %/NN4$8$8$8$(HH-V-V-V9-V-V$W$W$W$)*Sd*S*S	*S*S$T$T$T$)LLD1F1F91F1F$G$G$G) ()$  >&~&~&~O$3 
> 
>'0h1E1E1G1Gq'Q'Q'Q 	> 	>GAt"&))E"2"2"Mdii6G6G"M2C" >s*\*\*\*\A[*\*\*\'\'\ >'3||()&*j&8&8+?A+?+?+?+?D$)QJE '+j&8&8 !+t 4 4 4 %__s__ = = =	>  :HHGE

GGGHHHDSZZDDDEEE*-((5//C''*9C//C' 6 6 60Q00111&5ooN######6 SE?" 	C 	C 	C-!--...~Oruh}hklmhnhn{}OO  A  A  B  C  C  C  C  C  C  C	Cs   A+R
 /A(R
 DG R
 G,*R
 0A$Q B;LQ LE Q R
 
RQ=8R
 =RR
 

S&S :S Srj   c                 l   	 t          |          }|dk    r| j         d| d| n| j         d| d}t          j        || j        | j        d          }|j        dk    rD|dk    r| j         d| d| n| j         d| d}t          j        || j        | j        d          }|j        dk    rg |dS |                     |j                  }| 	                     |d	                    }| 
                    ||          }	|||	d
S # t          $ r!}
t          d|
            g |dcY d }
~
S d }
~
ww xY w)Nrj   /tag/r   r3   r4   r6   z/search/r8   rn   rr   )r8   rn   ro   zsearchContent error: )r   r   rH   rI   r   r   rJ   rK   rL   rU   rz   rV   r   )r   keyquickr}   encoded_keyr'   rX   rY   r   ro   re   s              r   searchContentzSpider.searchContent  s   	,**K;=99TY77[772777TYJkJk]hJkJkJkC|Ct|]_```H#s**BD))>>K>>">>>TXT]QuQugrQuQuQu#<T\4<acddd#s** "B///::hm,,D\\$$'Y"Z"Z[[F ..tR88I"BYGGG 	, 	, 	,-!--...++++++++	,s%   B1D 4AD 
D3D.(D3.D3c                 (   	 | j          d}t          j        || j        | j        d          }|j        dk    rg |dS |                     |j                  }g } |d                                          D ]}|                                	                                }|
                    d          pd}|rc|rad	|v r]|d
k    rW|                    | j         d          }	|	                    d          sd|	z   }	|                    |	d| ddddddd           t          dt          |           d           i }
||
d<   ||
d<   d|
d<   d|
d<   t          |          |
d<   |
S # t           $ r!}t          d|            g |dcY d}~S d}~ww xY w)u   获取标签页面内容z
/tags.htmlr3   r4   r6   r   za[href*="/tag/"]r9   r
   r   u   全部标签r   u   🏷️ u   标签tagrectHzG?typeratiovod_idr   vod_picvod_remarksvod_tagstylert   u
    个标签r8   rn   rk   ro   i  rp   rq   zgetTagsContent error: N)r   rH   rI   r   r   rJ   rK   rL   rM   rO   rN   r   rP   rR   r   ry   rV   )r   r}   r'   rX   rY   r>   tag_elemtag_nametag_hreftag_idrZ   re   s               r   getTagsContentzSpider.getTagsContent  s   +	,Y***C|Ct|]_```H#s** "B///::hm,,DD !D!344::<<  #==??0022#==006B  W-@-@XQ_E_E_%--di<<F!,,S11 .!$vKK"($9x$9$9#%'/#(*04!@!@! !    1CII111222 F!F6NF6N"#F;!F7O!$iiF7OM 	, 	, 	,.1..///++++++++	,s#   ;E& D'E& &
F0FFFc                     |}d}|                      |          rd|v r|                     |          }d}|                     d| d|            t          d| d|            ||| j        dS )Nrk   r)   r   u   播放请求: parse=z, url=)parser'   header)r,   proxyr   r   r   )r   flagr   vipFlagsr'   ps         r   playerContentzSpider.playerContent  s    c"" 	#~~jjooA666667773Q33c334443$,???r"   c                    	 |                     d          dk    r|                     |d                   }|                    d          s-|                    d          r| j         | }n| j         d| }t	          j         || j        | j        d          }d|j                             d	d
          |j        gS |                     d          dk    r|                     |d                   S | 	                    |d                   S # t          $ rC}t          d|            dddt          |                                           gcY d }~S d }~ww xY w)Nr   imgr'   zhttp://zhttps://r   
   r4   r6   Content-Typez
image/jpegm3u8zlocalProxy error:   
text/plainzProxy error: )rI   d64rP   r   rH   r   r   contentm3ProxytsProxyrV   r   strencode)r   paramimg_urlresre   s        r   
localProxyzSpider.localProxy  sz   	Jyy  E))((5<00))*ABB ;))#.. ;%)Y"9"9"9%)Y":":":":l7DL$,`bcccS[__^\JJCKXX6""f,,||E%L111||E%L111 	J 	J 	J*q**+++'?s1vv'?'?'F'F'H'HIIIIIII	Js*   B:D =3D 1D 
E8EEEr   c                     |rCt          | j                  r/|                                  d|                     |           d| S |S )N&url=z&type=)ry   r   getProxyUrle64)r   rY   r   s      r   r   zSpider.proxy  sR     	C%% 	&&((KKtxx~~KKTKKKKr"   c           
         	 |                      |          }t          j        || j        | j        d          }|j                            d          }|j                            d          rF|j        d         }t          j        || j        | j                  j                            d          }|                                                    d          }|d |	                    d                   }t          |          }|j        dz   |j        z   }d	}t          |          D ]\  }	}
|rdd
|
v r`d}t          j        ||
          }|rGt          j        |d|                     |                    d          d           d|
          ||	<   d}kd|
vrd|
vr<|
                    d          dk     r|n|}||
                    d          rdndz   |
z   }
|                     |
|
                    d          d                             d          d                   ||	<   d                    |          }dd|gS # t,          $ rC}t/          d|            dddt1          |                                           gcY d }~S d }~ww xY w)NF)r   r   allow_redirectsutf-8Location)r   r   
r   z://TURIzURI="([^"]*)"zURI="rk   mkey"z#EXTr;   r   r
   .?r   r6   zapplication/vnd.apple.mpegurzm3Proxy error: r   r   zm3u8 proxy error: )r   rH   rI   r   r   r   decoderO   splitrfindr   schemenetlocr   r   r   subr   r   r   rP   r   rV   r   r   r   )r   r'   ydatarY   lineslast_r
parsed_urldurliskeyindexstringpatternr   domainre   s                  r   r   zSpider.m3Proxy  s   	O((3--CLdlDLbghhhE=''00D}  ,, mmJ/|Ct|TTT\ccdkllJJLL&&t,,E#))C..)F!#J$u,z/@@DE!*5!1!1 [ [v !Uf__.GIgv66E !')vg7dtzz%++VW..Z`?a?a7d7d7dfl'm'me % ''V+++1<<+<+<q+@+@d!'1B1B31G1G+P22S!QTZ!Z#'::ffll36G6G6K6Q6QRU6V6VWX6Y#Z#ZE%L99U##D7>> 	O 	O 	O'A''((('DCFF'D'D'K'K'M'MNNNNNNN	Os   H;H> >
J8J JJc                 X   	 |                      |          }t          j        || j        | j        d          }d|j                            dd          |j        gS # t          $ rC}t          d|            ddd	t          |           	                                gcY d }~S d }~ww xY w)
NT)r   r   streamr6   r   z
video/mp2tztsProxy error: r   r   zts proxy error: )
r   rH   rI   r   r   r   rV   r   r   r   )r   r'   rY   re   s       r   r   zSpider.tsProxy%  s    	M((3--C<T\4<X\]]]D)).,GGVV 	M 	M 	M'A''((('B#a&&'B'B'I'I'K'KLLLLLLL	Ms   AA 
B)&8B$B)$B)c                     	 |                     d          }t          |          }|                    d          S # t          $ r*}t	          dt          |                      Y d }~dS d }~ww xY w)Nr   u   Base64编码错误: r
   )r   r   r   rV   r   r   )r   rL   
text_bytesencoded_bytesre   s        r   r   z
Spider.e64.  s    	W--J%j11M ''000 	 	 	1Q1122222222	   8; 
A/A**A/c                     	 |                     d          }t          |          }|                    d          S # t          $ r*}t	          dt          |                      Y d }~dS d }~ww xY w)Nr   u   Base64解码错误: r
   )r   r   r   rV   r   r   )r   encoded_textr  decoded_bytesre   s        r   r   z
Spider.d647  s    	(//88M%m44M ''000 	 	 	1Q1122222222	r  c                    g d}|D ]}	 t          j        || j        | j        d          }|j        dk    rf|                     |j                  } |d          }t          |          dk    r.|                     d|            t          d|            |c S # t          $ r
}Y d}~d}~ww xY w|                     d	|d                     t          d	|d                     |d         S )
z(Get working host from known dynamic URLs)zhttps://kanliao2.one/zhttps://kanliao7.org/zhttps://kanliao7.net/zhttps://kanliao14.com/r   r4   r6   rG   r   u   选用可用站点: Nu#   未检测到可用站点，回退: )rH   rI   r   r   rJ   rK   rL   ry   r   r   rV   )r   dynamic_urlsr'   rX   rY   articlesre   s          r   r   zSpider.get_working_host@  s4   
 
 
   	 	C
#<T\4<acddd'3..::hm44D#t$JKKH8}}q((!=!=!=>>>:S::;;;"


    	H|AHHIIIELOEEFFFAs   BB
B2-B2c                 v   g }|                                 D ]}|                    d          } |d                                          pM |d                                          p0 |d                                          p|                                } |d                                          p |d                                          }|                     |          rt	          d|            |r|r|                                r|                    d          s|                    d	          r|}nd	| }n|}|                    ||                    d
d                                          | 	                    |          |r|                                ndddddd           |S )Nr9   h2r   z.entry-titlezspan[itemprop="datePublished"]z..post-meta, .entry-meta, time, .post-card-infou   过滤广告: r;   r   r   r   r
   r   r   r   r   )
rM   rN   rL   is_advertisementr   rO   rP   rR   r   get_article_img)	r   rY   r|   r   r   abr   r   s	            r   rU   zSpider.getlistZ  s    	 	AvA$f!!$6"7"7"<"<">">f!!NBSBSBXBXBZBZf^_^d^d^f^fA23388::xaa@p>q>q>v>v>x>xA $$Q'' *q**+++ Q 17799 ||F++ ||C(( )!"!(QF$ !		$ 4 4 : : < <#33A6601#9177999r!&,t<<     r"   c                    |                     d          }|                                D ]}d|                                v r dS  |d                                          p |d                                          pdg d}t          fd|D                       rdS |                    d	          pdd
v r<t          fddD                       r!ddg}t          fd|D                       rdS dS )u0   判断是否为广告（包含热搜HOT标志）z.wraps	   热搜HOTTr  r   r
   )r  u   手机链接u	   DNS设置u	   修改DNSu
   WIFI设置c              3       K   | ]}|v V  	d S r0   r   )r%   keywordr   s     r   r(   z*Spider.is_advertisement.<locals>.<genexpr>  s(      ;;Gw%;;;;;;r"   r   zbackground:c              3       K   | ]}|v V  	d S r0   r   r%   gradientr   s     r   r(   z*Spider.is_advertisement.<locals>.<genexpr>  s(      ){){(e*;){){){){){){r"   )z-webkit-linear-gradientzlinear-gradientz#ec008c,#fc6767z#ffe259,#ffa751c              3       K   | ]}|v V  	d S r0   r   r!  s     r   r(   z*Spider.is_advertisement.<locals>.<genexpr>  s(      BB8u$BBBBBBr"   F)findrM   rL   r+   rN   )r   article_elemhot_elementsr   ad_keywordsad_gradientsr   r   s         @@r   r  zSpider.is_advertisementz  sI    $((22 &&(( 	 	Ddiikk))tt * T""''))Z\\:L-M-M-R-R-T-TZXZ[[[;;;;{;;;;; 	4 !!'**0bE!!c){){){){Lz){){){&{&{!-/@ALBBBB\BBBBB tur"   c                     |d                                           }|rt          j        d|          }|r|                    d          }|                    d          s-|                    d          r| j         | }n| j         d| }|                                  d|                     |           dS |                    d          }|r|	                    d	          pd
}t          j        d|          }|r|                    d          }|r|                    d          so|                    d          s-|                    d          r| j         | }n| j         d| }|                                  d|                     |           dS |                    d          }	|	r|		                    d          }
|
ro|
                    d          s-|
                    d          r| j         |
 }
n| j         d|
 }
|                                  d|                     |
           dS |		                    d          }|ro|                    d          s-|                    d          r| j         | }n| j         d| }|                                  d|                     |           dS d
S )u3   从文章元素中提取图片，多种方式尝试scriptzloadBannerDirect\('([^']+)'rk   r   r   r   z	&type=imgz.blog-backgroundr   r
   z2background-image:\s*url\(["\']?([^"\'\)]+)["\']?\)zdata:r   zdata-srcr   )
rL   r   r   r   rP   r   r   r   r$  rN   )r   r%  script_textr   r'   bg_elemr   bg_matchr   img_elemdata_srcr   s               r   r  zSpider.get_article_img  s2    #l8,,1133 		LI<kJJE Lkk!nn~~&=>> 3~~c** 3!%1C11!%22S22**,,KK488C==KKKK ##$677 	TLL))/REy!VX]^^H T"..++ T7#5#5g#>#> T"--.EFF ?"--c22 ?)-&=G&=&=GG)-&>&>W&>&>G"..00SStxx7H7HSSSS  $$U++ 	L}}Z00H Q**+BCC =**3// =&*i#;#;#;&*i#<#<(#<#<**,,PP488H3E3EPPPP--&&C L~~&=>> 3~~c** 3!%1C11!%22S22**,,KK488C==KKKKrr"   c                     	 t          |          S # t          $ rI}t          t          |                      t          |                    d                    cY d }~S d }~ww xY w)Nr   )pqrV   r   r   r   )r   rY   re   s      r   rK   zSpider.getpq  sp    	,d88O 	, 	, 	,SVV+dkk'**++++++++	,s    
A$>AA$A$N)r
   )rj   )r   )__name__
__module____qualname__r   r!   r,   r.   r1   rf   rh   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   rU   r  r  rK   r   r"   r   r   r      s          "# # #K K K    h- h- h-T	  	  	 &U &U &UP'U 'U 'UR< < <|^C ^C ^C@, , , ,6-, -, -, -,^	@ 	@ 	@J J J(   O O O@M M M      4   @  03 3 3j, , , , ,r"   r   )r   randomr   sys	threadingrA   base64r   r   urllib.parser   r   rH   pyqueryr   r1  pathrR   base.spiderr   r   r"   r   <module>r=     s      				 



      ' ' ' ' ' ' ' ' ( ( ( ( ( ( ( (  ! ! ! ! ! !          z
, z
, z
, z
, z
,V z
, z
, z
, z
, z
,r"   