
    nwh+'                     4   d dl Z d dlZd dlZd dlZd dlmZ d dlZ ej                  ej                  j                         ej                  j                  d       d dlmZ  G d de      Zedk(  r e       Zej#                          ej%                  dg      Zed	   r#ed	   d    Z ed
ej-                  dd              ej/                  ddd      Z ed eed	                 ej5                  ddi       Z edej-                  dd              yy)    N)BeautifulSoupz..)Spiderc                   z    e Zd Zd ZddZddZd Zd Zd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y)r   c                      y)Nu   永乐视频 selfs    ,   /storage/emulated/0/lz/py/sy/永乐视频.pygetNamezSpider.getName   s        c                     d| _         d| j                   d| _        t        j                         | _        d| j                  _        | j                  j                  j                  | j                         y )Nzhttps://www.ylys.tv/z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36)z
User-AgentRefererF)hostheadersrequestsSessionsessionverifyupdate)r	   extends     r
   initzSpider.init   sT    *	&dquqzqz{'')###DLL1r   c                     	 | j                   j                  ||d      }|j                  dk7  r|j                  nd|_        |S #  Y y xY w)NF)timeoutr   z
ISO-8859-1zUTF-8)r   getencoding)r	   urlr   responses       r
   fetchzSpider.fetch   sO    	||''WU'KH5=5F5F,5V 1 1\cHO	s   AA Ac                 &   t        g dd      D cg c]  \  }}t        |      |d c}}| j                         g d}| j                  | j                        }|r.|j
                  dk(  r| j                  |j                  d      |d<   |S c c}}w )N)u   电影u   剧集u   综艺u   动漫   )type_id	type_name)classfilterslist      r%   )	enumeratestr_get_filtersr   r   status_code_extract_videostext)r	   filteritresultrsps         r
   homeContentzSpider.homeContent$   s    FOPxz{F|}F|da#a&q9F|}((*

 jj#3??c)!11#((B?F6N ~s   Bc                    g t        |      dddd}t        |      dkD  r| j                   d| d| dn| j                   d| d}| j                  |      }|r-|j                  d	k(  r| j	                  |j
                        |d
<   |S )Nc   r'   i  )r%   page	pagecountlimittotalr    z	/vodtype/z/page//r&   r%   )intr   r   r+   r,   r-   )r	   tidpgr.   r   r1   r   r2   s           r
   categoryContentzSpider.categoryContent/   s    c"gBVZ[9<R19SEt15TYYKW`ad`eefJgjjo3??c)!11#((;F6Nr   c                 6   dg i}t         j                  j                  |      }t        |      dkD  r| j                   d| d| dn| j                   d| d}| j                  |      }|r-|j                  dk(  r| j                  |j                        |d<   |S )Nr%   r    z/vodsearch/z-------------/page/r:   z-------------/r&   )	urllibparsequoter;   r   r   r+   _extract_search_resultsr-   )r	   keyquickr=   r1   
search_keyr   r2   s           r
   searchContentzSpider.searchContent7   s    "\\'',
ORSUwYZ{;zl2EbTKcgclclbmmx  zD  yE  ES  aTjjo3??c)!99#((CF6Nr   c           	         dg i}|d   }| j                  | j                   d| d      }|r|j                  dk7  r|S |j                  }| j	                  ||      \  }}|rh|| j                  |      | j                  |      | j                  |      | j                  |      dj                  |      dj                  |      dg|d<   |S )Nr%   r   z/voddetail/r:   r&   z$$$)vod_idvod_namevod_picvod_contentvod_remarksvod_play_fromvod_play_url)
r   r   r+   r-   _extract_play_info_extract_title_extract_pic_extract_desc_extract_remarksjoin)r	   idsr1   vidr2   html	play_fromplay_urls           r
   detailContentzSpider.detailContent@   s    "!fjjDII;k#a89coo,Mxx"55dC@	8 //5,,T2#11$7#44T:!&I!6 %

8 4 F6N r   c                    dddd}d|vr|S | j                  | j                   d| d      }|r|j                  dk7  r|S t        j                  d|j
                  t        j                  t        j                  z        }|r=|j                  d      j                  d	d      j                  d
