
    P&h.                         d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlZd dl	m
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)PyQuery)Sessionz..)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dZd Zd Zd Zd Zd Zd Zd Zd Zd ZddZdS )r    c                    t          j        |          | _        n#  i | _        Y nxY wdddddddddd	d
dd| _        |                                 | _        | j                            | j         d| j        d           t                      | _        | j        j                            | j                   | j        j                            | j                   dS )u  
        内置代理配置：真心jar为例
        {
            "key": "Phb",
            "name": "Phb",
            "type": 3,
            "searchable": 1,
            "quickSearch": 1,
            "filterable": 1,
            "api": "./py/Phb.py",
            "ext": {
                "http": "http://127.0.0.1:1072",
                "https": "http://127.0.0.1:1072"
            }
        },
        注：http(s)代理都是http
        zxMozilla/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"1z?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dntzsec-ch-ua-mobilezsec-fetch-sitezsec-fetch-modezsec-fetch-destzaccept-languagepriority/)refereroriginN)	jsonloadsproxiesheadersgethosthostupdater   session)selfextends     (   /storage/emulated/0/纯福利/PY1/Phb.pyinitzSpider.init   s    $  :f--DLL bt||| U '"-\ $*$%8 
 
 LLNN	4949MMNNNyy##DL111##DL111s    	&c                     d S N 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.destroyC   r&   r'   c                 |    i }dddddd}g }i }|D ] }|                     |||         d           !||d<   ||d	<   |S )
N/video
/playlists	/channels/categories
/pornstars)u   视频u   片单u   频道u   分类u   明星)	type_nametype_idclassfilters)append)r   filterresult
cateManualclassesr8   ks          r   homeContentzSpider.homeContentF   s    "!#"
 

  	 	ANN%a=      "w#yr'   c                 p    |                      d          } |d          }d|                     |          iS )Nz/recommendedz.#recommendedListings .pcVideoListItem .phimagelistgetpqgetlist)r   datavhtmls      r   homeVideoContentzSpider.homeVideoContentZ   s:    zz.))EFFU++,,r'   c                    g }i }||d<   d|d<   d|d<   d|d<   |dk    sd	|v r_d
