
    Th!                         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ddZd Zd Zd Zd Z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 ZddZd ZdS )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/Xhamster.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   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.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.7zA"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"z["Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"zzh-CN,zh;q=0.9,en;q=0.8)
User-AgentAcceptz	sec-ch-uazsec-ch-ua-full-version-listzaccept-languagec                     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classesr7   ks          r   homeContentzSpider.homeContent)   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.homeVideoContent@   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)r'   r(   r)   
two_click_click_r0   r	   r   rA   r*   channels
channelURLchannelNamesiteLogoURLzvideos:
videoCountfolderzsubscribers:subscriptionModelsubscribersHzG?rectratior0   )vod_idvod_namevod_picvod_yearvod_tagvod_remarksstyler+   
layoutPagestorepopular
assignable
one_click_idr4   )r\   r]   r^   r`   rb   r,   pagesPornstarsComponentpornstarListProps	pornstarspageURLimageThumbUrltranslatedCountryName)r\   r]   r^   ra   r`   rb   	one_clickitemsr   thumbr@   )splitrC   getrD   	getjsdatar8   cdata)r   tidpgr9   r   vdatar:   rE   jsdataipdatajs               r   categoryContentzSpider.categoryContentD   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          }|rd| }nd|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iS )Nr   z3link[rel="preload"][as="fetch"][crossorigin="true"]hrefu   多音画$666_u   嗅探$zmeta[property="og:title"]contentz#video-tags-list-containerazspan[class*="body-bold-"]r	   z[a=cr:rM   )rh   r4   z/]z[/a]z.rb-new__infou   老僧酿酒)r]   vod_directorra   vod_play_fromvod_play_urlr@   )rC   attreqtextjsondumps)r   idsrE   linkggggxvndtextr   titlepdtitlevods              r   detailContentzSpider.detailContent   sP   zz#a&!!tIJJOOPVWW 	'+T++EE&c!f&&E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+!
 
 r   1c                 z    |                      d| d|           }|                      |d                    |dS )Nz/search/z?page=rA   )r@   rH   rB   )r   r3   quickrw   rE   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| j         | j          dd}|                    d          rd|dd          }}|||dS )	N   zxMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36r   )r$   originr   666_r      )parser   header)r   
startswith)r   flagrh   vipFlagspr   r   s          r   playerContentzSpider.playerContent   sd    # Ui)
 

 ==   	BqrrFcA3':::r   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   	Exceptionprintstr)r   responsees      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   e64z
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   d64z
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"]rX   rY   rZ   )r\   r]   r^   r_   ra   rb   )rp   r8   r   r   rr   )r   rE   vlistrz   s       r   rD   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                     |                     d          rdn| j        }| j                            | |           }t	          |j                  S )Nhttpr	   )r   r   r   rs   pqr   )r   pathhr   s       r   rC   zSpider.getpq   sL    //&))8BBty<##qL$LL11("###r   c                      |d                                           }t          j        |                    d          d         d d                   }|S )Nzscript[id='initials-script']z	initials=rO   )r   r   loadsrr   )r   rE   vhtmljsts       r   rt   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   r>   rF   r}   r   r   r   r   r   r   r   rD   rC   rt   r   r   r   r   r      s]                   H \X (E4 G  .V V V> > >@  .b b b b	; 	; 	;  - - -      $ $ $ $    r   r   )r   sysbase64r   r   pyqueryr   r   requestsr   r   r8   base.spiderr   r   r   r   <module>r      s     



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