123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- # 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
|