思路
视频地址,检索mp4格式文件没有,大概率是m3u8视频流,检索m3u8,找到接口getStreamUrlWeb
接口是post请求,测试请求接口 提成权限不足,增加cookie referer请求头还是提示权限不足,经对比
携带参数,tt 表示当前请求时间戳,sign 单词代表经过加密的参数 是会变化的
全局搜 sign 未找到加密代码,接口启动器找到对应代码
return axios({
method: "POST",
data: t,
url: "/wgapi/vodnc/front/stream/getStreamUrlWeb",
timeout: 2e3
}).then
在return axios 这一行打断点,刷新网站,在代码上几行查找到sign的值
var p = window[l](a, o, s); p = "v=220320240505&did=5e13ad606541a3c17cd661dc00061701&tt=1714878670&sign=7686f14d1e13af7f77222d3fa182eb8a", l = "ub98484234", a = 41050684, o = "5e1
鼠标放windows上有一个function方法 传入a o s 三个值,找到这个方法 打开 把整个function全部复制,新增一个文件 斗鱼.js
把此方法粘贴到此处, 定义a o s三个值 鼠标放在aos 上复制值到代码中, 执行函数console.log(ub98484234(a, o , s))
报错提成缺少a966b2b7b8245bfccf, 再次查找 把a966b2b7b8245bfccf 复制过去,执行函数报错缺少CryptoJS ,
CryptoJS 是一个加密方法 需要加载安装环境包 npm install crypto-js,添加const CryptoJS = require(‘crypto-js’); 继续执行函数得到想要的值
v=220320240505&did=5e13ad606541a3c17cd661dc00061701&tt=1714879004&sign=101e5d949a544f308530dc2a275acb2c
代码
import requests
import re
import os
import execjs
import time
from urllib.parse import parse_qs
filename = '斗鱼\\'
if not os.path.exists(filename):
os.mkdir(filename)
def sign():
js_file = open('斗鱼.js', encoding='utf-8').read()
js_code = execjs.compile(js_file)
a = 41050684
o = '5e13ad606541a3c17cd661dc00061701'
res = js_code.call('ub98484234', a, o, int(time.time()))
# print(res)
return res
def getStreamUrl():
vid = url.split('/')[-1]
getStreamUrl = 'https://v.douyu.com/wgapi/vodnc/front/stream/getStreamUrlWeb'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0',
'origin': 'https: // v.douyu.com',
'referer': 'https: // v.douyu.com / show / aRbBv3AaBxXM6PYV',
}
res = sign()
res_dit = parse_qs(res)
data = {k: v[0] for k, v in res_dit.items()}
data['vid'] = '8KxjMdGR0Ao7VLwb'
# print(data)
m3u8_url = requests.post(url=getStreamUrl, data=data, headers=headers).json()
print(m3u8_url['data']['thumb_video']['high']['url'])
url = 'https://v.douyu.com/show/8KxjMdGR0Ao7VLwb'
getStreamUrl()