d      }d|d<   ||d<   |S | j                   d| d|d<   |S )Nr     )rA   playUrlr   -z/play/r:   r&   z(var player_aaaa=.*?"url":"([^"]+\.m3u8)"z\u002Fz\/r   rA   r   )
r   r   r+   researchr-   SIgroupreplace)r	   flagidvipFlagsr1   r2   real_url_matchreal_urls           r
   playerContentzSpider.playerContentV   s    B7b=MjjDII;fRD23coo,M#NPSPXPXZ\Z^Z^acaeaeZef%++A.66y#FNNuVYZHF7O$F5M   $yykt15F5Mr   c                     dddddddddd	dd
ddddddddgdgddddddddddddddddddddgdgddddddddddddd dd!d"dgdgdddddd#d$dd%d&dd'd(dd)d*dgdgd+S ),Nr#   u   类型u   全部r]   )nvu	   动作片6u	   喜剧片7u	   爱情片8u	   科幻片9u	   恐怖片11)rD   namevalueu	   国产剧13u	   港台剧14u   日剧15u   韩剧33u	   欧美剧16u   内地综艺27u   港台综艺28u   日本综艺29u   韩国综艺36u   国产动漫31u   日本动漫32u   欧美动漫42u   其他动漫43)1234r   r   s    r
   r*   zSpider._get_filtersh   s   !8R(#*Fk`cHd!,Kc.JR]dhLi?   "8R($*G{aeIfT*(,Fk`dHe?   "8R(T*JR`gkLl$40T2R?   "8R(T*JR`gkLl$40T2R?  
 	
r   c                    g }d}t        j                  ||t         j                  t         j                  z        D ]u  \  }}}}|j	                  |j                         |j                         |j                  d      r| j                  |z   n|j                         |j                         d       w |rt        |      |kD  r|d | S |S )Nzu<a href="/voddetail/(\d+)/".*?title="([^"]+)".*?<div class="module-item-note">([^<]+)</div>.*?data-original="([^"]+)"r:   rI   rJ   rK   rM   )	r`   findallrb   rc   appendstrip
startswithr   len)	r	   rX   r8   videospatternrW   titleremarkpics	            r
   r,   zSpider._extract_videos|   s     K')zz'4'M#CMM))+!KKM/2~~c/BDIIORRT%||~	  (N "'3v;+>vfu~JFJr   c           	      d   g }t        |d      }|j                  d      D ]  }|j                  d      }|s|j                  dd      }t	        j
                  d|      }|sC|j                  d      }|j                  d      }	|j                  d	      }
|
r$|
j                  d
      xs |
j                  d      nd}|j                  d      }|j                  ||	r|	j                  d      nd|j                  d      r| j                  |z   n||r|j                  d      ndd        |S )Nzhtml.parserz.module-card-itemza[href^="/voddetail/"]hrefr]   z/voddetail/(\d+)/r    z.module-card-item-title strongimgzdata-originalsrcz.module-item-noteT)r   r:   r   )r   select
select_oner   r`   ra   rd   r   get_textr   r   )r	   rX   r   soupitemlinkr   	vid_matchrW   
title_elemimg_elemr   	note_elems                r
   rC   zSpider._extract_search_results   s   T=1KK 34D??#;<D88FB'D		"6=I//!$C)IJJu-HLT8<<0GHLL4GZ\C(;<IMM?IJ//d/;r.1nnS.A499s?sAJy111=PR	 ! 5, r   c                 2   g g }}d}t        j                  ||t         j                  t         j                  z        D ]  }|d   xs |d   }||v r|j	                  |       | j                  |||      }t        j                  d| d| d|t         j                  t         j                  z        }	|	D 
