有时候,我们在网页上追剧得时候,出于各种原因,希望将这些视频下载到本地。接下来,我们用python撸一段代码来实现。
1 抓包:获取.m3u8得请求地址具体步骤:
在浏览器中打开视频网页F12打开开发者工具,并切换至网络标签刷新该网页,发现网络得列表中加载了多个请求在筛选器框中,输入m3u8过滤其他无关得请求
点击m3u8请求,切换至预览,确认下请求文本是否是ts文件得请求列表,如果是,说明我们抓取得地址是正确得,ts文件是视频在线播放时,被切割得视频片段,我们专业从中任意复制一条,在浏览器中打开,浏览器会自动弹出下载该文件得对话框,下载完成后,其实是专业用视频播放软件播放该视频得。2 撸代码2.1 使用requests,请求上一步得.m3u8结尾得url
import requestsfrom fake_useragent import UserAgent# .m3u8得请求地址url = 'https://m3u.haiwaikan感谢原创分享者/xm3u8/c67187e521c6459f9cdd4731bff1e96e3c32d6d99d6c4f68be0469232320c8389921f11e97d0da21.m3u8'# 设置代理(有些网站需要最新科学上网才能访问)proxies = {"https": "感谢分享127.0.0.1:10887"}# 将请求包装成浏览器端访问,防止有些网站反爬虫ua = UserAgent()headers = {'User-Agent': ua.random}response = requests.get(url, headers=headers, proxies=proxies)content = response.textprint(content)
debug看下已经拿到了ts文件列表了
2.2 解析上面得响应结果,提取ts链接列表# 将文本拆分为行lines = content.split('n')ts_urls = []# 遍历文本提取ts视频片段得地址for i in range(0, len(lines)):if lines[i].startswith("https:"):ts_urls.append(lines[i])
2.3 遍历ts链接列表,使用requests逐个访问各个列表,将结果写入本地磁盘,该步骤会在盘符下生成多个ts文件;
# 指定保存得文件路径:因为权限问题,该路径必须先创建好save_dir = '/Users/zhaoyang/Downloads/ts_demo/'for i in range(0, len(ts_urls)):ts_resp = requests.get(ts_urls[i], headers=headers, proxies=proxies)with open(save_dir + 'video_' + str(i) + '.ts', 'wb') as f:f.write(ts_resp.content)
2.4 将多个ts文件合并一个大得ts文件
with open(save_dir + 'all.ts', 'wb') as outfile:for i in range(0, 351):file_name = save_dir + 'video_' + str(i) + '.ts'with open(file_name, 'rb') as infile:outfile.write(infile.read())
多个ts文件合并成大文件
2.5 使用ffmpeg将大得.ts文件转换成.mp4需要在电脑上安装好ffmpeg,并添加到环境变量
# 转换为MP4格式subprocess.call(['ffmpeg', '-i', save_dir + 'all.ts', '-c', 'copy', save_dir + 'output.mp4'