
    5h]F                         d dl Z e j                            d           d dlm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  G d de          ZdS )    Nz..)Spider)etreec                   |    e Zd Zd Zd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 Zd Zd Zd ZdS )r   c                     dS )Nu   香蕉视频 selfs    .   /storage/emulated/0/纯福利/PY1/九个区.pygetNamezSpider.getName   s    ~     c                     d| _         d| _        ddddd| j         d| _        |                     d	| j                     d S )
Nzhttps://618013.xyzzhttps://h5.xxoo168.orgzsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8zgzip, deflatez
keep-alive)z
User-AgentAcceptzAccept-LanguagezAccept-Encoding
ConnectionRefereru,   香蕉视频爬虫初始化完成，主站: )hostapi_hostheaderslog)r	   extends     r
   initzSpider.init   sZ    (	0 Pb8.&y
 
 	K	KKLLLLLr   c                 f    	 t          j        |          S #  |                     d           Y dS xY w)u(   将HTML内容转换为可查询的对象u   HTML解析失败N)r   HTMLr   )r	   contents     r
   htmlzSpider.html   s:    	:g&&&	HH'(((44s    0   c                     	 t          j        ||t           j                  }|r:t          |                                          |k    r|                    |          S n#  Y nxY wdS )u   正则表达式提取字符串r   )research
IGNORECASElengroupsgroup)r	   patternstringindexmatchs        r
   regStrzSpider.regStr'   sd    	Igvr}==E *U\\^^,,55{{5)))	Drs   AA A#c                     d S Nr   )r	   urls     r
   isVideoFormatzSpider.isVideoFormat1       r   c                     d S r*   r   r   s    r
   manualVideoCheckzSpider.manualVideoCheck4   r-   r   c                    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dddddddddd d!dd"d#dd$d%dd&d'dg}||d(<   	 |                      | j        | j        )          }|                     |j                  }|                     |d*+          }||d,<   nA# t          $ r4}|                     d-t          |                      g |d,<   Y d.}~nd.}~ww xY w|S )/u   获取首页内容和分类618013.xyz_1   全部视频type_id	type_name618013.xyz_22   制服诱惑618013.xyz_6   国产视频618013.xyz_8   清纯少女618013.xyz_9   辣妹大奶618013.xyz_10   女同专属618013.xyz_11   素人出演618013.xyz_12   角色扮演618013.xyz_20   人妻熟女618013.xyz_23   日韩剧情618013.xyz_21   经典伦理618013.xyz_7   成人动漫618013.xyz_14   精品二区618013.xyz_40   精品三区618013.xyz_53   动漫中字618013.xyz_52   日本无码618013.xyz_33   中文字幕618013.xyz_44   国产传媒618013.xyz_32   国产自拍classr      limitlistu   首页获取出错: N)	fetchr   r   r   text_get_videos	Exceptionr   str)r	   filterresultclassesrspdocvideoses           r
   homeContentzSpider.homeContent7   s    '^DD'nEE&^DD&^DD&^DD'nEE'nEE'nEE'nEE'nEE'nEE&^DD'nEE'nEE'nEE'nEE'nEE'nEE'nEE'
* "w	 **TY*==C))CH%%C%%c%44F#F6NN 	  	  	 HH4CFF44555F6NNNNNN	  s   AB/ /
C-9*C((C-c                     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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iS )+u   分类定义 - 兼容性方法rZ   r1   r2   r3   z618013.xyz_13u   香蕉精品r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r   r   s    r
   homeVideoContentzSpider.homeVideoContent[   s     *HH+.II+.II*HH*HH*HH+.II+.II+.II+.II+.II+.II*HH+.II+.II+.II+.II+.II+.II+.II)
 	
r   c                    	 |                     d          \  }}d| d| d}|r |dk    r|                    dd| d          }|                     d|            |                     || j                  }|                     |j                  }	|                     |	d	
          }
d}|	                    d          }|rM	 |d                             d          d         }|	                                rt          |          }n#  Y nxY w|
t          |          |d	|d	z  dS # t          $ r3}|                     dt          |                      dg icY d}~S d}~ww xY w)u   分类内容_https://z/index.php/vod/type/id/.html1z/page/u   访问分类URL: r[   r\   r]   r   z//div[@class="mypage"]//a./text()r   )r_   page	pagecountr^   totalu   分类内容获取出错: r_   N)splitreplacer   r`   r   r   ra   rb   xpathisdigitintrc   rd   )r	   tidpgre   r   domainr4   r+   rh   ri   rj   rw   page_elements	last_pagerk   s                  r
   categoryContentzSpider.categoryContentv   s   	 !iinnOFGJVJJGJJJC ?bCiikk'+=B+=+=+=>>HH...///**S$,*77C))CH%%C%%c%44F III&ABBM  -b 1 7 7
 C CA FI ((** 3$'	NN	D B&"R    	  	  	 HH:#a&&::;;;B<	 s7   CD( AD	 D( 	DD( (
E%2(E E% E%rs   c                    	 | j          dt          j                            |           d| }|                     d|            |                     || j                  }|r|j        dk    rdg iS |                     |j	                  }| 
                    |          }d|iS # t          $ r3}|                     dt          |                      dg icY d}~S d}~ww xY w)	u   搜索功能z/index.php/vod/search.html?wd=z&page=u   搜索URL: r[      r_   u   搜索出错: N)r   urllibparsequoter   r`   r   status_coder   ra   rb   rc   rd   )	r	   keyquickr   
