admin 管理员组文章数量: 887016
环境使用
Python 3.10
Pycharm
模块使用
requests -> pip install requests
tqdm -> pip install tqdm (进度条)
re (内置模块无需安装)
实现的基本流程
一、数据来源分析
1.明确需求
明确采集的网站以及数据内容
网址:https://v.qq/x/cover/mzc002006n62s11/e0045s2g2eg.html
数据: 视频内容
2.抓包分析
通过浏览器开发者工具分析对应的数据位置
- 打开开发者工具
- F12 / 右键点击检查选择 network (网络)
- 刷新网页,让本网页的数据内容重新加载一遍通过关键字搜索找到对应数据位置关键字: m3u8进行搜索查找数据位置
二、关于视频数据抓包分析
开发者工具 -> 网络 -> 媒体 -> 查看到对应视频链接地址
- 再以链接中一段参数为了关键字进行搜索
- 开发者工具 -> 网络 -> 媒体 -> 并没有发现视频链接地址
- 开发者工具 -> 网络 -> 全部数据 -> 某些特定链接地址 (xxx.ts)
- 关键字就以m3u8进行搜索查找把完整的视频内容, 分割成N个是片段(ts链接), 所有视频片段都存在于m3u8文件中。
三、代码实现
1.发送请求
模拟浏览器对于url地址发送请求
import requests
headers = {
# Referer 防盗链, 告诉服务器请求网址是从哪里跳转过来
'Referer':'https://v.qq/', # 一般情况如果你遇到403加防盗链大概率是可以的
# User-Agent 用户代理, 表示浏览器基本身份信息
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
}
# 请求网址
url = 'https://vd6.l.qq/proxyhttp'
# 请求参数 -> 在载荷中查看, 复制
data = {"buid":"vinfoad","vinfoparam":"charge=0&otype=ojson&defnpayver=3&spau=1&spaudio=0&spwm=1&sphls=2&host=v.qq&refer=https%3A%2F%2Fv.qq%2Fx%2Fcover%2Fmzc002006n62s11%2Fe0045s2g2eg.html&ehost=https%3A%2F%2Fv.qq%2Fx%2Fcover%2Fmzc002006n62s11%2Fe0045s2g2eg.html&sphttps=1&encryptVer=9.2&cKey=HMA-vbjiFyK1Ec1Orq2-LnCjnpb8Ocr0cPTfUqfkzEul_f4vOWcoUWJPdcrTurI9OVZAhBMNww1zG4LVGCTZlxo--_XGuZWLjvmpaTXWr2DNOLGAi4iBp92IyLg1odaG2EOurYMK5cQlWCKh6cqchEKDlC2uGzpCCamWfdlZnHB5x6wVJHKsVyf3svRoLvLp4yt5irIvBazTFI6kgUfxQ5MnT7j4qesbrCL5VQPx4hGv33Guy43cmhPLzWjhmAnOh8iWGOKJuIo0jEavue89vusorlzYe0OzgNvu_Fk_WpRgKdae4Yqh86r6hqO9qJwRPIMtjKc7vYT5bP-4i5Rg39FWzYO9drUOOqKqau8Y2MburhYEIDwKwa5SfDsioUEnWuZhdeYdLLA5mNUns78dhvK1O4ua7pu75QWa3oF0j49T2sDFNVPH1vPw4nz9tvBNJbzupHWZQKdEF1Bj9WKL01IUo6vW7UbQeBaOU82fHoEAgficbwMDAyjmDfU&clip=4&guid=4fb545818ef7b591&flowid=f41ae8955abaeded54cf6915285737bd&platform=10201&sdtfrom=v1010&appVer=1.33.12&unid=&auth_from=&auth_ext=&vid=e0045s2g2eg&defn=fhd&fhdswitch=0&dtype=3&spsrt=2&tm=1721133622&lang_code=0&logintoken=%7B%22access_token%22%3A%2249DD5A44977B0D20A8C5030DCEE37C7C%22%2C%22appid%22%3A%22101483052%22%2C%22vusession%22%3A%22buEyP-v7IrAK9bgvcYBnYA.M%22%2C%22openid%22%3A%229C153705A16E637894823004F0EBF065%22%2C%22vuserid%22%3A%22532219188%22%2C%22video_guid%22%3A%224fb545818ef7b591%22%2C%22main_login%22%3A%22qq%22%7D&spvvpay=1&spadseg=3&spav1=15&hevclv=28&spsfrhdr=0&spvideo=0&spm3u8tag=67&spmasterm3u8=3&drm=40","sspAdParam":"{\"ad_scene\":1,\"pre_ad_params\":{\"ad_scene\":1,\"user_type\":2,\"video\":{\"base\":{\"vid\":\"e0045s2g2eg\",\"cid\":\"mzc002006n62s11\"},\"is_live\":false,\"type_id\":3,\"referer\":\"\",\"url\":\"https://v.qq/x/cover/mzc002006n62s11/e0045s2g2eg.html\",\"flow_id\":\"f41ae8955abaeded54cf6915285737bd\",\"refresh_id\":\"f9eee59130c2fd401e981f7be0631b7e_1721133046\",\"fmt\":\"fhd\"},\"platform\":{\"guid\":\"4fb545818ef7b591\",\"channel_id\":0,\"site\":\"web\",\"platform\":\"in\",\"from\":0,\"device\":\"pc\",\"play_platform\":10201,\"pv_tag\":\"\",\"support_click_scan_integration\":true},\"player\":{\"version\":\"1.33.10\",\"plugin\":\"3.5.15\",\"switch\":1,\"play_type\":\"0\"},\"token\":{\"type\":1,\"vuid\":532219188,\"vuser_session\":\"buEyP-v7IrAK9bgvcYBnYA.M\",\"app_id\":\"101483052\",\"open_id\":\"9C153705A16E637894823004F0EBF065\",\"access_token\":\"49DD5A44977B0D20A8C5030DCEE37C7C\"},\"req_extra_info\":{\"now_timestamp_s\":1721133622,\"ad_frequency_control_time_list\":{\"full_pause_short_vip\":{\"ad_frequency_control_time_list\":[1721129198]},\"full_pause_short_bid_forbid_cid\":{\"ad_frequency_control_time_list\":[1721133161]},\"full_pause_short_bid_forbid_vid\":{\"ad_frequency_control_time_list\":[1721133161]},\"full_pause_short_vip_bid\":{\"ad_frequency_control_time_list\":[1721133161]}}},\"extra_info\":{}}}","adparam":"adType=preAd&vid=e0045s2g2eg&sspKey=poje"}
# 发送请求 -> 请求方法根据网站
response = requests.post(url=url, json=data, headers=headers)
2.获取数据
获取服务器返回响应数据
# 获取响应的json数据
json_data = response.json()
3.解析数据
提取我们需要的数据内容简单使用正则
# 根据字典取值(键值对取值)
vinfo = json_data['vinfo']
# 把json字符串转成json字典数据
info_json = json.loads(vinfo)
# 提取m3u8链接地址vl
m3u8_url = info_json['vl']['vi'][0]['ul']['ui'][-1]['url']
print(m3u8_url)
4.保存数据
把视频内容保存本地文件结合本案例具体步骤
第一次请求: 获取m3u8链接
发送请求: 请求网址 -> https://vd6.l.qq/proxyhttp (包含了m3u8链接)
获取数据: 获取服务器返回响应数据
解析数据: 提取我们需要m3u8链接地址第二次请求: 获取所有ts链接 (视频片段)
发送请求: 请求网址 -> m3u8链接 (包含了所有视频片段)
获取数据: 获取服务器返回响应数据解析数据: 提取我们需要 ts链接地址
第三次请求: 获取所有视频片段内容
发送请求: 请求网址 -> ts链接地址获取数据: 获取视频内容
保存数据: 把所有片段内容进行保存并且合并成一个完整的视频内容
第二次发送请求获取数据
"""2.1 发送请求 2.2 获取数据"""
m3u8 = requests.get(url=m3u8_url, headers=headers).text
"""2.3 解析数据"""
# 提取所有ts链接地址
ts_list = re.findall(',\n(.*?)\n#', m3u8)
ts_name = '/'.join(m3u8_url.split('/')[:-1]) + '/'
for循环遍历, 提取列表里面的元素
for ts in tqdm(ts_list):
# 拼接完整的ts视频链接地址
ts_url = ts_name + ts
第三次
"""3.1 发送请求 3.2获取数据"""
# 获取视频片段内容
ts_content = requests.get(url=ts_url, headers=headers).content
# 数据保存
with open('video\\练气十万年01话.mp4', mode='ab') as f:
# 写入数据
f.write(ts_content)
这就是下载到的电影了
版权声明:本文标题:Python下载腾讯视频(懂得都懂) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1728288758h1224097.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论