首先我们来分析一下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