search_urlrh   ri   rj   rk   s	            r
   searchContentzSpider.searchContent   s   	  IhhV\EWEWX[E\E\hhdfhhJHH/://000**Z*>>C $#/S00|#))CH%%C%%c**FF## 	  	  	 HH.c!ff..///B<	 s$   A0B& 32B& &
C#0(CC#C#c                    	 |d         }d|v r"|                     d          \  }}d| d| d}n| j         d| d}|                     d|            |                     || j                  }|                     |j                  }|                     ||          }|rd|gindg iS # t          $ r3}	|                     d	t          |	                      dg icY d
}	~	S d
}	~	ww xY w)u   详情页面r   rp   rq   z/index.php/vod/detail/id/rr   u   访问详情URL: r[   r_   u   详情获取出错: N)
ry   r   r   r`   r   r   ra   _get_detailrc   rd   )
r	   idsvidr   video_id
detail_urlrh   ri   
video_infork   s
             r
   detailContentzSpider.detailContent   s-   	 a&Cczz#&99S>> XXXXXX

 $	NNCNNN
HH555666**Z*>>C))CH%%C))#s33J-7IFZL))fb\I 	  	  	 HH4CFF44555B<	 s   B)B, ,
C)6(C$C)$C)c                 H   	 |                      d| d|            d|v r|                    d          \  }}n|}|                      d|            | j         d| }|                      d|            | j                                        }|                    | j         d| j        dd	           |                     ||
          }|r|j        dk    r|	                                }	|                      d|	            |	
                    d          dk    r+|	
                    di           
                    dd          }
n*|	
                    di           
                    dd          }
|
r4|
                    dd          }
|                      d|
            dd|
dS |                      d           n!|                      d|r|j        nd            d|v r!|                    d          \  }}d| d| }n| j         d| }|                      d|            dd|dS # t          $ rf}|                      dt          |                      d|v r!|                    d          \  }}d| d| }n| j         d| }dd|dcY d}~S d}~ww xY w) u0   播放链接 - 直接使用API获取视频地址u   获取播放链接: flag=z, id=rp   u
   视频ID: z/api/v2/vod/reqplay/u   请求API获取视频地址: /XMLHttpRequest)r   OriginzX-Requested-Withr[   r   u   API响应: retcode   datahttpurl_previewr   httpurlz?300u   从API获取到视频地址: r   )r   playUrlr+   u$   API响应中没有找到视频地址u   API请求失败，状态码: u	   无响应rq   z/html/kkyd.html?m=u   回退到播放页面: r   u   播放链接获取出错: N)r   ry   r   r   copyupdater   r`   r   jsongetrz   rc   rd   )r	   flagidvipFlagsrp   r   api_urlapi_headersapi_responser   	video_urlr   play_idplay_urlrk   s                  r
   playerContentzSpider.playerContent   sG   <	@HH@@@B@@AAA byy hhsmm88HH,(,,--- FFHFFGHH>W>>???,++--K"i???)$4        ::g{:CCL v 8C ? ?#((**-t--...88I&&!++ $ 4 4 8 89JB O OII $ 4 4 8 8B G GI E ) 1 1&" = =IHHHYHHIII%&2iHHHHHCDDDDtUa9r9Q9Qgrttuuu byy"$((3--IfIIII"i??2??HH9x99:::2h??? 	@ 	@ 	@HH:#a&&::;;;byy"$((3--IfIIII"i??2??2h????????	@s&   F(H1 +BH1 1
J!;AJJ!J!Nc                 |   	 g }|                     d          }|                     dt          |           d           |D ].}|                     |          }|r|                    |           /|r|r
|d|         n|S # t
          $ r1}|                     dt          |                      g cY d}~S d}~ww xY w)u-   获取影片列表 - 根据实际网站结构z//a[@class="vodbox"]u   找到 u    个vodbox元素Nu   获取影片列表出错: )r{   r   r!   _extract_videoappendrc   rd   )r	   ri   r^   rj   elementselemvideork   s           r
   rb   zSpider._get_videos   s    	Fyy!788HHH>s8}}>>>???  ) )++D11 )MM%(((%*AvA6&5&>>6A 	 	 	HH:#a&&::;;;IIIIII	s   A=B   
B;
&B60B;6B;c                    	 |                     d          d         }|                    d          r
| j        |z   }|                     d|          }|st	          t          |          dz            }|                     d          }|ss|                     d          }|s\|                     d          }|sE|                     d	          }|s.|                     d
          }|s|                     d           dS |d                                         }|                     |          }|                     d          }|s|                     d          }|r|d         nd}|r:|                    d          rd|z   }n|                    d          r
