Files
tvbox_collect/dr/py/html/py_可可.py
T
2026-06-29 03:41:14 +00:00

194 lines
6.8 KiB
Python

# coding=utf-8
# !/usr/bin/python
# 嗷呜
import sys
from base64 import b64decode
sys.path.append('..')
from base.spider import Spider
import re
from bs4 import BeautifulSoup
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
class Spider(Spider):
def getName(self):
return "可可"
def init(self, extend=""):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def cleanText(self, src):
clean = re.sub('[\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF\U0001F1E0-\U0001F1FF]', '',
src)
return clean
def jsp(self, content):
return BeautifulSoup(content, "html.parser")
host = "https://www.kkys02.com"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/94.0.4606.54 Safari/537.36"
}
phost="https://vres.jxlfl.cn"
def homeContent(self, filter):
result = {}
data = self.fetch(self.host, headers=self.header)
htmld = self.jsp(self.cleanText(data.text))
list = htmld.select('.main ul[class="fs-margin menu"]')[1]
self.hlist = htmld.find('div', class_='module-box module-v-box module-one-row-box')
classes = []
for li in list.find_all('li', class_='menu-item'):
classes.append({
'type_name': li.find('div', class_='menu-item-label').get_text(),
'type_id': re.findall(r'\d+', li.a.get('href'))[0]
})
result['class'] = classes
return result
def homeVideoContent(self):
videos = []
for li in self.hlist.select('.module-box-inner .module-item'):
id = li.a.get('href')
name = li.find('div', class_='v-item-footer').find_all('div')[1].get_text(strip=True)
pic = li.find_all('img')[-1].get('data-original')
remark = li.find('div', class_='v-item-bottom').find_all('span')[1].get_text(strip=True)
year = li.find('div', class_='v-item-top-left').get_text(strip=True)
videos.append({
"vod_id": id,
"vod_name": name,
"vod_pic": self.phost + pic,
"vod_remarks": remark,
"vod_year": year
})
result = {
'list': videos
}
return result
def categoryContent(self, tid, pg, filter, extend):
result = {}
url = f'{self.host}/show/{tid}-----3-{pg}.html'
html = self.fetch(url, headers=self.header)
data = self.jsp(self.cleanText(html.text))
list = data.find('div', class_='module-box-inner')
videos = []
for li in list.select('.module-box-inner .module-item'):
id = li.a.get('href')
name = li.find('div', class_='v-item-footer').find_all('div')[1].get_text(strip=True)
pic = li.find_all('img')[-1].get('data-original')
remark = li.find('div', class_='v-item-bottom').find_all('span')[1].get_text(strip=True)
year = li.find('div', class_='v-item-top-left').get_text(strip=True)
videos.append({
"vod_id": id,
"vod_name": name,
"vod_pic": self.phost + pic,
"vod_remarks": remark,
"vod_year": year
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
tid = ids[0]
url = self.host + tid
html = self.fetch(url, headers=self.header)
data = (self.jsp(self.cleanText(html.text)))
data1 = data.find('div', class_='detail-box fs-margin-section')
data2 = data.find('div', id='detail-source-swiper')
vod_play_from = []
index = None
for idx, li in enumerate(data2.find_all('span', class_='source-item-label', id=True), start=0):
li_text = li.get_text(strip=True)
if '4K' in li_text:
index = idx
continue
vod_play_from.append(li_text)
data3 = data.find_all('div', class_='episode-list')
if index:
del data3[index]
vod_play_url = []
for li in data3:
dd = []
for lii in li.find_all('a'):
dd.append(lii.get_text(strip=True) + "$" + lii.get('href'))
vod_play_url.append('#'.join(dd))
vod = {
"vod_name": data1.find('div', class_='detail-title').find_all('strong')[1].get_text(strip=True),
"vod_content": data1.find('div', class_='detail-desc').get_text(strip=True),
"vod_play_from": '$$$'.join(vod_play_from),
"vod_play_url": '$$$'.join(vod_play_url)
}
result = {
'list': [
vod
]
}
return result
# 未写搜索下面的可忽略
def searchContent(self, key, quick, pg="1"):
result = {}
url = f'{self.host}/search?k={key}&page={pg}'
html = self.fetch(url, headers=self.header)
data = self.jsp(self.cleanText(html.text))
list = data.find('div', class_='search-result-list fs-margin-section')
videos = []
for li in list.find_all('a', class_='search-result-item'):
id = li.get('href')
name = li.find('div', class_='search-result-item-main').find_all('div')[1].get_text(strip=True)
pic = li.find_all('img')[-1].get('data-original')
ddd = li.find('div', class_='tags').find_all('span')
remark = ddd[-1].get_text(strip=True)
year = ddd[0].get_text(strip=True)
videos.append({
"vod_id": id,
"vod_name": name,
"vod_pic": self.phost + pic,
"vod_remarks": remark,
"vod_year": year
})
result = {
'list': videos,
'pg': pg
}
return result
def playerContent(self, flag, id, vipFlags):
url = self.host + id
html = self.fetch(url, headers=self.header)
data = self.cleanText(html.text).strip()
data1 = re.search(r"TMDPPPP = '(.*?)';", data)[1]
def decrypt(encrypted_word):
key = "FNF9aVQF!G*0ux@2hAigUeB3".encode('utf-8')
encrypted_word_bytes = b64decode(encrypted_word)
cipher = AES.new(key, AES.MODE_ECB)
decrypted = unpad(cipher.decrypt(encrypted_word_bytes), AES.block_size)
return decrypted.decode('utf-8')
result = {}
result["parse"] = 0
result["url"] = decrypt(data1)
result["header"] = self.header
return result
def localProxy(self, param):
pass