python爬取斗鱼视频

思路

视频地址,检索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()

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值