抓取网页音频(构建循环附带条件构建bilibiliSpider()类1.主体框架说明)
优采云 发布时间: 2022-03-25 06:02抓取网页音频(构建循环附带条件构建bilibiliSpider()类1.主体框架说明)
从某年开始,B站视频中缓存的视频被分段,比较不方便。所以我个人想用 Python 更自动化。
由于视频和音频是分开的,所以需要先请求视频和音频的URL,然后通过各自的URL获取各自的内容。最后,在moviepy的帮助下合成视频和音频。
关于批处理爬取,一开始觉得太复杂了(当然,相对于其他更快的方法,基于这种方法就复杂了),导致重复出现异常。睡了一觉后,我发现自己豁然开朗。复杂的是,在Network中找到key名后,为了更自动的获取通用ID,走了很多弯路。直到后来我才发现通用 ID 在 URL 中。
大致思路如下:进入喜欢UP主的空间后,点击播放全部(图片1),
图1
→ 进入新页面,找到网址(图片2)),没有附加视频BV,需要换个思路。
图 2
→ 右键查看页面,在Network栏下找到一个特殊的名字(图3),里面收录了Up主的其他视频(图4,5).
图 3
图4
图 5
→思路清晰,我们可以通过请求图2中的页面找到图3所示的信息组,然后请求获取json数据迭代索引的URL获取每个bv_id。
代码及分析如下:
①获取bv_id并导入相关
说明:User-Agent是在网页的header部分获取的,可以自己获取和进入。
②有跳转条件的构造循环
③ 构建bilibiliSpider()类
1.主框架
注意:这里的合成视频和音频的方法已经调整。一开始,我发现ffmpeg不好用。在交流群前辈的指导下,我改用了moivepy,更方便好用。
2.发送通用请求格式(方便
解释:全局表示请求内容在其他方法中是必需的。
3.请求获取header、JSON数据、音视频Url
注:title index、jsonData index、videoUrl index、audioUrl index以及上面的Referer都可以在图中找到,大致流程是右键查看页面获取信息(图6、7、< @k38@ >。
图 6
图 7
图 8
4.保存数据
5.结合的视频和音频
注意:路径一定要正确,否则找不到会报错(可以自己设置路径,可以前后统一)。后面的条件语句在明确之前从单独的视频和音频开始,合成的名称带有加号,防止系统根据单独的视频错误删除。
用ffmpeg结合视频和音频一开始并不顺利(图9),所以我切换到moviepy.
图 9
6.调用方法
说明:全文尽量统一
全文代码如下:
测试运行:
综上所述,还有提升空间,比如下载速度太慢。然后是图像质量的选择。爬的时候默认最高,具体自定义画质还在研究中(就是文中的params好像没啥用,有待测试)。