B站视频下载接口分析过程(文章末尾有福利)

首先我们来分析一下B站的视频源

打开浏览器按F12 开发者模式,并模拟切换到手机,如下图

找到b站的视频json接口 链接如下:

https://api.bilibili.com/x/player/playurl?fnval=80&cid=746904707&bvid=BV1pT41157it

参数说明:

(1)avid参数值就是aid,使用时可以用bvid参数代替(它的值就是视频的BV号)

(2)cid参数的值可以通过aid参数获取,它是每个视频的分p编号,同个av号视频里的每p视频都有不同cid值

下面是json文件内容,其中baseUrl就是视频下载链接,json接口里面有多个清晰度,所以有多条视频链接

从上面可知,我们可以根据链接的参数值构造b站的视频接口,进而获取视频的下载链接

1、首先就是获得cid这个参数的值

查询视频cid的接口:

https://api.bilibili.com/x/player/pagelist?bvid=填写视频的BV号

#示例链接

https://api.bilibili.com/x/player/pagelist?bvid=BV1pT41157it

根据这个链接就能查询到视频的cid

2、构造视频接口链接

注意该接口有cid和bvid两个参数

https://api.bilibili.com/x/player/playurl?fnval=80&cid=&bvid=

构造好后:

https://api.bilibili.com/x/player/playurl?fnval=80&cid=746904707&bvid=BV1pT41157it

根据上述接口获得视频下载链接后,如果直接复制链接在浏览器下载是无法打开的,报403错误

因此我们需要在请求的时候加上user-agent和referer头才能正常访问。

headers = {
    'referer':'https://www.bilibili.com/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0',
}

再附上一个查询视频基本信息接口:

https://api.bilibili.com/x/web-interface/view

参数 aid&cid

如需更多b站接口可参考 ?B站API接口合集:

'''
Author: Hmily
Date: 2022-08-20 23:49:02
Blog: https://www.hmily.vip
Copyright (c) 2022 by Hmily, All Rights Reserved.
'''

# GET请求类型接口,均在登录账号后可用

# 获取用户信息
info_url = 'http://api.bilibili.com/x/space/myinfo'

# 获取账号硬币数
coin_url = 'http://account.bilibili.com/site/getCoin'

# 获取视频历史记录
video_history = 'https://api.bilibili.com/x/web-interface/history/cursor'

# 获取当前用户登录信息
login_msg = 'https://api.bilibili.com/x/web-interface/nav'

# 获取视频排行榜中的视频
ranking_list = 'https://api.bilibili.com/x/web-interface/ranking'

# 获取用户的任务完成状态
inquire_url = 'https://api.bilibili.com/x/member/web/exp/reward'

# 获取用户的视频列表 mid值在info接口中获取
get_video_list_url = 'https://api.bilibili.com/x/space/arc/search?mid='

# 获取当前用户为这个视频投的硬币数 aid和bvid选其中一个填写即可
to_coin = 'https://api.bilibili.com/x/web-interface/archive/coins?aid=&bvid='

# 获取当前用户今日投硬币所获得的经验
exp_msg = 'https://api.bilibili.com/x/web-interface/coin/today/exp'

# 直播签到接口
live_sign_url = 'https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign'

# 直播用户信息
live_info_url = 'https://api.live.bilibili.com/xlive/web-ucenter/user/get_user_info'


# 视频接口,内含所有清晰度的视频真实下载链接
video_url='https://api.bilibili.com/x/player/playurl?fnval=80&cid=746904707&bvid=BV1pT41157it'

"""
参数说明:
(1)所有avid参数值就是aid,使用时可以用bvid参数代替(它的值就是BV号)
(2)cid参数的值可以通过aid参数获取,它是每个视频的分p编号,同个av号
     视频里的每p视频都有不同cid值
     获取cid:https://api.bilibili.com/x/player/pagelist?bvid=填写视频的BV号
(3) 我们通过真实视频地址下载视频时需要在请求的时候加上user-agent和b站的referer头才能正常访问

"""

#mp4视频下载接口,这个接口内的视频下载地址可直接访问,无需设置请求头
#自行替换下面的cid和bvid参数
video_url2="https://api.bilibili.com/x/player/playurl?cid=746904707&bvid=BV1pT41157it&platform=html5&high_quality=1"


# 查询视频基本信息接口,需要aid和cid参数
video_msg='https://api.bilibili.com/x/web-interface/view?aid=&cid='


# POST请求类型接口
# 下面的 csrf参数值就是cookie中bili_jct的值
# 点击观看视频
watch_video_url = 'https://api.bilibili.com/x/click-interface/web/heartbeat'
data = {
    'bvid': bvid,
    'played_time': playedTime,
    'csrf': csrf,
}

# 分享这个视频
share_video_url = 'https://api.bilibili.com/x/web-interface/share/add'
data = {
    'bvid': bvid,
    'csrf': csrf
}

# 给视频投币
insert_coins_url = 'https://api.bilibili.com/x/web-interface/coin/add'
data = {
    'bvid': bvid,
    'multiply': 1,
    'select_like': 1,
    'csrf': csrf
}

再提供一个直接拿到B站视频mp4格式地址的接口(自己获取cid和bvid替换即可)

https://api.bilibili.com/x/player/playurl?cid=746904707&bvid=BV1pT41157it&platform=html5&high_quality=1

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注