提示:本文主要是方便理解音频信息和网站信息,不可实现跳过vip功能等(相关代码在文末)
我们先了解和获取网站和视频的相关内容,我以某视频的某动漫为例:
1.打开一个视频网页版,搜索,选择其中的某一集
2.鼠标右键,检查
3.打开网络,点击Ctrl+R刷新一下,然后搜索.m3u8文件
.m3u8 文件是一种扩展名为 .m3u8 的播放列表文件,它是基于M3U(Multimedia Playlist)格式的一种变种,专门用于HTTP Live Streaming (HLS)。HLS是由Apple公司开发的一种流媒体传输协议,广泛应用于各种在线视频平台,包括腾讯视频。
HLS将视频分成多个小的片段(通常是几秒钟的TS文件),每个片段单独传输。这种分段传输方式可以提高视频加载速度和播放流畅度,尤其是在网络不稳定的情况下。.m3u8 文件包含了这些片段的URL列表,客户端可以根据这个列表依次请求和播放这些片段。
.m3u8 文件的结构一个典型的 .m3u8 文件可能包含以下部分:
1. 文件头:#EXTM3U
2. 版本信息:#EXT-X-VERSION:3
3. 媒体序列号:#EXT-X-MEDIA-SEQUENCE:0
4. 目标持续时间:#EXT-X-TARGETDURATION:14
5. 播放列表类型:#EXT-X-PLAYLIST-TYPE:VOD ---VOD(点播)或LIVE(直播)。
6. 片段信息:#EXTINF:12.000,
00_gzc_1000102_0b53nyaawaaaoaadnzvxoftma3wdbnuaad2a.f321002.1.ts?index=0&start=0&end=12000&brs=0&bre=310387&ver=4&token=b40e852a52561c8c29085752e05314fc
7. 结束标记:#EXT-X-ENDLIST
4.选择proxyhttp目录里的,然后点击.m3u8,可以看到相关文件路径 ,然后复制.m3u8文件的URL,一直复制到前面的https:
可以在浏览器中复制下载这个文件,然后用记事本打开就是这种
5.根据上述文件然后根据第三步的文件信息,然后我们筛选我们需要的文件信息 。如此可以开始我们的爬虫代码。
所需安装的库:
1. requestsrequests 是一个用于发送HTTP请求的库,非常方便易用。
安装命令:pip install requests
2. tqdmtqdm 是一个用于显示进度条的库,可以提升用户体验。
安装命令:pip install tqdm
3. re 和 osre 和 os 是Python标准库的一部分,不需要额外安装。
移除注释行:
m3u8_text: 使用正则表达式移除m3u8文本中的注释行(以#E开头的行)
m3u8_text = re.sub('#E.*', ' ', m3u8_text)
切割前缀:
sub_ts: 从目标URL中提取出公共前缀部分,用于构建每个ts片段的完整URL
sub_ts = url.split("gzc")[0]
最后给出完整代码:
import requests
import re
from tqdm import tqdm
import os
# 目标URL
url = "https://defaultts.tc.qq.com/moviets.tc.qq.com/A7BbbkmgC6HOXhaS7bd09U9CsnBo-igDf-5p4lipX_dU/B_MWKVMPpbmmy3lFOlyMFQVRto0KEsMegLKMuugZmx45-QxycrqwccKm9cysd3eR8-/svp_50112/jNUu6S7FmevMZANwF9cMXaYlIgsEt6mT0HaIR3gVFZl5SPnHcDwJi68dZCyMWI1i-l8wPfQNbSCkTBuw-QT86i_2DUJDnYkCES7FU6yddrNH0rvurDZT14pf-mP8rLI-JqKgWmIZIMbCvSn7efj2vLYs9CzSX074--FRC3M9ZfPAyPvlonOUJyL_9kh_7uu_6dPmseLxl7r8gdto-IpTstfxFyxHjfLdQ0HMaE5w-0PEmxB9OKoZAw/gzc_1000102_0b5354aaqaaa3yaiilvupftmb36dbduqadca.f321003.ts.m3u8"
# 切割前缀
sub_ts = url.split("gzc")[0]
# 指定保存文件的路径
save_path = "D:下载的动漫.mp4" #在此加入想保存的文件路径
# 1. 访问目的地址
response = requests.get(url)
m3u8_text = response.text
# 移除注释行
m3u8_text = re.sub('#E.*', ' ', m3u8_text)
# 分割成TS文件列表
ts_list = m3u8_text.split()
# 下载并合并TS文件
with open(save_path, mode='wb') as f:
for ts in tqdm(ts_list):
ts_url = sub_ts + ts
ts_data = requests.get(ts_url).content
f.write(ts_data)
print(f"下载完成,文件已保存到: {save_path}")