嘘~ 正在从服务器偷取页面 . . .

bilibili视频抓取源视频地址


一、抓取B站视频Aid及Cid

打开需要抓取的视频

在需要抓取视频的页面按下F12Ctrl+Shift+I

切换至Network标签

CTRL+F5后进行刷新

依次搜索AID以及CID

filter处键入aid搜索即可获取到aidcid

cid=221310113&aid=969146977

获取到aid=969146977cid=221310113

二、使用bilibili API

https://api.bilibili.com/x/player/playurl?avid=&cid=&qn=32 内填入AIDCID

示例:https://api.bilibili.com/x/player/playurl?avid=969146977&cid=221310113&qn=32

获取的url有效时间为120min,超时失效需要重新获取

需注意&会被转义为\u0026需要进行替换


Bilibili API url参数:

参数名 类型 内容 必要性 备注
avid num 课程avID 必要
ep_id num 课程epID 必要
cid num 视频CID 必要
qn num 视频清晰度选择 非必要 未登录默认32(480P) 登录默认64(720P) 值含义见下表
fourk num 是否允许4K视频 非必要 默认为0 画质最高1080P:0 画质最高4K:1

分辨率代码:

含义
16 360P 流畅
32 480P 清晰
64 720P 高清(登录)
74 720P60 高清(大会员)
80 1080P 高清(登录)
112 1080P+ 高清(大会员)
116 1080P60 高清(大会员)
120 4K 超清(大会员)

json回复:

根对象:

字段 类型 内容 备注
code num 返回值 0:成功 -400:请求错误 -404:无视频 -403:权限不足(未购买)
message str 错误信息 默认为success
data obj 数据本体

data对象:

字段 类型 内容 备注
accept_format str 视频支持的分辨率的格式
code num 0
durl array 视频分段
seek_param str start
no_rexcode num 0
format str 视频格式
fnval num 0
video_project bool true
fnver num 0
message str
type str 视频格式
accept_quality array 视频支持的分辨率列表
quality num 视频分辨率代码 值含义见上表
timelength num 视频长度 单位为毫秒 不同分辨率可能有略微差异
result str suee 作用尚不明确
seek_type str offset 作用尚不明确
has_paid bool false 作用尚不明确
supportFormats array 视频分辨率详细列表
from str local 作用尚不明确
video_codecid num ??? 作用尚不明确
accept_description array 视频支持的分辨率列表
status num 0 作用尚不明确

data中的durl数组:

类型 内容 备注
0 obj 视频分段1信息
n obj 视频分段(n+1)信息
…… obj ……

durl数组中的对象:

字段 类型 内容 备注
size num 视频大小 单位为Byte
ahead str 作用尚不明确
length num 视频长度 单位为毫秒
vhead str 作用尚不明确
backup_url array 备用视频流
url str 视频流url 链接有效时间为120min
order num 视频分段序号 某些视频会分为多个片段

durl数组中的对象中的backup_url数组:

类型 内容 备注
0 str 备用视频流url 有效时间为120min

data中的supportFormats数组:

类型 内容 备注
0 obj 分辨率详细信息1
n obj 分辨率详细信息(n+1)
…… obj …… ……

supportFormats数组中的对象:

字段 类型 内容 备注
format str 分辨率名称
description atr 分辨率备注
quality num 分辨率代码

data中的accept_description数组:

类型 内容 备注
0 str 分辨率名称1
n str 分辨率名称(n+1)
…… str ……

data.durl.[1-n].urldata.durl.[1-n].backup_url.[0]中的内容作为url进行GET操作, 如果有多个视频, 需要手动合并处理

需要验证请求referer.bilibili.com域名下(防盗链),且user-agent 不为空

referer或user-agent错误的情况会返回403 Forbidden故无法获取

以上述视频url为例:

wget 'https://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/93/59/132105993/132105993_da2-1-116.flv?e=ig8euxZM2rNcNbNghzTBhwdlhbNz7bUVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1591596728&gen=playurl&os=ks3cbv&oi=606633803&trid=76bea9a9e56f4cb89a9aff2f8213c9acu&platform=pc&upsig=b271bf493bff32ffe62969582c8d18b4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&orderid=1,2&logo=40000000'\
-e 'https://www.bilibili.com'\
-O 'Download_video.flv'

本文参考:bilibili-API-collect


文章作者: InitCool
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 InitCool !
评论
 上一篇
使用Github+jsDelivr存储视频 使用Github+jsDelivr存储视频
Matery主题的主页使用了Dplayer插件是可以播放视频的,由于博主用的视频文件较大,用不起各家的对象存储服务,故在好兄弟那里嫖来了用Github+jsDelivr的方式来存储视频。
2020-09-12
下一篇 
又拍云全站加速使用指南 又拍云全站加速使用指南
之前博客一直部署在Coding,由于Coding频繁抽风,4月份的时候,朋友推荐了又拍云全站加速。又拍云有一个又拍云联盟的活动,加入之后每月可以获取10G的存储空间和15G的CDN流量。
2020-08-21
  目录