box/02/py/py_dm.py
2025-02-05 22:03:12 +08:00

261 lines
12 KiB
Python

# coding=utf-8
# !/usr/bin/python
import sys
import requests
from lxml import etree
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def getName(self):
return "dm84"
def init(self, extend):
self.home_url = 'https://dmbus.cc'
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}
def getDependence(self):
return []
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeContent(self, filter):
return {
'class': [{'type_id': '1', 'type_name': '国产动漫'},
{'type_id': '2', 'type_name': '日本动漫'},
{'type_id': '3', 'type_name': '欧美动漫'},
{'type_id': '4', 'type_name': '电影'}],
'filters': {
'1': [{'key': 'type',
'name': '类型',
'value': [{'n': '全部', 'v': ''},
{'n': '奇幻', 'v': '奇幻'},
{'n': '战斗', 'v': '战斗'},
{'n': '玄幻', 'v': '玄幻'},
{'n': '穿越', 'v': '穿越'},
{'n': '科幻', 'v': '科幻'},
{'n': '武侠', 'v': '武侠'},
{'n': '热血', 'v': '热血'},
{'n': '耽美', 'v': '耽美'},
{'n': '搞笑', 'v': '搞笑'},
{'n': '动态漫画', 'v': '动态漫画'}]},
{'key': 'year',
'name': '时间',
'value': [{'n': '全部', 'v': ''},
{'n': '2024', 'v': '2024'},
{'n': '2023', 'v': '2023'},
{'n': '2022', 'v': '2022'},
{'n': '2021', 'v': '2021'},
{'n': '2020', 'v': '2020'},
{'n': '2019', 'v': '2019'},
{'n': '2018', 'v': '2018'},
{'n': '2017', 'v': '2017'},
{'n': '2016', 'v': '2016'},
{'n': '2015', 'v': '2015'}]},
{'key': 'by',
'name': '排序',
'value': [{'n': '按时间', 'v': 'time'},
{'n': '按人气', 'v': 'hits'},
{'n': '按评分', 'v': 'score'}]}],
'2': [{'key': 'type',
'name': '类型',
'value': [{'n': '全部', 'v': ''},
{'n': '冒险', 'v': '冒险'},
{'n': '奇幻', 'v': '奇幻'},
{'n': '战斗', 'v': '战斗'},
{'n': '后宫', 'v': '后宫'},
{'n': '热血', 'v': '热血'},
{'n': '励志', 'v': '励志'},
{'n': '搞笑', 'v': '搞笑'},
{'n': '校园', 'v': '校园'},
{'n': '机战', 'v': '机战'},
{'n': '悬疑', 'v': '悬疑'},
{'n': '治愈', 'v': '治愈'},
{'n': '百合', 'v': '百合'},
{'n': '恐怖', 'v': '恐怖'},
{'n': '泡面番', 'v': '泡面番'},
{'n': '恋爱', 'v': '恋爱'},
{'n': '推理', 'v': '推理'}]},
{'key': 'year',
'name': '时间',
'value': [{'n': '全部', 'v': ''},
{'n': '2024', 'v': '2024'},
{'n': '2023', 'v': '2023'},
{'n': '2022', 'v': '2022'},
{'n': '2021', 'v': '2021'},
{'n': '2020', 'v': '2020'},
{'n': '2019', 'v': '2019'},
{'n': '2018', 'v': '2018'},
{'n': '2017', 'v': '2017'},
{'n': '2016', 'v': '2016'},
{'n': '2015', 'v': '2015'}]},
{'key': 'by',
'name': '排序',
'value': [{'n': '按时间', 'v': 'time'},
{'n': '按人气', 'v': 'hits'},
{'n': '按评分', 'v': 'score'}]}],
'3': [{'key': 'type',
'name': '类型',
'value': [{'n': '全部', 'v': ''},
{'n': '科幻', 'v': '科幻'},
{'n': '冒险', 'v': '冒险'},
{'n': '战斗', 'v': '战斗'},
{'n': '百合', 'v': '百合'},
{'n': '奇幻', 'v': '奇幻'},
{'n': '热血', 'v': '热血'},
{'n': '搞笑', 'v': '搞笑'}]},
{'key': 'year',
'name': '时间',
'value': [{'n': '全部', 'v': ''},
{'n': '2024', 'v': '2024'},
{'n': '2023', 'v': '2023'},
{'n': '2022', 'v': '2022'},
{'n': '2021', 'v': '2021'},
{'n': '2020', 'v': '2020'},
{'n': '2019', 'v': '2019'},
{'n': '2018', 'v': '2018'},
{'n': '2017', 'v': '2017'},
{'n': '2016', 'v': '2016'},
{'n': '2015', 'v': '2015'}]},
{'key': 'by',
'name': '排序',
'value': [{'n': '按时间', 'v': 'time'},
{'n': '按人气', 'v': 'hits'},
{'n': '按评分', 'v': 'score'}]}],
'4': [{'key': 'type',
'name': '类型',
'value': [{'n': '全部', 'v': ''},
{'n': '搞笑', 'v': '搞笑'},
{'n': '奇幻', 'v': '奇幻'},
{'n': '治愈', 'v': '治愈'},
{'n': '科幻', 'v': '科幻'},
{'n': '喜剧', 'v': '喜剧'},
{'n': '冒险', 'v': '冒险'},
{'n': '动作', 'v': '动作'},
{'n': '爱情', 'v': '爱情'}]},
{'key': 'year',
'name': '时间',
'value': [{'n': '全部', 'v': ''},
{'n': '2024', 'v': '2024'},
{'n': '2023', 'v': '2023'},
{'n': '2022', 'v': '2022'},
{'n': '2021', 'v': '2021'},
{'n': '2020', 'v': '2020'},
{'n': '2019', 'v': '2019'},
{'n': '2018', 'v': '2018'},
{'n': '2017', 'v': '2017'},
{'n': '2016', 'v': '2016'},
{'n': '2015', 'v': '2015'}]},
{'key': 'by',
'name': '排序',
'value': [{'n': '按时间', 'v': 'time'},
{'n': '按人气', 'v': 'hits'},
{'n': '按评分', 'v': 'score'}]}]
}
}
def homeVideoContent(self):
data = self.get_data(self.home_url)
return {'list': data, 'parse': 0, 'jx': 0}
def categoryContent(self, cid, page, filter, ext):
_type = ext.get('type') if ext.get('type') else ''
_year = ext.get('year') if ext.get('year') else ''
_by = ext.get('by') if ext.get('by') else ''
url = f'{self.home_url}/show-{cid}--{_by}-{_type}--{_year}-{page}.html'
data = self.get_data(url)
return {'list': data, 'parse': 0, 'jx': 0}
# return {"list": [], "msg": "来自py_dependence的categoryContent"}
def detailContent(self, did):
ids = did[0]
video_list = []
try:
res = requests.get(f'{self.home_url}/v/{ids}.html', headers=self.headers)
root = etree.HTML(res.text)
vod_play_from = '$$$'.join(root.xpath(
'//ul[contains(@class, "play_from")]/li/text()')) # //ul[contains(@class, "abc")] [@class="tab_control play_from"]
play_list = root.xpath('//ul[contains(@class, "play_list")]')
vod_play_url = []
for i in play_list:
name_list = i.xpath('./li/a/text()')
url_list = i.xpath('./li/a/@href')
vod_play_url.append(
'#'.join([_name + '$' + _url for _name, _url in zip(name_list, url_list)])
)
video_list.append(
{
'type_name': '',
'vod_id': ids,
'vod_name': '',
'vod_remarks': '',
'vod_year': '',
'vod_area': '',
'vod_actor': '',
'vod_director': '沐辰_为爱发电',
'vod_content': '',
'vod_play_from': vod_play_from,
'vod_play_url': '$$$'.join(vod_play_url)
}
)
return {"list": video_list, 'parse': 0, 'jx': 0}
except requests.RequestException as e:
return {'list': [], 'msg': e}
# return {"list": [], "msg": "来自py_dependence的detailContent"}
def searchContent(self, key, quick, page='1'):
if page != '1':
return {'list': [], 'parse': 0, 'jx': 0}
url = f'{self.home_url}/s----------.html?wd={key}'
data = self.get_data(url)
return {'list': data, 'parse': 0, 'jx': 0}
# return {"list": [], "msg": "来自py_dependence的searchContent"}
def playerContent(self, flag, pid, vipFlags):
play_url = 'https://gitee.com/dobebly/my_img/raw/c1977fa6134aefb8e5a34dabd731a4d186c84a4d/x.mp4'
try:
res = requests.get(f'{self.home_url}{pid}', headers=self.headers)
root = etree.HTML(res.text)
urls = root.xpath('//iframe/@src')
if len(urls) == 0:
return {'url': play_url, 'parse': 0, 'jx': 0}
return {'url': urls[0], 'parse': 1, 'jx': 0}
except requests.RequestException as e:
print(e)
return {'url': play_url, 'parse': 0, 'jx': 0}
# return {"list": [], "msg": "来自py_dependence的playerContent"}
def localProxy(self, params):
pass
def destroy(self):
return '正在Destroy'
def get_data(self, url):
data = []
try:
res = requests.get(url, headers=self.headers)
root = etree.HTML(res.text)
data_list = root.xpath('//li/div[@class="item"]')
for i in data_list:
data.append(
{
'vod_id': i.xpath('./a[2]/@href')[0].split('/')[-1].split('.')[0],
'vod_name': i.xpath('./a[2]/@title')[0],
'vod_pic': i.xpath('./a[1]/@data-bg')[0],
'vod_remarks': i.xpath('./span/text()')[0]
}
)
return data
except requests.RequestException as e:
return data