Sync all projects
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
import json
|
||||
from difflib import SequenceMatcher
|
||||
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "急救指南"
|
||||
|
||||
def init(self, extend):
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def homeVideoContent(self):
|
||||
return self.categoryContent('FIRSTAID', 1, False, {})
|
||||
|
||||
def homeContent(self, filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"急救指南": "FIRSTAID"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
return result
|
||||
|
||||
def categoryContent(self, cid, page, filter, ext):
|
||||
result = {}
|
||||
header = self.header.copy()
|
||||
r = self.fetch('https://m.youlai.cn/jijiu', headers=header)
|
||||
html = self.html(r.text)
|
||||
vodList = html.xpath("//ul[contains(@class,'list-flex-br')]/li")
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
title = vod.xpath(".//div/text()")[0].strip()
|
||||
cid = vod.xpath("./a/@href")[0]
|
||||
videos.append({
|
||||
"vod_id": cid,
|
||||
"vod_name": title,
|
||||
"vod_pic": 'https://api-lmteam.koyeb.app/files/firstaid.png',
|
||||
"vod_remarks": ''
|
||||
})
|
||||
lenvideos = len(videos)
|
||||
result['list'] = videos
|
||||
result['page'] = page
|
||||
result['pagecount'] = page
|
||||
result['limit'] = lenvideos
|
||||
result['total'] = lenvideos
|
||||
return result
|
||||
|
||||
def detailContent(self, did):
|
||||
did = did[0]
|
||||
header = self.header.copy()
|
||||
url = f'https://m.youlai.cn{did}'
|
||||
r = self.fetch(url, headers=header)
|
||||
if '/video/article' in did:
|
||||
data = json.loads(self.regStr(reg='_DATA__ =(.*?});', src=r.text))
|
||||
title = data['videoDetailData']['title']
|
||||
director = f"{data['videoDetailData']['doctor']['name']}|{data['videoDetailData']['doctor']['medical_title']}|{data['videoDetailData']['doctor']['hospital_name']}"
|
||||
content = data['videoDetailData']['description'].strip()
|
||||
playUrl = data['videoDetailData']['media_url']
|
||||
else:
|
||||
html = self.html(r.text)
|
||||
title = html.xpath("//h2[contains(@class,'video-title')]/text()")[0].strip()
|
||||
director = '|'.join(html.xpath("//div[contains(@class,'list-flex')]/span /text()")).strip()
|
||||
content = '\n'.join(html.xpath("//div[@class='img-text-con']//text()[not(parent::span[@class='breakpoint-item'])]")).strip()
|
||||
playUrl = html.xpath("//video[contains(@id,'video')]/source/@src")[0]
|
||||
vod = {
|
||||
"vod_id": did,
|
||||
"vod_name": title,
|
||||
"vod_pic": 'https://img1.imgtp.com/2023/09/19/bydPPaLp.png',
|
||||
"vod_content": content.strip(),
|
||||
"vod_director": director,
|
||||
"vod_play_from": '急救指南',
|
||||
"vod_play_url": title + '$' + playUrl
|
||||
}
|
||||
result = {'list': [vod]}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick):
|
||||
return self.searchContentPage(key, quick, '1')
|
||||
|
||||
def searchContentPage(self, key, quick, page):
|
||||
header = self.header.copy()
|
||||
url = f'https://m.youlai.cn/kp/videobydise?q={key}&page={page}&keyword={key}'
|
||||
r = self.fetch(url, headers=header, timeout=5)
|
||||
html = self.html(r.text)
|
||||
vodList = html.xpath("//div[contains(@class,'re-li li-video')]")
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
sid = vod.xpath("./a/@href")[0]
|
||||
title = vod.xpath(".//h5/text()")[0].strip()
|
||||
if SequenceMatcher(None, title, key).ratio() < 0.6 and not key in title:
|
||||
continue
|
||||
img = vod.xpath(".//img/@src")[0]
|
||||
if not img.startswith('http'):
|
||||
img = 'https:' + img
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": title,
|
||||
"vod_pic": img,
|
||||
"vod_remarks": ''
|
||||
})
|
||||
result = {'list': videos}
|
||||
return result
|
||||
|
||||
def playerContent(self, flag, pid, vipFlags):
|
||||
result = {}
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = pid
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
def localProxy(self, param):
|
||||
return [200, "video/MP2T", {}, ""]
|
||||
|
||||
header = {
|
||||
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36 Edg/116.0.1938.76"
|
||||
}
|
||||
Reference in New Issue
Block a user