B站视频自某年以后其缓存的视频皆为分段分开的,比较不方便。因此个人想着用Python将其更加自动化。
既然视频和音频分开了,那么必然需要先请求获取视频和音频的url再通过各自的url分别获取各自的内容。最后再借助moviepy将视频和音频合成。
关于批量处理爬取,一开始想得过于复杂(当然,相较于其他更快的方式,基于此方式来说是复杂的),导致连连异常。经过一觉,发现豁然开朗。复杂点在于当找到位于Network中的关键name之后,想着更加自动化的获取通用ID走了不少弯路。后面才发现通用ID就在网址中。
大体思路如下:在进入喜欢UP主的空间后,点击播放全部(图1),

图1
→进入新页面,发现网址(图2),并没有附着视频BV,因此需要换一种方式思考。

图2
→右键检查页面,在Network栏下发现了特殊name(图3),里面包含了Up主其他的视频(图4,5)。

图3

图4

图5
→思路清晰起来了,我们可以通过请求图2页面,找到图3所示信息群,再请求该URL获取json数据迭代索引获取各bv_id。
代码及分析如下:
①获取bv_id并导入相关

说明:User-Agent获取在网页Headers部,可自行获取键入。
②构建循环附带跳出条件

③构建bilibiliSpider()类
1.主体框架

说明:此处的合成视频和音频方法是调整过的,起初使用ffmpeg发现不太好使,经过交流群前辈指导改用moivepy,较方便且好使。
2.发出通用请求格式(方便

说明:global意味在于其他方法处需要请求内容。
3.请求获取标题,JSON数据,视频和音频Url

说明:此处的title索引、jsonData索引、videoUrl索引、audioUrl索引和上文的Referer等信息皆可在图中找到,获取大概流程皆为右键检查页面获取信息(图6,7,8)。

图6

图7

图8
4.保存数据

5.合成视频和音频

说明:路径一定要对,不然找不到会报错(可以自己设置路径,前后统一即可)。后面条件语句那开始是清楚之前单独的视频和音频,合成后的名字多了加号,以防被系统按照单独的视频给误删。
起初使用ffmpeg合成视频和音频并不顺利(图9),因此改用moviepy。

图9
6.调用方法

说明:全文尽量统一
全文代码如下:




试运行:

综上,还有提升空间,比如下载速度太慢。然后是画质的选择,爬的时候默认是最高的,具体自定义画质还在研究(即文中的params貌似没啥用,待测试)。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@ZLME.COM 举报,一经查实,立刻删除。