cg c].  \  }
}|j                          d| d| d|
j                          0 }}
}|j	                  dj                  |              ||fS c c}}
w )	Nz<(?:div|a)[^>]*class="[^"]*module-tab-item[^"]*"[^>]*>(?:.*?<span>([^<]+)</span>.*?<small>(\d+)</small>|.*?<span>([^<]+)</span>.*?<small class="no">(\d+)</small>)</(?:div|a)>r      z-<a class="module-play-list-link" href="/play/r_   z)-(\d+)/"[^>]*>.*?<span>([^<]+)</span></a>$#)r`   r   rb   rc   r   _get_line_idr   rU   )r	   rX   rW   rY   rZ   line_patternmatch	line_nameline_id
ep_matchesep_numep_nameepss                r
   rP   zSpider._extract_play_info   sC    "8	 IZZdBDD244K@Ea,E!HII%Y'''c9=G'TUXTYYZ[bZc  dM  %N  PT  VX  VZ  VZ  ]_  ]a  ]a  Va  bJ`jk`j_VU\gmmo&auAgYa7GH`jCkOOCHHSM* A ("" ls   73Dc                     t        j                  d| dt        j                  |       d|t         j                  t         j                  z        }|r|j                  d      S dddddd	}|j                  |d      S )
Nz<a[^>]*href="/play/z-(\d+)-1/"[^>]*>.*?<span>z</span>r    r   r   r   r   )u
   全球3线u
   大陆0线u
   大陆3线u
   大陆5线u
   大陆6线)r`   ra   escaperb   rc   rd   r   )r	   rX   rW   r   line_id_matchline_id_maps         r
   r   zSpider._get_line_id   s    		%8=VWYW`W`ajWkVlls"tvz|~  }A  }A  DF  DH  DH  }H  I &&q))%(3^aqtuy#..r   c                     t        j                  d|t         j                  t         j                  z        }|r|j	                  d      j                         S dS )Nz2<meta property="og:title" content="([^"]+)-[^-]+$"r    r]   r`   ra   rb   rc   rd   r   )r	   rX   title_matchs      r
   rQ   zSpider._extract_title   sJ    ii UW[]_]a]adfdhdh]hi/:{  #))+BBr   c                     t        j                  d|t         j                  t         j                  z        }|r|j	                  d      j                         nd}|r |j                  d      r| j                  |z   S |S )Nz+<meta property="og:image" content="([^"]+)"r    r]   r:   )r`   ra   rb   rc   rd   r   r   r   )r	   rX   	pic_matchr   s       r
   rR   zSpider._extract_pic   sc    IILdTVTXTX[][_[_T_`	,5iooa &&(2"%#..*=tyy3F3Fr   c                     t        j                  d|t         j                  t         j                  z        }|r|j	                  d      j                         S dS )Nz1<meta property="og:description" content="([^"]+)"r    u   暂无简介r   )r	   rX   
desc_matchs      r
   rS   zSpider._extract_desc   sJ    YYSUY[][_[_bdbfbf[fg
.8z"((*LnLr   c                    t        j                  d|t         j                  t         j                  z        }|r|j	                  d      nd}t        j                  d|t         j                  t         j                  z        }|r|j	                  d      nd}t        j                  d|t         j                  t         j                  z        }|r!|j	                  d      j                  dd      nd	}| d
| d
| S )Nz3<a title="(\d+)" href="/vodshow/\d+-----------\1/">r    u   未知年份zN<a title="([^"]+)" href="/vodshow/\d+-%E5%A2%A8%E8%A5%BF%E5%93%A5----------/">u   未知产地zvod_class":"([^"]+)",r:   u   未知类型z | )r`   ra   rb   rc   rd   re   )r	   rX   
year_matchyear
area_matcharea
type_matchtype_strs           r
   rT   zSpider._extract_remarks   s    YYUW[]_]a]adfdhdh]hi
&0z"nYYprvxzx|x|  @B  @D  @D  yD  E
&0z"nYY6bddRTTkJ
<F:##A&..sC8Ns4&H:..r   N)r]   )   )r    )r   )__name__
__module____qualname__r   r   r   r3   r>   rG   r[   rk   r*   r,   rC   rP   r   rQ   rR   rS   rT   r   r   r
   r   r      s[    2	,$
(
K6#$/CG
M
/r   r   __main__86027r%   u   视频名称: rJ   u   未知u   仙逆Fr    u   搜索结果数量: r]   z	86027-5-1u   播放URL: r   )r`   sysurllib.parser@   r   bs4r   urllib3disable_warnings
exceptionsInsecureRequestWarningpathr   base.spiderr   r   spiderr   r[   detail_resultdetailprintr   rG   search_resultr   rk   play_resultr   r   r
   <module>r      s    
 
       ++BB C   C/V C/L zXF
KKM (('3MVv&q)vzz*h?@AB ((5!<M	 ]6%:!; <
=> &&r;;K	Kr23
45! r   