b站视频下载技术分享
最近无聊分析了一下b站的视频流协议,简单分享下爬取的流程。
首先先要找到视频对应的aid和cid,aid就相当于av号,而av号对应网页下的每一个视频都有对应的cid,普通视频就是分p,番剧就是集数,aid和cid在网页的源代码里面都能找到,用正则匹配aid和cid这两个关键字就能匹配到,如下代码:
1 url = '' #这里是需要下载的视频网址
2 html = requests.get(url,headers).text
3 aid = json.loads(re.findall(r'"aid":(\d+)',html)[0]) #这里是aid
4 pages = json.loads(re.findall(r'"pages":(\[.+?\])',html)[0])
5 cidlist = [] #这里是cid的列表
6 for i in pages:
7 cidlist.append(i['cid'])
b站视频流地址api如下:
{
"start_with_sap": 1,
"bandwidth": 4112579,
"sar": "1:1",
"backupUrl": [""],
"codecs": "avc1.640028",
"base_url": "",
"backup_url": [""],
"segment_base": {
"initialization": "0-990",
"index_range": "991-4490"
},
"mimeType": "video/mp4",
"frame_rate": "16000/672",
"SegmentBase": {
"Initialization": "0-990",
"indexRange": "991-4490"
},
"frameRate": "16000/672",
"codecid": 7,
"baseUrl": "",
"size": 0,
"mime_type": "video/mp4",
"width": 1920,
"startWithSAP": 1,
"id": 112,
"height": 1080,
"md5": ""
}]
其中的base_url、id和codecs字段是我们需要的。不同的id对应不同的分辨率,codecs对应编码方式,base_url就是对应分辨率和编码方式下的视频流地址。
audio对应的json字符串和video类似,同样是base_url为音频流地址。
(注意其上的api都得在请求头加referer字段,否则无法访问)
视频流地址可以在请求头加range字段,用于分段下载或者部分下载,如不加则为下载所有,代码如下:
headers = {
'user-agent':'',
'referer':'',
'range':'byte=0-99999' #此为range字段,代表下载整个视频从0到9999字节的数据
}
with open('demo_vedio.mp4','wb+') as file1, open('demo_audio.mp3','wb+') as file2:
file1.write(requests.get(vedio_url,headers=headers).content) #下载video
file2.write(requests.get(audio_url,headers=headers).content) #下载audio
接下来就是等资源下载完毕了,如有需要可以用格式工厂将音频视频合并成为一个完整的视频。
总结:b站还是很友好的,没有弄一些加密什么的来防爬,通过这次也大致了解了hash协议的原理,总体来说想下载b站视频并不难。
b站视频下载相关的源码网址:https://github.com/modifyGB/bili_video_download
b站视频下载技术分享的更多相关文章
- 大学MOOC课程视频下载、流文件合并、批量重命名、b站视频下载及学习课程视频推荐
计算机行业技术更新快,编程语言种类多,在当今大数据和人工智能的时代,为了能在相关领域有所成就,就必须掌握好python.R等语言,较好的数学基础和深入的行业背景知识.计算机从业人员务必践行" ...
- 个人新站 【EXP技术分享博客】 落成~ 全新的技术资源~ 欢迎莅临~
对的,我筹备了大半年的个站技术网站正式开张了~ EXP技术分享博客: http://exp-blog.com CSDN上面大部分文章已经迁移过去了,以后也会更多地在新站点更新~ 为了庆祝新站开张,近期 ...
- B站视频下载(VideoHelper)
继续上次的知乎爬虫, 这次开始了哔哩哔哩的爬虫实践: 首先介绍下如何下载吧: VideoHelper 里面有三种方式下载b站视频. 同样的流程, 还是先抓包,分析参数,寻找参数(包括之前的请求包和页面 ...
- 网易视频云技术分享:linux软raid的bitmap分析
网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...
- B站视频下载
借助Chrome插件 bilibili哔哩哔哩下载助手 在谷歌应用商城下载安装后在在浏览器右上角显示如下图标 打开想要下载的视频,网页右下角会有如下图标,点击该图标 点击下面的合并下载按钮即可 htt ...
- 史上最全Java学习视频下载地址分享
http://blog.csdn.net/xlgen157387/article/details/39735141
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
- 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...
- 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)
导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...
随机推荐
- PyQt学习随笔:自定义信号连接时报AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...
- PyQt(Python+Qt)学习随笔:QListView的resizeMode属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的resizeMode属性用于控制调整视图大小时是否再次排列视图中的数据项,其类型 ...
- mysql中table schema的基本操作
我们通常对数据库进行的增删插检操作,是针对数据库中的文件.mysql数据库中还有一些表(是view,只能做select操作)记录了现有表的meta data,比如某个column的名字,它的定义是什么 ...
- 熊海CMS xhcms v1.0代码审计
有空的时候就进行小型CMS的代码审计,这次审计的对象是熊海CMS v1.0 本地环境安装好了之后,可以看到提示安装了锁文件 说明重装漏洞应该不会存在了,这时候丢进seay代码审计系统的代码也出结果了, ...
- NodeService Ensure that Node.js is installed and can be found in one of the PATH directories
今天发布NodeService到服务器,服务器环境是window server 2012 一直报错: [1] Ensure that Node.js is installed and can be f ...
- Scrum冲刺_Day01
一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ...
- 学习笔记:四边形不等式优化 DP
定义 & 等价形式 四边形不等式是定义在整数集上的二元函数 \(w(x, y)\). 定义:对于任意 \(a \le b \le c \le d\),满足交叉小于等于包含(即 \(w(a, c ...
- ADF 第四篇:管道的执行和触发器
Azure Data Factory 系列博客: ADF 第一篇:Azure Data Factory介绍 ADF 第二篇:使用UI创建数据工厂 ADF 第三篇:Integration runtime ...
- Hadoop使用实例 词频统计和气象分析
一.词频统计 下载喜欢的电子书或大量文本数据,并保存在本地文本文件中 编写map与reduce函数 本地测试map与reduce 将文本数据上传至HDFS上 用hadoop streaming提交任务 ...
- element Cascader 多选 点击文字选中
html 部分 1 <el-form-item label="A部署位置" > 2 <el-cascader 3 v-model="itemType.a ...