129 lines
4.4 KiB
Python
129 lines
4.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# by @嗷呜
|
|
import json
|
|
import sys
|
|
sys.path.append('..')
|
|
from base.spider import Spider
|
|
from pyquery import PyQuery as pq
|
|
|
|
class Spider(Spider):
|
|
|
|
def init(self, extend=""):
|
|
pass
|
|
|
|
def isVideoFormat(self, url):
|
|
pass
|
|
|
|
def manualVideoCheck(self):
|
|
pass
|
|
|
|
def action(self, action):
|
|
pass
|
|
|
|
def destroy(self):
|
|
pass
|
|
|
|
host='https://www.nhsyy.com'
|
|
|
|
headers = {
|
|
'Accept': '*/*',
|
|
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
|
'Cache-Control': 'no-cache',
|
|
'Connection': 'keep-alive',
|
|
'DNT': '1',
|
|
'Origin': host,
|
|
'Pragma': 'no-cache',
|
|
'Referer': f'{host}/',
|
|
'Sec-Fetch-Dest': 'empty',
|
|
'Sec-Fetch-Mode': 'cors',
|
|
'Sec-Fetch-Site': 'cross-site',
|
|
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
|
|
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
|
|
'sec-ch-ua-mobile': '?1',
|
|
'sec-ch-ua-platform': '"Android"',
|
|
}
|
|
|
|
def homeContent(self, filter):
|
|
data = pq(self.fetch(self.host, headers=self.headers).text)
|
|
result = {}
|
|
classes = []
|
|
for i in data('.drop-content-items li').items():
|
|
j = i('a').attr('href')
|
|
if j and 'type' in j:
|
|
id = j.split('/')[-1].split('.')[0]
|
|
classes.append({
|
|
'type_name': i('a').text(),
|
|
'type_id': id
|
|
})
|
|
hlist = self.getlist(data('.module-lines-list .module-item'))
|
|
result['class'] = classes
|
|
result['list'] = hlist
|
|
return result
|
|
|
|
def homeVideoContent(self):
|
|
pass
|
|
|
|
def categoryContent(self, tid, pg, filter, extend):
|
|
data = self.fetch(f'{self.host}/vodshwo/{tid}--------{pg}---.html', headers=self.headers).text
|
|
vlist = self.getlist(pq(data)('.module-list .module-item'))
|
|
return {"list": vlist, "page": pg, "pagecount": 9999, "limit": 90, "total": 999999}
|
|
|
|
def detailContent(self, ids):
|
|
data = pq(self.fetch(f"{self.host}{ids[0]}", headers=self.headers).text)
|
|
udata = data('.scroll-box-y .scroll-content a')
|
|
vdata = data('.video-info-main .video-info-item')
|
|
vod = {
|
|
'vod_year': vdata.eq(2)('div').text(),
|
|
'vod_remarks': vdata.eq(3)('div').text(),
|
|
'vod_actor': vdata.eq(1)('a').text(),
|
|
'vod_director': vdata.eq(0)('a').text(),
|
|
'typt_name': data('.video-info-aux a').eq(0).attr('title'),
|
|
'vod_content': vdata.eq(4)('p').eq(-1).text(),
|
|
'vod_play_from': '嗷呜爱看短剧',
|
|
'vod_play_url': '#'.join([f"{i.text()}${i.attr('href')}" for i in udata.items()]),
|
|
}
|
|
result = {"list": [vod]}
|
|
return result
|
|
|
|
def searchContent(self, key, quick, pg="1"):
|
|
dlist = self.fetch(f'{self.host}/vodsearch/{key}----------{pg}---.html', headers=self.headers).text
|
|
ldata = pq(dlist)('.module-list .module-search-item')
|
|
vlist = []
|
|
for i in ldata.items():
|
|
img = i('.module-item-pic')
|
|
vlist.append({
|
|
'vod_id': i('.video-serial').attr('href'),
|
|
'vod_name': img('img').attr('alt'),
|
|
'vod_pic': img('img').attr('data-src'),
|
|
'vod_year': i('.tag-link a').eq(0).text(),
|
|
'vod_remarks': i('.video-serial').text()
|
|
})
|
|
result = {"list": vlist, "page": pg}
|
|
return result
|
|
|
|
def playerContent(self, flag, id, vipFlags):
|
|
data=self.fetch(f"{self.host}{id}", headers=self.headers).text
|
|
jstr = pq(data)('.player-wrapper script').eq(0).text()
|
|
try:
|
|
jdata = json.loads(jstr.split('=', 1)[-1])
|
|
url = jdata.get('url') or jdata.get('next_url')
|
|
p=0
|
|
except:
|
|
url,p = f"{self.host}{id}",1
|
|
return {'parse': p, 'url': url, 'header': self.headers}
|
|
|
|
def localProxy(self, param):
|
|
pass
|
|
|
|
def getlist(self, data):
|
|
vlist = []
|
|
for i in data.items():
|
|
img = i('.module-item-pic')
|
|
vlist.append({
|
|
'vod_id': img('a').attr('href'),
|
|
'vod_name': img('img').attr('alt'),
|
|
'vod_pic': img('img').attr('data-src'),
|
|
'vod_remarks': i('.module-item-text').text()
|
|
})
|
|
return vlist
|