|v rdnd
}|                     d	          d         }|                     | | d|           }|                      |d                    }nq|dk    r|                     | d|           } |d          }	g }|	                                D ]}
|                    d |
d                              d          z    |
d                              d          |                      |
d                              d                    d |
d                                          dddd           n|dk    r|                     | d|           } |d           }	g }|	                                D ]}
|                    d! |
d"                              d          z    |
d#                              d$          |                      |
d#                              d                    d |
d%                              d&                                          dddd           n|d'k    r|d(k    rd)|d<   |                     |           } |d*          }	g }|	                                D ]}
|                     |
d+                              d          d	z    |
d+                              d$          |                      |
d,                              d                    ddddd-           n|d.k    r%|                     | d/|           } |d0          }	g }|	                                D ]}
|                    d1 |
d+                              d          z    |
d2                                          |                      |
d,                              d                    d |
d3                              d                                           |
d3                              d&                                          dddd4           nd5|v r|                     d6          d&         }|d(k    rX|                     |          } |d7                              d8          | _	        |                      |d9                    }n|                     d:          d&         }|                     d;| d<| j	         d=|           }|                      |d>                    }nd?|v rT|                     d6          d&         }|                     | d@|           }|                      |dA                    }nWdB|v rS|                     d6          d&         }|                     | d@|           }|                      |dC                    }||dD<   |S )ENpagei'  	pagecountZ   limiti?B totalr0   _this_video?&r   zpage=z#videoCategory .pcVideoListItemr1   z?page=z#playListSection liplaylists_click_z(.thumbnail-info-wrapper .display-block ahreftitlez.largeThumbsrcfolderz.playlist-videos .numberrectHzG?)typeratio)vod_idvod_namevod_picvod_tagvod_remarksstyler2   z?o=rk&page=z&#filterChannelsSection li .descriptiondirector_click_z	.avatar az.avatar imgaltz.descriptionContainer ul lir3   r      z*.categoriesListSection li .relativeWrapperaza img)rZ   r[   r\   r]   r_   r4   z
?o=t&page=z&#popularPornstars .performerCard .wrappornstars_click_z.performerCardNamez.performerVideosViewsCount span)rZ   r[   r\   r]   vod_yearr^   r_   playlists_clickclick_z#searchInputz
data-tokenz(#videoPlaylist .pcVideoListItem .phimagez	playlist/z/playlist/viewChunked?id=z&token=&page=z.pcVideoListItem .phimagedirector_clickz/videos?page=z.#showAllChanelVideos .pcVideoListItem .phimagepornstars_clickz2#mostRecentVideosSection .pcVideoListItem .phimagerA   )
splitrC   rD   itemsr9   attrproxytexteqtoken)r   tidpgr:   r   vdatar;   pagestrrE   rF   ihdatas               r   categoryContentzSpider.categoryContent_   s   v"{w w(??ms22!SjjdddG))M**1-C::8g88B8899DLL&G!H!HIIEEL  ::00B0011DD.//EE[[]]  0115_3`3`3e3efl3m3mm !"L M M R RSZ [ [#zz!!M*:*:*?*?*F*FGG'#$1%?#@#@#E#E#G#G&,t<<      K::555566DDABBEE[[]]  /!!K..2E2Ef2M2MM !- 0 0 5 5e < <#zz!!M*:*:*?*?*F*FGG'#$1%B#C#C#F#Fr#J#J#O#O#Q#Q&,t<<      M!!bCii"#F;::h''DDEFFEE[[]]  affkk&11MA !#E 2 2#zz!!G**//%*@*@AA'&,t<<      L  ::444455DDABBEE[[]] 	 	011S66;;v3F3FF !"6 7 7 < < > >#zz!!G**//%*@*@AA' !"C D D G G J J O O Q Q#$1%F#G#G#J#J2#N#N#S#S#U#U&,t<<     	 #%%))H%%b)CSyy

3"U>2277EE
UU+U%V%VWWii,,R0zz"`c"`"`$*"`"`\^"`"`aaTT*E%F%FGG$$))H%%b)C::7727788DLL&V!W!WXXEE#%%))H%%b)C::7727788DLL&Z![![\\Evr'   c                 ,     j          |d                               |d                   } |d                              d          } |d          }dt          j        d|                    d          z   |                                d          z   d	z   |                                z   d
z   }|| |d                                          dz    |d                                          z                       dd          ddd} |d                              d                                          }| d                     d d            g}	 d}	t          j
        |	|t          j                  }
