嗨喽,兄弟们,昨晚无聊溜进了斗鱼舞蹈区,好家伙,差点出不来了,这么好的东西当然是要分享给表弟了,于是我全部用Python爬了下来,悄悄放到了他的电脑中。
果然不出我所料,今天早上一起来,表弟就被打了一顿!
话不多说,也给大家分享分享!
基本流程
一、数据来源分析
抓包 数据包
m3u8: 视频流 m3u8文本类型文件 将 mp4 切分为n个片段(.ts片段视频) 每一个片段为10秒钟
二、代码实现(实现的基本流程)
- 发送请求
- 获取数据
- 解析数据
- 保存数据
- 多页采集
代码展示
导入模块
import requests import re import time import execjs from tqdm import tqdm
请求头(伪装)
vid = 'kDe0W2m4JO2MA4Bz' # 为了防止大家看了文章不会操作,我特地录制了视频,跟源代码一起直接在这个q裙自取就好了:708525271 headers = { 'cookie': 'cookie数据我就删除了,修改成自己的就可以了', 'origin': 'https://v.douyu.com', 'referer': f'https://v.douyu.com/show/{vid}', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' }
获取point_id
def get_point_id(vid): point_url = f"https://v.douyu.com/wgapi/vod/front/video/secondary/info?hid={vid}" point_id = requests.get(point_url, headers=headers).json()['data']['vid'] return point_id
获取sign
def get_sign(vid, point_id, did, tt): """ :param vid: 作品id :param point_id: point_id :param did: did :param tt: 时间戳 :return: sign值 """ main_url = f'https://v.douyu.com/show/{vid}' html_data = requests.get(main_url, headers=headers).text title = re.findall('<title>(.*?)</title>', html_data)[0] f = "const CryptoJS = require('crypto-js');" + re.findall('<script> (var v.*?)</script>', html_data)[0] ctx = execjs.compile(f) result = ctx.call('ub98484234', point_id, did, tt) sign = result.split('sign=')[-1] return [sign, title]
获取m3u8链接
def get_streamUrl(v, did, tt, sign, vid): data = { 'v': v, 'did': did, 'tt': str(tt), 'sign': sign, 'vid': vid } url = 'https://v.douyu.com/api/stream/getStreamUrl' # 1. 发送请求 response = requests.post(url=url, headers=headers, data=data) # 2. 获取数据 m3u8_url = response.json()['data']['thumb_video']['high']['url'] return m3u8_url
下载视频
def download_m3u8(m3u8_url, title): sub_ts = m3u8_url.split('playlist')[0] m3u8_text = requests.get(m3u8_url).text ts_list = re.sub('#E.*', '', m3u8_text).split() for ts in tqdm(ts_list): ts_url = sub_ts+ts ts_data = requests.get(ts_url).content with open(f'{title}.mp4', mode='ab') as f: f.write(ts_data)
尾语
感谢你观看我的文章~本次航班到这里就结束啦
标签:视频,vid,m3u8,Python,point,ts,url,斗鱼,data From: https://www.cnblogs.com/hahaa/p/17105602.html