| j        |z   }d| ||dddS # t          $ r0}	|                     dt	          |	                      Y d}	~	dS d}	~	ww xY w)uQ   提取影片信息 - 修复标题乱码问题，正确读取km-script标签文本./@hrefr   r   m=(\d+)i@B z./p[@class="km-script"]/text()z'.//p[contains(@class, "script")]/text()z.//p/text()z.//h3/text()z.//h4/text()u'   未找到标题元素，跳过该视频Nz.//img/@data-originalz.//img/@srcr   z//zhttps:z618013.xyz_)vod_idvod_namevod_picvod_remarksvod_yearu   提取影片信息出错: )
r{   
startswithr   r(   rd   hashr   strip_decrypt_titlerc   )
r	   elementlinkr   
title_elemtitle_encryptedtitlepic_elempicrk   s
             r
   r   zSpider._extract_video
  s3   6	==++A.Ds## (y4' [[T22F 3T$ZZ'122 !'GHHJ ,$]]+TUU
! ,!(}!=!=J% ,%,]]>%B%B
) ,)0~)F)FJ#- , $)S T T T'+t(m1133O ''88E }}%<==H 8"==77!)1(1++rC  *>>$'' *"S.CC^^C(( *)c/C 100!!    	 	 	HH:#a&&::;;;44444	s   C9F+ =B-F+ +
G%5%G  G%c                 ,   	 g }|D ]:}t          |          }|dz  }t          |          }|                    |           ;d                    |          }|S # t          $ r1}|                     dt          |                      |cY d}~S d}~ww xY w)u*   解密标题 - 使用网站的解密算法   r   u   标题解密失败: N)ordchrr   joinrc   r   rd   )	r	   encrypted_textdecrypted_charschar
code_pointdecrypted_codedecrypted_chardecrypted_textrk   s	            r
   r   zSpider._decrypt_titleD  s    	" O& 7 7 YY
!+c!1!$^!4!4&&~6666  WW_55N!! 	" 	" 	"HH4CFF44555!!!!!!!	"s   AA 
B"&BBBc                 &   	 |                      |ddg          }|                      |ddg          }|r|                    d          r
| j        |z   }|                      |ddg          }|                      |dg          }|                      |d	g          }g }g }	|                    d
          }
|
rg }|
D ]}|                    d          }|                    d          d         }|rL|d                                         }|                     d|          }|r|                    | d|            |r=|                    d           |	                    d                    |                     |s'|                     d           |||dddd|||dd| dS |||dddd|||d                    |          d                    |	          dS # t          $ r0}|                     dt          |                      Y d}~dS d}~ww xY w)u<   获取详情信息 (优化版) - 修复播放源提取问题z//h1/text()z//title/text()z//div[@class="dyimg"]//img/@srcz//img[@class="poster"]/@srcr   z!//div[@class="yp_context"]/text()z$//div[@class="introduction"]//text()u=   //span[contains(text(),"主演")]/following-sibling::*/text()u=   //span[contains(text(),"导演")]/following-sibling::*/text()z//a[contains(@href, "m=")]ru   r   r   r   $u   默认播放源#u6   未找到播放源元素，无法定位播放源列表r   u   第1集$)r   r   r   r5   r   vod_arear   	vod_actorvod_directorvod_contentvod_play_fromvod_play_urlz$$$u   获取详情出错: N)	_get_textr   r   r{   r   r(   r   r   r   rc   rd   )r	   ri   r   r   r   descactordirector	play_from	play_urls
play_linksepisodesr   ep_titleep_hrefr   rk   s                    r
   r   zSpider._get_detailY  s   ?	NN38H(IJJE..'HJg&hiiC &s~~c** &i#o>>#(KMs'tuuDNN3)h(ijjE~~c,k+lmmHII #?@@J 9& E ED#zz*55H"jj33A6G E#+A;#4#4#6#6"&++j'"B"B" E$OOx,C,C',C,CDDD 9$$%6777$$SXXh%7%7888 QRRR " %"!# " "#%!&$,#'%6$4s$4$4    !!" (#!&I!6!6 %

9 5 5    	 	 	HH4CFF4455544444	s   FG !4G 
H %HHc                     |D ]J}|                     |          }|D ]0}|r,|                                r|                                c c S 1KdS )u   通用文本提取r   )r{   r   )r	   ri   	selectorsselectortextsra   s         r
   r   zSpider._get_text  so    ! 	( 	(HIIh''E ( ( (DJJLL (::<<'''''( rr   )r   )r   )rs   r*   )__name__
__module____qualname__r   r   r   r(   r,   r/   rl   rn   r   r   r   r   rb   r   r   r   r   r   r   r
   r   r      s6         M M M M         " " "H
 
 
6        D            $>@ >@ >@D   8 8 8t" " "*A A AF    r   r   )syspathr   base.spiderr   r   timeurllib.parser   r   requestslxmlr   r   r   r
   <module>r      s    


                 				       V V V V VV V V V V Vr   