欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫实战之b站视频下载-中

程序员文章站 2024-03-16 17:41:16
...

前面已经分析了b站得视频下载所用到得数据

这篇主要是说下载相关得操作。

这里是用得是开源下载工具aria2

之所以用这个下载工具来下载之因为 这个工具可以跟任何语言进行交互实现下载

 

一.下载aria2

下载地址:https://github.com/aria2/aria2/releases

 

二.开启rpc服务

这里语言和aria2交互主要是通过aria2开启rpc服务来实现的

官方参考文档:https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface

 

三.配置aria2

在开启rpc服务前先配置一下 方便以后使用

首先新建一个aria2.conf文件 复制下面所有的  (这里很多也是网上复制的,)

## 全局设置 ## ============================================================

# 日志
#log-level=warn

#log=/PATH/.aria2/aria2.log

# 后台运行
daemon=true

# 下载位置, 默认: 当前启动位置
dir=./Downloads

# 从会话文件中读取下载任务
input-file=./aria2.session

# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=./aria2.session

# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=30

# 断点续传
continue=true

# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M

#bt-tracker=udp://tracker.leechers-paradise.org:6969/announce,udp://tracker.pirateparty.gr:6969/announce,udp://tracker.cuntflaps.me:6969/announce

# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=none

# 客户端伪装
user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

# 禁用IPv6, 默认:false
#disable-ipv6=true

# 其他
always-resume=true
check-integrity=true

## 下载位置 ## ============================================================
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=12

# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5

# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M

# 单个任务最大线程数, 添加时可指定, 默认:5
split=5

# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0

# 单个任务下载速度限制, 默认:0
#max-download-limit=0

# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0

# 单个任务上传速度限制, 默认:0
#max-upload-limit=0

## RPC设置 ## ============================================================
# 启用RPC, 默认:false
enable-rpc=true

# 允许所有来源, 默认:false
rpc-allow-origin-all=true

# 允许非外部访问, 默认:false
rpc-listen-all=true

# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select

# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800

# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>

# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
#rpc-secure=true

# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件,
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥
#rpc-certificate=/path/to/certificate.pem

# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件
#rpc-private-key=/path/to/certificate.key

## BT/PT下载相关 ## ============================================================
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true

# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413

# 单个种子最大连接数, 默认:55
#bt-max-peers=55

# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true

# 本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true

# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true

# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false

# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999

dht-file-path=/opt/var/aria2/dht.dat
dht-file-path6=/opt/var/aria2/dht6.dat

# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K

# 设置 peer id 前缀
peer-id-prefix=-TR2770-

# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0

# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false

# BT校验相关, 默认:true
#bt-hash-check-seed=true

# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true

# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
bt-max-open-files=16

因为在上面的配置文件中有设置aria2.session文件,所以最好在同级目录下创建一个文件命名为aria2.session

 

四.启动aria2 的rpc服务

命令行的方式下进入aria的目录

aria2c.exe --conf-path=./aria2.conf

python爬虫实战之b站视频下载-中

这样就算开启成功了 可以看到 他有一个警告 这里无视即可 本来我们就是本机使用 啥账号密码 对于我们来说 无意义 反而还多了一些不必要的步骤 可以无视

然后可以看到aria是监听在6800端口下

 

五.测试rpc是否可用

查看文档可知 只要往6800/jsonrpc下发送消息 就可以实现下载

python爬虫实战之b站视频下载-中

这里可以看出来 其实rpc使用的就是http post发送数据包 所以我们直接使用python的request的post方式进行发包即可

python爬虫实战之b站视频下载-中

这里两个窗口 下面的是ipython的 上面的是aria2的rpc服务窗口

当我们执行post的时候 上面的窗口接收到就会开始下载 ,因为我这个视频太小了下的比较快这里是已经完成了的

jsonrpc中的下载基本就是这么使用的 需要注意的是referer 没有这个参数可能会下载不下来

dir是保存的路径

params中第一个是视频的地址

基本要注意的就这些

 

总结:

上面只是说了一个method方法的使用 也是最主要的下载的实现 ,如果集成到自己的软件里的花,还需要其他的method参数 例如 当前下载量 总下载量等等 需要其他相关配置请参考官方文档。