
    P&h(                         d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ ej                            d           d dlmZ  G d d	e          ZdS )
    N)urlparse)PyQuery)	b64decode	b64encode)Sessionz..)Spiderc                       e Zd Zd%dZd Zd Zd Zd ZdZdd	d	d
ddee ddddddddZ	d Z
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'd#Zd$S )(r    c                    t          j        |          | _        n#  i | _        Y nxY wt                      | _        | j        j                            | j                   | j        j                            | j                   d S N)jsonloadsproxiesr   sessionupdateheaders)selfextends     (   /storage/emulated/0/纯福利/PY1/Xvd.pyinitzSpider.init   sl    :f--DLL bt|||yy##DL111##DL111s    	&c                     d S r    r   s    r   getNamezSpider.getName           c                     d S r   r   )r   urls     r   isVideoFormatzSpider.isVideoFormat   r   r   c                     d S r   r   r   s    r   manualVideoCheckzSpider.manualVideoCheck    r   r   c                     d S r   r   r   s    r   destroyzSpider.destroy#   r   r   zhttps://www.xvideos.comzxMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36zno-cachez	"Windows"zA"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"1/z?0z
cross-sitecorsemptyzzh-CN,zh;q=0.9,en;q=0.8zu=1, i)z
User-Agentpragmazcache-controlzsec-ch-ua-platformz	sec-ch-uadntoriginrefererzsec-ch-ua-mobilezsec-fetch-sitezsec-fetch-modezsec-fetch-destzaccept-languagepriorityc                 n    i }dddddd}g }|D ] }|                     |||         d           !||d<   |S )	N/new/best/channels-index/tags/pornstars-index)u   最新u   最佳u   频道u   标签u   明星)	type_nametype_idclass)append)r   filterresult
cateManualclassesks         r   homeContentzSpider.homeContent9   sw    '(
 

  	 	ANN%a=      "wr   c                 j    |                                  }d|                      |d                    iS )Nlist.mozaique .frame-block)getpqgetlist)r   datas     r   homeVideoContentzSpider.homeVideoContentK   s1    zz||t||DD)A$B$BCCDDr   c                    g }i }|dk    rdt          |          dz
   nd}||d<   d|d<   d|d	<   d
|d<   |dk    sd|v rYd|v r|                    d          d         }|                     | d|           }|                      |d                    }n|dk    ry|dk    r5| j                            | j         | d          j        d         | _        |                     | j         |           }|                      |d                    }nS|dk    s|dk    r_|                     | |           } |d          }	|		                                D ]#}
 |
d          }t          j        d |d                                                    }d}|r'|                    d                                          }|                    d|dk    rdnd |                    d          z    |d                                          p0 |
d                                                              dd          |                     |          d  |
d!                                          d"d#d$d%           %n|d&k    r||d<   |                     |          }	 |	d'          }	|		                                D ]} |d(          	                                D ]}
|                    d)|
                    d          z   |
                    d*          p |
d+                                          dd  |
d,                                          d"d#d$d%           nd-|v r|                    d          d         }| j                            | j         | d.t          |          dz
                                             }	|	d/         D ]}
|                    |
                    d0          |
                    d1          |                     |
                    d2                    |
                    d3          |
                    d4          d"d#d$d5           ||d6<   |S )7Nr$   r%      r
   pagei'  	pagecountZ   limiti?B totalr.   
