xxxx
This commit is contained in:
298
PY1/E佬通用视频.py
Normal file
298
PY1/E佬通用视频.py
Normal file
@@ -0,0 +1,298 @@
|
||||
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 {}
|
||||
Reference in New Issue
Block a user