|
r@|
                    d          }t          j        |          } fd|d 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.userInfo .usernameWrap az[a=cr:r`   rR   )idnamez/]z[/a]z	.userInfoz / z.ratingInfo
Pornhubr
   )r[   vod_directorr^   vod_play_fromvod_play_urlz#player script$rc   @@@@z/"mediaDefinitions":\s*(\[.*?\]),\s*"isVertical"c           	          g | ]>}|                     d           x|d          d                    d d            ?S )videoUrlheightr   r   r   )gete64).0mediar   r)   s     r   
<listcomp>z(Spider.detailContent.<locals>.<listcomp>   sh       $yy444XDDQ//C//)B)BDD  r'   rb   u   提取mediaDefinitions失败: #r   rA   )r   rC   rn   r   dumpsrp   replacerq   r   researchDOTALLgroupr   	Exceptionprintstrjoin)r   idsrE   vndtextpdtitlevod
js_contentplistpatternmatchjson_strudataer)   s   `             @r   detailContentzSpider.detailContent   sh   $CF$$zz#a&!!T-..33I>>011TZ$uzz&'9'995::<<PPR R RTXY[`[e[e[g[ghjpq # D--2244u<ttM?R?R?W?W?Y?YYbbcginoo&
 
 T*++..q116688
44Q//C//22445	=HGIgz29==E  ;;q>>
8,,    !&ss  
  	= 	= 	=;3q66;;<<<<<<<<	=!hhuooNs   A$G 
G6G11G6r   c                 x    |                      d| d|           }d|                      |d                    iS )Nz/video/search?search=ri   rA   z,#videoSearchResult .pcVideoListItem .phimagerB   )r   keyquickrt   rE   s        r   searchContentzSpider.searchContent   sF    zzA#AARAABBTT*X%Y%YZZ[[r'   c                     |                      |                              d          }d|d         v r|                     |d         d          |d<   t          |d                   |d         | j        dS )Nr   z.m3u8rc   m3u8r   )parser)   header)d64rl   ro   intr   )r   flagr|   vipFlagsr   s        r   playerContentzSpider.playerContent   sh    hhrll  ((c!ftzz#a&&'A'Ac!fSVSVt|LLLr'   c                     |                      |                    d                    }|                    d          dk    r|                     |          S |                     |          S )Nr)   rX   r   )r   r   m3ProxytsProxy)r   paramr)   s      r   
localProxyzSpider.localProxy   sZ    hhuyy''((99V&&<<$$$<<$$$r'   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   allow_redirectsutf-8Location)r   r   r~   r   z://z#EXThttp   r
   .rb   rO   r      zapplication/vnd.apple.mpegur)requestsr   r   r   r{   decodestriprl   rfindr   schemenetloc	enumeratecount
startswithro   r   )r   r)   ydatarE   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##'''-||C'8'81'<'<VV$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   r   r   r   r{   )r   r)   rE   s      r   r   zSpider.tsProxy   s5    |Ct|TXYYYT\.14<@@r'   c                     	 t          j        d| j        | j        d          }|j        d         d d         S # t          $ r*}t          dt          |                      Y d }~dS d }~ww xY w)Nzhttps://www.pornhub.comFr   r   rb   u   获取主页失败: )r   r   r   r   r   r   r   )r   responser   s      r   r   zSpider.gethost   s    	-|$=t|]a]i49; ; ;H#J/44 	- 	- 	-1Q11222,,,,,,	-s   69 
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
   )encoder   r   r   r   r   )r   rp   
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                                          p |d                                          dd	d
d           |S )Nrd   rR   rS   imgrT   z.bgShadeEffectz	.durationrW   rV   )rY   rX   )rZ   r[   r\   r^   r_   )rm   r9   rn   ro   rp   )r   rE   vlistrw   s       r   rD   zSpider.getlist  s     	 	ALL!C&&++f--AcFFKK00::aahhmmE&:&:;; q!1227799RQQ{^^=P=P=R=R#'88      r'   c                    	 | j                             | j         |           j        }t	          |                    d                    S # t          $ r*}t          dt          |                      Y d }~d S d }~ww xY w)Nr   u   请求失败: , )	r   r   r   rp   pqr   r   r   r   )r   pathr   r   s       r   rC   zSpider.getpq#  s    	|''49(<d(<(<==BHhoog../// 	 	 	-SVV--...44444	s   A	A 
B A;;B r   c                     |rCt          | j                  r/|                                  d|                     |           d| S |S )Nz&url=z&type=)lenr   getProxyUrlr   )r   rE   rX   s      r   ro   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.   r?   rG   ry   r   r   r   r   r   r   r   r   r   rD   rC   ro   r#   r'   r   r   r      s_       ' ' ' 'R          (- - -
T T Tl  @\ \ \ \M M M
% % %; ; ;&A A A- - -    
 
 
       r'   r   )r   r   sysbase64r   r   urllib.parser   r   pyqueryr   r   r   r   r9   base.spiderr   r#   r'   r   <module>r      s     				 



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