You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ru/c/PY1/E佬通用视频.py

298 lines
10 KiB

import re
import sys
import urllib.parse
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def getName(self):
return "美人吹箫"
def init(self, extend):
pass
def homeContent(self, filter):
result = {}
classes = []
try:
rsp = self.fetch("https://www.mrcx2.yachts/cn/home/web/")
if rsp and rsp.text:
doc = pq(rsp.text)
items = doc('.stui-header__menu li a')
for item in items.items():
name = item.text()
href = item.attr('href')
if name and href and name != "首页":
match = re.search(r'/type/id/(\d+)\.html', href)
if match:
classes.append({
'type_name': name,
'type_id': match.group(1)
})
if not classes:
items = doc('.dropdown.type li a')
for item in items.items():
name = item.text()
href = item.attr('href')
if name and href and name != "首页":
match = re.search(r'/type/id/(\d+)\.html', href)
if match:
classes.append({
'type_name': name,
'type_id': match.group(1)
})
seen = set()
unique_classes = []
for cls in classes:
if cls['type_id'] not in seen:
seen.add(cls['type_id'])
unique_classes.append(cls)
classes = unique_classes
except Exception as e:
print(f"homeContent error: {e}")
result['class'] = classes
return result
def homeVideoContent(self):
result = {}
try:
videos = []
url = "https://www.mrcx2.yachts/cn/home/web/"
rsp = self.fetch(url)
if rsp and rsp.text:
doc = pq(rsp.text)
items = doc('.stui-vodlist li.index')
for item in items.items():
a = item.find('.stui-vodlist__thumb')
href = a.attr('href')
title = a.attr('title') or item.find('.title a').attr('title')
img = a.attr('data-original') or a.attr('style')
if img and 'background-image:' in img:
match = re.search(r'url\(["\']?(.*?)["\']?\)', img)
if match:
img = match.group(1)
if not title or not href:
continue
play_count = item.find('.text').text() or '播放0次'
score = item.find('.score').text() or '0.0 分'
videos.append({
'vod_id': href,
'vod_name': title,
'vod_pic': img,
'vod_remarks': f"{score} | {play_count}"
})
result['list'] = videos
except Exception as e:
print(f"homeVideoContent error: {e}")
return result
def categoryContent(self, tid, pg, filter, extend):
result = {}
videos = []
try:
url = f"https://www.mrcx2.yachts/cn/home/web/index.php/vod/type/id/{tid}/page/{pg}.html"
rsp = self.fetch(url)
if rsp and rsp.text:
doc = pq(rsp.text)
items = doc('.stui-vodlist li')
for item in items.items():
a = item.find('.stui-vodlist__thumb')
href = a.attr('href')
title = a.attr('title') or item.find('.title a').attr('title')
img = a.attr('data-original') or a.attr('style')
if img and 'background-image:' in img:
match = re.search(r'url\(["\']?(.*?)["\']?\)', img)
if match:
img = match.group(1)
if not title or not href:
continue
play_count = item.find('.text').text() or '播放0次'
score = item.find('.score').text() or '0.0 分'
videos.append({
'vod_id': href,
'vod_name': title,
'vod_pic': img,
'vod_remarks': f"{score} | {play_count}"
})
except Exception as e:
print(f"categoryContent error: {e}")
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, array):
result = {}
if not array or not array[0]:
return result
try:
aid = array[0]
if aid.startswith('/'):
play_url = "https://www.mrcx2.yachts" + aid
else:
play_url = "https://www.mrcx2.yachts/cn/home/web/" + aid
rsp = self.fetch(play_url)
if not rsp or not rsp.text:
return result
html = rsp.text
doc = pq(html)
vod = {
'vod_id': aid,
'vod_name': doc('title').text() or '',
'vod_pic': '',
'vod_remarks': '',
'vod_content': '',
'vod_play_from': 'E佬通用视频',
'vod_play_url': ''
}
img = doc('.stui-vodlist__thumb').attr('data-original') or doc('.stui-vodlist__thumb').attr('style')
if img and 'background-image:' in img:
match = re.search(r'url\(["\']?(.*?)["\']?\)', img)
if match:
vod['vod_pic'] = match.group(1)
if not vod['vod_pic']:
img = doc('img').filter(lambda i, this: pq(this).attr('src') and 'cover' in pq(this).attr('src').lower()).attr('src')
if img:
vod['vod_pic'] = img
description = doc('.stui-vodlist__detail .text').text()
if description:
vod['vod_remarks'] = description
content = doc('.content').text() or doc('.detail').text() or doc('.stui-content__detail').text()
if content:
vod['vod_content'] = content
vod['vod_play_url'] = f'正片${play_url}'
result['list'] = [vod]
except Exception as e:
print(f"detailContent error: {e}")
return result
def searchContent(self, key, quick, page='1'):
result = {}
videos = []
try:
if not key:
return result
url = f"https://www.mrcx2.yachts/cn/home/web/index.php/vod/search/wd/{urllib.parse.quote(key)}/page/{page}.html"
rsp = self.fetch(url)
if rsp and rsp.text:
doc = pq(rsp.text)
items = doc('.stui-vodlist li')
for item in items.items():
a = item.find('.stui-vodlist__thumb')
href = a.attr('href')
title = a.attr('title') or item.find('.title a').attr('title')
img = a.attr('data-original') or a.attr('style')
if img and 'background-image:' in img:
match = re.search(r'url\(["\']?(.*?)["\']?\)', img)
if match:
img = match.group(1)
if not title or not href:
continue
play_count = item.find('.text').text() or '播放0次'
score = item.find('.score').text() or '0.0 分'
videos.append({
'vod_id': href,
'vod_name': title,
'vod_pic': img,
'vod_remarks': f"{score} | {play_count}"
})
except Exception as e:
print(f"searchContent error: {e}")
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
try:
if not id:
return result
if id.startswith('http'):
play_url = id
else:
if id.startswith('/'):
play_url = "https://www.mrcx2.yachts" + id
else:
play_url = "https://www.mrcx2.yachts/cn/home/web/" + id
result["parse"] = 1
result["playUrl"] = ''
result["url"] = play_url
result["header"] = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': 'https://www.mrcx2.yachts/'
}
except Exception as e:
print(f"playerContent error: {e}")
return result
def isVideoFormat(self, url):
return False
def manualVideoCheck(self):
return False
def localProxy(self, param):
return {}