U
    Øi^,                     @   sD   d dl Z d dlZd dlZejd d dlmZ G dd deZdS )    Nz..)Spiderc                   @   s   e Zd Zdd Zd*ddZdd Zdd	 Zd
d ZdZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd+ddZd d! Zd"d# Zd,d&d'Zd(d) ZdS )-r   c                 C   s   dS )Nu   樱花动漫 selfr   r   ,   /storage/emulated/0/lz/py/sy/樱花动漫.pygetName   s    zSpider.getName c                 C   s   d S Nr   )r   extendr   r   r   init   s    zSpider.initc                 C   s   dS NFr   )r   urlr   r   r   isVideoFormat   s    zSpider.isVideoFormatc                 C   s   dS r   r   r   r   r   r   manualVideoCheck   s    zSpider.manualVideoCheckc                 C   s   d S r	   r   r   r   r   r   destroy   s    zSpider.destroyzhttps://www.dmvvv.comc                 C   s
   dddS )NzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zhttps://www.dmvvv.com/
User-AgentRefererr   r   r   r   r   
getHeaders   s    zSpider.getHeadersc                 C   s   dd l }dd l}ddlm}m} ||}||jdd}|jrJ|d |j }| }|jj	|j
d|d}	|	jd||  d	 |	 }
|
 jd
dd}|	  |S )Nr   )urlparsequotez/:@!$&'()*+,;=)safe?   )timeoutcontextGET)headerszutf-8ignore)errors)http.clientsslurllib.parser   r   pathquerycreate_default_contextclientHTTPSConnectionnetlocrequestr   getresponsereaddecodeclose)r   r   httpr!   r   r   parsedr#   ctxconnrespdatar   r   r   _get$   s    zSpider._getc                 C   s   t |tr~t|dkr~|d }t |tr|drz$t||dsHdnd d }W q tk
rz   |	d
d}Y qX nFt |trzt|d }W q tk
r   |d}Y qX nt|}|S )u6   兼容 spider_runner 传入未解析的 JSON 字符串r   []r   z["'z"']z[]"')
isinstancelistlenstr
startswith_jsonloadsendswith	Exceptionlstriprstripstrip)r   idsvidr   r   r   	_parse_id4   s    $
zSpider._parse_idc                 C   s0   t dt | d |}|r,|d S dS )N<span>u   ：</span><em>([^<]+)</em>   r   researchescapegrouprB   r   htmllabelmr   r   r   _li_emF   s    zSpider._li_emc                 C   s0   t dt | d |}|r,|d S dS )NrF   u   ：</span>([^<]+)rG   r   rH   rM   r   r   r   	_li_plainJ   s    zSpider._li_plainc                 C   sJ   g }t d|t j}|D ],\}}}}||| | | d q|S )Nzd<li>\s*<a href="(/detail/\d+/)"[^>]*title="([^"]+)"[^>]*>.*?data-original="([^"]+)".*?<p>([^<]*)</p>vod_idvod_namevod_picvod_remarks)rI   findallDOTALLappendrB   )r   rN   videositemshreftitlecoverremarksr   r   r   _parse_home_listN   s     
zSpider._parse_home_listc                 C   s.   ddddddddddd	dg}|i d
S )NZguomanu   国产动漫)type_id	type_nameZrimanu   日本动漫Zomanu   欧美动漫Zdmfilmu   动漫电影)classfiltersr   )r   filterclassesr   r   r   homeContent_   s    zSpider.homeContentc              
   C   s   z\|  | jd }| |}t }g }|D ](}|d |kr*||d  || q*d|iW S  tk
r } zdg i W Y S d }~X Y nX d S )N/rT   r8   )r4   BASE_URLra   setaddrZ   r?   )r   rN   r[   seenuniquever   r   r   homeVideoContenti   s    

zSpider.homeVideoContentNc                 C   s|   |r4t dt | d |}|r4tdd |D S t d|}|rVtdd |D S t d|}|rxtdd |D S d	S )
u$   解析分页区域，提取总页数/type/z/(\d+)/c                 s   s   | ]}t |V  qd S r	   int.0xr   r   r   	<genexpr>}   s     z+Spider._parse_page_count.<locals>.<genexpr>z/type/[^/]+/(\d+)/c                 s   s   | ]}t |V  qd S r	   rs   ru   r   r   r   rx      s     z[?&]page(?:no)?=(\d+)c                 s   s   | ]}t |V  qd S r	   rs   ru   r   r   r   rx      s     N)rI   rX   rK   max)r   rN   tidrP   m2Zm3r   r   r   _parse_page_countx   s    zSpider._parse_page_countc           
   
   C   s   z|rt |nd}|dkr.| jd | d }n| jd | d t| d }| |}| |}| ||}|d krt|dkr|d n|}|||d|d dW S  tk
