一、抓取B站视频Aid及Cid
在需要抓取视频的页面按下F12或 Ctrl+Shift+I
按CTRL+F5后进行刷新
在filter处键入aid搜索即可获取到aid及cid
获取到aid=969146977,cid=221310113
二、使用bilibili API
在https://api.bilibili.com/x/player/playurl?avid=&cid=&qn=32 内填入AID及CID
示例: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].url或data.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'



