Firefox F12 + Python 3.6 下载B站视频
来源:互联网 发布:淘宝qps 编辑:程序博客网 时间:2024/05/21 09:07
注意:本文所用的方法仅用于学习交流技术,请尊重视频版权!
网页版B站并没有提供直接的下载方式,但是可以通过抓取 HTTP 请求来获得真实的下载地址和 headers,从而下载视频。
Step 1 - Firefox 开发者工具获取下载地址
打开要下载的B站视频所在网页,调出 Firefox 的 F12 开发者工具,切换到“网络”(Network)标签,刷新网页,可以看到有一堆请求:
但我们只需要找到载入视频的请求。B站视频是flv格式,所以在右上角的“Filter URLs”中,输入 flv
,就过滤出了含有 flv 的请求:
显然,类型为 x-flv
的请求就是我们要下载的视频,从文件大小也可以看出来。(可能需要播放视频并等一会儿才会找到 x-flv
的请求)
我们点击这个请求,可以看到视频的 URL。但是,如果直接下载这个 URL,会出现 403 错误,这是因为没有包含请求头。
右键单击这条请求,复制请求头(Request Headers)
获得的请求头如下:
其中 Range
是下载的视频范围,如果要下载整个视频,需要设置为 bytes=0-
。
Step 2 - 用 Python 3.6 urllib
下载视频
这里用 Python 3.6 自带的标准库 urllib
。
代码:
#!/usr/bin/env python3import sysimport sslimport urllib.requestdef report(count, blockSize, totalSize): '''下载进度显示''' downloadedSize = count * blockSize percent = int(downloadedSize * 100 / totalSize) sys.stdout.write(f"\rDownloaded: {downloadedSize} bytes, Total: {totalSize} bytes, {percent} % complete") sys.stdout.flush()if __name__ == '__main__': # 不加这个的话可能会出现 SSL 验证错误 ssl._create_default_https_context = ssl._create_unverified_context opener = urllib.request.build_opener() # 请求头 opener.addheaders = [ ('Host', 'tx.acgvideo.com'), ('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0) Gecko/20100101 Firefox/56.0'), ('Accept', '*/*'), ('Accept-Language', 'en-US,en;q=0.5'), ('Accept-Encoding', 'gzip, deflate, br'), ('Range', 'bytes=0-'), # Range 的值要为 bytes=0- 才能下载完整视频 ('Referer', 'https://www.bilibili.com/video/av14543079/'), ('Origin', 'https://www.bilibili.com'), ('Connection', 'keep-alive'), ] urllib.request.install_opener(opener) # 此处的 URL 就是 Firefox 开发者工具获取的视频请求的 URL,根据实际填写 url = 'https://tx.acgvideo.com/xx/xx/xxxxxxxx/xxxxxxxx-x-xx.flv?.......' urllib.request.urlretrieve(url, filename='av14543079.flv', reporthook=report)
运行效果:
完成后可以得到 flv 格式的完整视频,可以直接播放。
附:使用命令行工具 curl 下载视频
当然,除了 Python 以外,只要下载工具支持附带 headers,也可以下载。Firefox 开发者工具有一个“Copy as CURL”选项,可以把请求复制为 cURL 命令:
复制后,需要对命令做一些修改:
- 添加
-o
参数,指定保存的文件名,否则会把下载的内容直接输出到 shell 中。 - 注意这个参数:
-H 'Range: bytes=0-'
。Range
的值要设为bytes=0-
,这样才能下载完整的视频。如果不是的话就改过来。
修改后的命令应该是这样的:
curl \ 'https://tx.acgvideo.com/xx/xx/xxxxxxxx/xxxxxxxx-x-xx.flv?txTime=xxx&platform=xxx&txSecret=xxx&oi=xxx&rate=xxx&hfb=xxx' \ -o 'bilibili.flv' \ -H 'Host: tx.acgvideo.com' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0) Gecko/20100101 Firefox/56.0' \ -H 'Accept: */*' \ -H 'Accept-Language: en-US,en;q=0.5' \ --compressed \ -H 'Range: bytes=0-' \ -H 'Referer: https://www.bilibili.com/video/av14543079/' \ -H 'Origin: https://www.bilibili.com' \ -H 'Connection: keep-alive'
将会把视频下到当前目录下 bilibili.flv 中。
阅读全文
0 0
- Firefox F12 + Python 3.6 下载B站视频
- 下载B(bilibili)站视频
- python 获取b站视频地址
- Firefox浏览器下载网页上的视频
- python视频下载站点
- python下载视频
- (python)下载秒拍美拍视频
- python 视频下载地址
- Python实现视频下载
- python基础教程视频下载
- 无需插件只使用浏览器下载b站视频
- Python - 下载视频网站的视频
- 火狐浏览器Firefox 如何下载网页的SWF视频,硅谷动力的网站视频怎么下载
- 【python 视频爬虫】python下载头条视频
- python firefox 中提取sohu视频缓冲,并排序
- f12
- 【python 下载器】python下载电影&视频&电视剧
- 分享一个Python下载视频脚本
- java开发的几个重要事项,参考一下
- spark安装
- 面向对象六大原则
- java基础知识面试题
- 11. 迭代器模式
- Firefox F12 + Python 3.6 下载B站视频
- rabbitmq安装
- 九度 1363 欢乐打扑克 【简单水题暴力模拟】
- Codeforces 868C Qualification Rounds
- centos虚拟机网络配置NAT模式和桥接模式总结
- 6.4OpenCV中值滤波
- linux系统基本命令(八)
- 制作一份手机录屏的 GIF 动态图片
- python模块之urllib2基本爬虫入门