r }	 zdg i W Y S d }	~	X Y nX d S )NrG   rr   ri   $   r8   page	pagecountlimittotalr8   )rt   rj   r:   r4   ra   r|   r9   r?   )
r   rz   pgrf   r
   r   rN   r[   max_pgrp   r   r   r   categoryContent   s$    

zSpider.categoryContentc                 C   s  |  |}z| | j| }d}td|tj}|rD|d }|sptd|}|rp|ddd  }d}td|}|r|d}| 	|d}	| 
|d	}
| 
|d
}| 
|d}| 
|d}d}td|tj}|rtdd|d }td|}td|tj}g }g }t|D ]r\}}|t|k rH||  ndt|d  }td|}|snq&dd |D }|| |d| q&||||
||||	|d|d|d}d|giW S  tk
r } zdg i W Y S d }~X Y nX d S )Nr   z'<div class="detail">.*?<h2>([^<]+)</h2>rG   z<title>([^<]+)-r   z6<div class="cover">\s*<img[^>]+data-original="([^"]+)"u   状态u   年份u   地区u   类型u   主演z2class="blurb"[^>]*>.*?<span>[^<]+</span>(.*?)</li>z<[^>]+>z/<i class="iconfont icon-shipin"></i>([^<]+)</a>z0<div class="row"[^>]*>\s*<ul>(.*?)</ul>\s*</div>u   线路z(<a href="(/play/[^"]+)"[^>]*>([^<]+)</a>c                 S   s    g | ]\}}|  d  | qS )$)rB   )rv   r]   epr   r   r   
<listcomp>   s     z(Spider.detailContent.<locals>.<listcomp>#z$$$)rT   rU   rV   vod_yearZvod_areaZvod_typeZ	vod_actorrW   vod_contentvod_play_fromvod_play_urlr8   )rE   r4   rj   rI   rJ   rY   rL   rB   splitrQ   rR   subrX   	enumerater9   r:   rZ   joinr?   )r   rC   rD   rN   r^   tt2r_   cr`   yearZarearc   ZactordescdZ	tab_namesZ
row_blocksZsources_fromZsources_urliblockZtab_namelinksZepisodesvodrp   r   r   r   detailContent   sf    

*
zSpider.detailContentFrG   c              
   C   s  zddl m} ||}|r$t|nd}|dkr@| jd | }n| jd | d t| }| |}g }td|tj}	|	D ]}
t	d|
}t	d|
}t	d	|
}t	d
|
}|r||sq||
|d|d |r|d nd|r|d ndd q|t	d|}|r2t|d}|d d }n>td|}|rVtdd |D nt|dkrl|d n|}|||d|d dW S  tk
r } zdg i W Y S d }~X Y nX d S )Nr   )r   rG   z/search/?wd=z&pageno=z<li>\s*<a class="cover".*?</li>z&<a class="cover" href="(/detail/\d+/)"ztitle="([^"]+)"zdata-original="([^"]+)"u/   <div class="item"><span>状态：</span>([^<]*)r   rS   u   找到\s*<em>(\d+)</em>      zpageno=(\d+)c                 s   s   | ]}t |V  qd S r	   rs   ru   r   r   r   rx      s     z'Spider.searchContent.<locals>.<genexpr>r~   r8   )r"   r   rt   rj   r:   r4   rI   rX   rY   rJ   rZ   rL   rB   ry   r9   r?   )r   keywordquickr   r   kwr   rN   r[   ZlisZliZhref_mZtitle_mZcover_mZ	remarks_mZtotal_mZtotal_countr   Zpnosrp   r   r   r   searchContent   sJ    

2zSpider.searchContentc           	   
   C   s   z| dr|n| j| }| |}td|}|r\d|d|  d | jd ddW S td	|}|rd|d|  dW S d||  dW S  tk
r } zd||  d W Y S d }~X Y nX d S )
Nr.   zurl:\s*'(https?://[^']+)'r   rG   r   ri   r   )parser   headerz+(https?://[^\s\'"]+\.m3u8(?:\?[^\s\'">]*)?))r;   rj   r4   rI   rJ   rL   r   r?   )	r   flagidvipFlagsr   rN   rP   r{   rp   r   r   r   playerContent  s"    

	zSpider.playerContent)r   )N)FrG   )__name__
__module____qualname__r   r   r   r   r   rj   r   r4   rE   rQ   rR   ra   rh   rq   r|   r   r   r   r   r   r   r   r   r   	   s&   


A
.r   )rI   sysjsonr<   r#   rZ   base.spiderr   r   r   r   r   <module>   s
   