下载B站视频到本地当素材 - 基于Python
写在最前面:
最近头晕脑胀发烧,咳嗽流鼻涕,重感冒而已,不是那什么。所以居家进行创作吧。今天无聊,天天逛B站,总不能不晓得B站的视频是怎么撸(其实就是下载了)的是吧。

工具和环境:
Python 3.8.9
Pycharm
windows11

今天要采集的网站是B站,目标是将想要的视频下载到本地。B站的视频数据存储格式跟其他的视频网站不太一样(而且B站的视频数据和音频数据是分开的)别人的网站视频可能存储在json数据里,很好找,B站的视频数据,我是废了好大劲才找到,没有json肯定在源码里嘛,不然你怎么渲染。

思路和步骤:
找到想要下载的视频,F12,打开开发者工具(Chrome哈),我这里找的是https://www.bilibili.com/video/BV1nr4y1T7xX?spm_id_from=333.337.search-card.all.click
发现media下没有视频数据被渲染;再找下Fetch/XHR 下面的数据,也没有发现可用的;
源码里继续找,发现了新大陆,只是存储在一行代码里,很难查找,那就用Python把网页响应数据打印出来在去查找就好看一些了;
下面附几张图



正文开始:
先用requests模块请求一下视频播放页的数据。上图:

请求了之后按照标题或者其他字符进行查找,我这里以标题进行查找,找到关键词前面有引号有title,很像json,就往前滑,然后它真的就是个类似json数据的东西。
提取数据:
两张图:


从json数据里提取数据上代码:
至此音频和视频数据都下载完毕。接下来就是将音频数据和视频数据进行合并。用ffmpeg就行了。不过ffmpeg好像对中文的支持不是很好。

需要注意的是:
去请求视频和音频的真实地址的时候,要加防盗链,如果没有防盗链,会403。
等有时间有精力,做个简单的GUI程序,等做GUI的时候,再录个视频。