tags_clickclick_r?   r/   F)allow_redirectsLocationr0   r2   z.mozaique .thumb-block.thumb-inside .thumb azsrc="([^"]+)"scriptchannels_click_	/channelshrefz.profile-name    folderz.thumb-under .profile-countsHzG?rectratiotype)vod_idvod_namevod_picvod_tagvod_remarksstyler1   z
.tags-listzli atags_click_titlebz	.navbadgechannels_clickz/videos/best/videosutfilndr\   r]   r^   vod_yearr`   ra   r>   )intsplitr@   rA   r   gethostr   pathitemsresearchtextgroupstripr6   attrreplaceproxypostr   )r   tidpgr7   r   vdatar8   rF   rB   vhtmliamatchimgrk   s                  r   categoryContentzSpider.categoryContentO   s   $&#II 3r77Q;   2v"{w w;;,#--s""syy':':2'>3sMMRMM**D,,tt$<==>>EE'\\3ww,**di+>+>+>u*UU]^hi	ty0$0011D,,tt$<==>>EE###s,>'>'>::ndnn--D$/00E[[]]  A.//	"2AAhKK4D4D4F4FGG 1++a....00C^cCT>T>TZ\^^_`_e_efl_m_mm !/ 2 2 7 7 9 9 jQQ=O=O=T=T=V=V=^=^_efi=j=j#zz#'#$1%C#D#D#I#I#K#K'+V<<      '\\"$F;JJsOOEE,''E[[]] 	 	6**  ALL"/v">$%FF7OO$Dqqvv{{}}#%#+'(q~~':':'<'<+/!@!@" "    	 $$		(##B'C,##ty$O#$O$OCGGAI$O$OPPUUWWE8_  eeCjj !d#zz!%%++66 !c

#$55::'+V<<      vr   c                      j          |d          }                     |d                   } |d                              d          } |d          }|                    d          }d}|rz|                    d          dk     rad	| }d
t	          j        d|z    |d                                          d          z   dz    |d                                          z   dz   }|| |d                                                              |d          ddd} |d          }	d}
|	                                D ]"}|                                }d|v rd|v r|}
 n#| d 	                    d d|            g}d }|
rc	  ||
          } fd|                                D             }n6# t          $ r)}t          dt          |                      Y d }~nd }~ww xY wd                    |          |d<   d|giS )Nr   zmeta[property="og:title"]contentz.main-uploader arT   r
   r%      rS   z[a=cr:rR   z.name)idnamez/]z[/a]z.page-titleXvideos)r]   vod_directorr`   vod_play_fromvod_play_urlz#video-player-bg scriptsetVideoUrlLowhtml5player$rE   @@@@c                    	 t          j        d|           }t          j        d|           }t          j        d|           }|r|                    d          nd |r|                    d          nd |r|                    d          nd dS # t          $ r+}t	          dt          |                      i cY d }~S d }~ww xY w)Nz%setVideoUrlLow\([\'"]([^\'"]+)[\'"]\)z&setVideoUrlHigh\([\'"]([^\'"]+)[\'"]\)z"setVideoHLS\([\'"]([^\'"]+)[\'"]\)rE   )hlshighlowu   提取视频URL失败: )rt   ru   rw   	Exceptionprintstr)
js_contentr   r   r   es        r   extract_video_urlsz0Spider.detailContent.<locals>.extract_video_urls   s    i H*UUy!JJWWi EzRR ,/8399Q<<<D-1;DJJqMMMt+.8399Q<<<D  
    8A88999						s   B	B 
C B<6C<Cc           	      X    g | ]&\  }}|| d                      d d|            'S )r   r   r   )e64).0qualityr   r   s      r   
<listcomp>z(Spider.detailContent.<locals>.<listcomp>   sW       $<<Q//C//!:!:<<  r   u   提取url失败: #r   r>   )rq   r@   ry   countr   dumpsrv   rz   rs   r   r   r   r   join)r   idsr   rB   vndtextrT   pdtitlevodr   jstrrQ   r   plistr   urlsr   s   `                r   detailContentzSpider.detailContent   s   $CF$$zz#a&!!4+,,11)<<d%&&ZZ 	SDJJsOOa''#T##D3DT3ISXSXY`SaSaSfSfShSh,i,i!j!jjmqqtyty  {B  uC  uC  uH  uH  uJ  uJ  J  MS  SG"4..3355==bDD&
 
 T344
 &&(( 	 	FkkmmG7**}/G/G44Q//C//22445	 	 	  		44))$//   (,

  
  4 4 42#a&&22333333334!hhuooNu~s   +F7 7
G*G%%G*c                     |                      d| dt          |          dz
             }|                      |d                    |dS )Nz/?k=z&p=rE   r?   )r>   rF   )r@   rn   rA   )r   keyquickr~   rB   s        r   searchContentzSpider.searchContent   sS    ZZ2s22s2wwqy2233||DD)A$B$BCC2NNNr   c                     |                      |                              d          }d|d         v r|                     |d         d          |d<   t          |d                   |d         | j        dS )Nr   z.m3u8rE   m3u8r   )parser   header)d64ro   r{   rn   r   )r   flagr   vipFlagsr   s        r   playerContentzSpider.playerContent   sh    HHRLLv&&c!ftzz#a&&'A'Ac!fSVSVt|LLLr   c                     |                      |d                   }|                    d          dk    r|                     |          S |                     |          S )Nr   r[   r   )r   rp   m3ProxytsProxy)r   paramr   s      r   
