
    %g`)                         d dl Z d dlZd dlmZm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)PyQuery)Sessionz..)Spiderc                       e Zd Zd8dZd Zd Zd Zd Zi 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&d'd(d)iZd* Z	d+ Z
d, Zd- Zd9d.Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd8d5Zd6 Zd7S ):r    c                     |                                  | _        | j         d| j        d<   t                      | _        | j        j                            | j                   d S )N/referer)gethosthostheadersr   sessionupdate)selfextends     (   /storage/emulated/0/纯福利/PY1/Xhm.pyinitzSpider.init   sP    LLNN	%)Y///Yyy##DL111    c                     d S N r   s    r   getNamezSpider.getName       r   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   
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36Acceptztext/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.7	sec-ch-uaA"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"sec-ch-ua-mobile?0zsec-ch-ua-full-versionz"133.0.6943.98"zsec-ch-ua-archz"x86"sec-ch-ua-platform	"Windows"zsec-ch-ua-platform-versionz"19.0.0"zsec-ch-ua-modelz""zsec-ch-ua-full-version-listz["Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"dnt1zupgrade-insecure-requestssec-fetch-sitenonesec-fetch-modenavigatezsec-fetch-userz?1sec-fetch-destdocumentaccept-languagezh-CN,zh;q=0.9,en;q=0.8priorityzu=0, ic                     i }dddddddd}g }i }|D ]:}|                     |||         d	           |d
k    rddd
ddgdg|||         <   ;||d<   ||d<   |S )N/4kztwo_click_/categories/chinese/newest/best	/channels/categories
/pornstars)4Ku   国产u   最新u   最佳u   频道u   类别u   明星)	type_nametype_idr>   typeu   类型)nv)keynamevalueclassfilters)append)r   filterresult
cateManualclassesrH   ks          r   homeContentzSpider.homeContent6   s    5!#"
 

  	o 	oANN%a=     4xxvX\`ejWkWkVl0m0m/n
1.!w#yr   c                 j    |                                  }d|                      |d                    iS )Nlist&.thumb-list--sidebar .thumb-list__itemgetpqgetlist)r   datas     r   homeVideoContentzSpider.homeVideoContentM   s1    zz||TT*R%S%STTUUr   c                    g }i }||d<   d|d<   d|d<   d|d<   |dv sd	|v rod	|v r|                     d
          d         }|                     | |                    dd           d|           }|                      |d                    }n|dk    r|                     | d|           }|                     |          }|d         D ]}	|                    d	|	                    d          z   |	                    d          |	                    d          d|	                    d           dd|	d                             d           dddd           n$|dk    r||d<   |                     |          }|                     |          | _        | j        d          d!         d"         d#         D ]I}	|                    d$|	                    d%          z   |	                    d&          dddddd'           Jn|d(k    r|                     | d|           }|                     |          }
|
d)         d*         d+         D ]p}	|                    d	|	                    d,          z   |	                    d&          |	                    d-          |	                    d.          ddddd/           qnd0|v r||d<   |                     d
          d         }| j        d          d!         d"         d#         D ]}	|	                    d%          |k    re|	d1         D ]\}|                    d	|                    d2          z   |                    d&          |                    d3          ddddd'           ]||d4<   |S )5Npagei'  	pagecountZ   limiti?B total)r8   r9   r:   
two_click_click_rA   r	   r   rR   r;   channels
channelURLchannelNamesiteLogoURLzvideos:
videoCountfolderzsubscribers:subscriptionModelsubscribersHzG?rectratiorA   )vod_idvod_namevod_picvod_yearvod_tagvod_remarksstyler<   
layoutPagestorepopular
assignable
one_click_idrE   )rm   rn   ro   rq   rs   r=   pagesPornstarsComponentpornstarListProps	pornstarspageURLimageThumbUrltranslatedCountryName)rm   rn   ro   rr   rq   rs   	one_clickitemsr   thumbrQ   )splitrT   getrU   	getjsdatarI   cdata)r   tidpgrJ   r   vdatarK   rV   jsdataipdatajs               r   categoryContentzSpider.categoryContentQ   s   v"{w w---1D1Ds""#))H*=*=b*AC::Bfjj&;&;BBbBBCCDLL&N!O!OPPEEK::mmrmm,,D^^D))FJ' 	 	+aeeL.A.AA !m 4 4 uu]33 ?!%%*=*= ? ?'#]!4G2H2L2L]2[2[#]#]'+V<<     	 M!!"$F;::c??D--DJZ-g6yA,O  *QUU4[[8 !f!''+V<<      L  ::mmrmm,,DNN4((E456IJ;W  +aeeI.>.>> !f uu_55#$55)@#A#A''+V<<      C"$F;))H%%b)CZ-g6yA,O 	 	55;;#%%wZ  &3aeeEll&B()f'(uuW~~'//3V%D%D& &     vr   c           	         |                      |d                   }|                     |          } |d                              d          } |d          } |d                              d          } |d                              d                                          }d}|r&d	t          j        d
|z   |d          z   dz   |z   dz   }|| |d                                          ddd}		 g }
|d         d         }|                    d          }d }|r|                                D ]\  }}t          |t                    r|D ]}|                     d d|                    d          p|                    d                     }|
                    |                    d          p|                    d           d|            |
                    |           |                    d          rk|d                                         D ]P\  }}|                    d          x}r4|                     d d|           }|
                    | d|            Qn\# t          $ rO}| d|                     d d|d                     g}
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#video-tags-list-containerahrefzspan[class*="body-bold-"]r	   z[a=cr:r^   )ry   rE   z/]z[/a]z.rb-new__infoXhamster)rn   vod_directorrr   vod_play_fromvod_play_urlxplayerSettingssourcesstandardc                     |                      d          d         }d                    t          t          j        |                    }|rt          |          nd}| |fS )N$r   r	   )r   joinrJ   strisdigitint)r   qualitynumbers      r   custom_sort_keyz-Spider.detailContent.<locals>.custom_sort_key   sT    ))C..+W!=!=>>(.5VAw''r   @@@@r   fallbacklabelr   r   )rD   hls   u   获取视频信息失败: #r   rQ   )rT   r   attreqtextjsondumpsr   r   
isinstancerQ   e64rI   sort	Exceptionprintr   r   )r   idsrV   djsvndtextr   titlepdtitlevodplistdfr   rD   rF   infory   format_typer   encodedes                         r   detailContentzSpider.detailContent   sP   zz#a&!!nnT""T-..33I>>122uSzzv&&12255a88==?? 	p<$3FPU,V,V!W!WWZ^^affiooG#4005577'
 
	9E%&y1Aj!!A( ( (  ]"#'')) ] ]JC!%.. ]$) ] ]D!%Q*]*]DHHUOO4[txxPZG[G[*]*]!^!^B!LLDHHW,=,=,T)ATAT)[)[WY)[)[\\\\JJ?J+++uuU|| A)*5)9)9 A A%K"hhuoo-s A"&((a??S??";";%?%?g%?%?@@@ 	9 	9 	9;;TXX&8&8A&8&899;;<E7s1vv7788888888	9 "hhuooNs   6E8I/ /
K9AKKc                 z    |                      d| d|           }|                      |d                    |dS )Nz/search/z?page=rR   )rQ   rY   rS   )r   rD   quickr   rV   s        r   searchContentzSpider.searchContent   sJ    zz4S444455TT*R%S%STT^`aaar   c                     ddddddd| j         ddd	| j          d
ddd}|                     |                              d          }t          |d                   |d         |dS )NzxMozilla/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-cacher+   r'   r-   r)   z
cross-sitecorsemptyr   r5   zu=1, i)r$   pragmazcache-controlr*   r&   r,   r(   originr.   r0   r2   r   r4   r6   r   r   r   )parser   header)r   d64r   r   )r   flagry   vipFlagsr   r   s         r   playerContentzSpider.playerContent   s     U '"-\ $i*$%)8 
 
  hhrll  ((SVSVwGGGr   c                     d S r   r   )r   params     r   
localProxyzSpider.localProxy   r   r   c                     	 |                      d| j        d          }|j        d         S # t          $ r*}t          dt	          |                      Y d }~dS d }~ww xY w)Nzhttps://xhamster.comF)r   allow_redirectsLocationu   获取主页失败: zhttps://zn.xhamster.com)fetchr   r   r   r   )r   responser   s      r   r   zSpider.gethost   s~    	-zz"8$,`ezffH#J// 	- 	- 	-1Q11222,,,,,,	-s   ), 
A AA 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   r   
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 )Nz	.role-popr   z.video-thumb-info az.role-pop imgsrcz$.video-thumb-info .video-thumb-views r   z).role-pop div[data-role="video-duration"]ri   rj   rk   )rm   rn   ro   rp   rr   rs   )r   rI   r   r   r   )r   rV   vlistr   s       r   rU   zSpider.getlist   s     	 	ALL!K..--f55A34499;;1_--22599ADEEJJLLRRSVWWXYZ q!LMMRRTT#'88      r   c                 P   |                     d          rdn| j        }| j                            | |           j        }	 t          |          S # t          $ rI}t          t          |                      t          |	                    d                    cY d }~S d }~ww xY w)Nhttpr	   r   )

startswithr   r   r   r   pqr   r   r   r   )r   pathhr   r   s        r   rT   zSpider.getpq  s    //&))8BBty<##qL$LL116	0h<< 	0 	0 	0SVV+hoog..////////	0s   A 
B%>B B% B%c                      |d                                           }t          j        |                    d          d         d d                   }|S )Nzscript[id='initials-script']z	initials=r`   )r   r   loadsr   )r   rV   vhtmljsts       r   r   zSpider.getjsdata
  sL    34499;;j[11"5crc:;;
r   N)r	   )r-   )__name__
__module____qualname__r   r   r   r!   r#   r   rO   rW   r   r   r   r   r   r   r   r   rU   rT   r   r   r   r   r   r      s,                    H  \ 	X 	D	
 	!"3 	' 	k 	%j 	4 	&  (E 	s 	$S 	& 	* 	$  	*!" 	4#$ 	H% G*  .V V V> > >@, , ,\b b b bH H H(  - - -      0 0 0 0    r   r   )r   sysbase64r   r   pyqueryr   r   requestsr   r   rI   base.spiderr   r   r   r   <module>r      s     



 ' ' ' ' ' ' ' ' ! ! ! ! ! !                A A A A AV A A A A Ar   