localProxyzSpider.localProxy   sR    HHU5\""99V&&<<$$$<<$$$r   c                     	 |                     d          }t          |          }|                    d          S # t          $ r*}t	          dt          |                      Y d }~dS d }~ww xY w)Nutf-8u   Base64编码错误: r
   )encoder   decoder   r   r   )r   rv   
text_bytesencoded_bytesr   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   r   r   r   )r   encoded_textr   decoded_bytesr   s        r   r   z
Spider.d64   s    	(//88M%m44M ''000 	 	 	1Q1122222222	r   c                    g }|                                 D ]} |d          } |d          }|                    |                    d           |d                              d          |                      |d                              d                     |d                                           |d	                                          d
ddd           |S )NrP   z.thumb-under .title arT   r   rc   r   zdata-srcz.video-hd-markz	.durationrW   rX   rY   rl   )rs   r6   ry   r{   rv   )r   rB   vlistr   r   rd   s         r   rA   zSpider.getlist   s     
	 
	Aa())Aa'((ALL&&..AcFFKK00::aahhmmJ&?&?@@A.//4466 q~~2244#'88      r   c                    | j                             | j         |           j        }	 t	          |          S # t
          $ rI}t          t          |                      t	          |                    d                    cY d }~S d }~ww xY w)Nr   )	r   rp   rq   rv   pqr   r   r   r   )r   rr   responser   s       r   r@   zSpider.getpq   s    <##ty$8$$8$899>	0h<< 	0 	0 	0SVV+hoog..////////	0s   9 
B>BBB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   }t          |          D ]\  }}	d	|	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 )NF)r   r   rN   r   rO   )r   r   
r%   z://z#EXThttpr   r
   .rM   ?r      zapplication/vnd.apple.mpegur)requestsrp   r   r   r   r   rx   ro   rfindr   schemenetloc	enumerater   
startswithr{   r   )r   r   ydatarB   lineslast_r
parsed_urldurlindexstringdomains              r   r   zSpider.m3Proxy   s   S$,^cddd}##G,,=Z(( 	i-
+C<T\4<PPPX__`ghhD

""4((_ciinn_%c]]
 5(:+<<&u-- 	W 	WME6V##''%+\\#%6%6%:%:66F#V->->s-C-C'LrrMPVVF#zz&&,,s2C2CB2G2M2Mc2R2RST2UVVeyy3T::r   c                 p    t          j        || j        | j        d          }d|j        d         |j        gS )NT)r   r   streamr   zContent-Type)r   rp   r   r   r   )r   r   rB   s      r   r   zSpider.tsProxy  s5    |Ct|TXYYYT\.14<@@r   r   c                     |rCt          | j                  r/|                                  d|                     |           d| S |S )Nz&url=z&type=)lenr   getProxyUrlr   )r   rB   r[   s      r   r{   zSpider.proxy  sS     	C%% 	0@0@0B0B-e-eRV-e-e_c-e-e&e[r   N)r
   )r$   )r   )__name__
__module____qualname__r   r   r   r!   r#   rq   r   r<   rC   r   r   r   r   r   r   r   rA   r@   r   r   r{   r   r   r   r   r      s                   %D Q#+d*** & !4 G"  $E E E= = =~2 2 2hO O O OM M M
% % %      0 0 0 0; ; ;&A A A     r   r   )r   rt   sysurllib.parser   r   pyqueryr   r   base64r   r   r   rr   r6   base.spiderr   r   r   r   <module>r      s     				 



 ! ! ! ! ! !  ! ! ! ! ! ! ' ' ' ' ' ' ' '                D D D D DV D D D D Dr   