还是自己写个 B 站视频爬虫管用

我为什么要写 B 站视频爬虫

这几天沉迷于 B 站的某些剪辑,洗脑循环中,如 up 主 上天下 的《白蛇:缘起》无对白版片尾曲《前世今生》完整版4分06秒 演唱:龚笑笑,链接如下

https://www.bilibili.com/video/BV1Qb411q7Xu

1.png

面对这样一个深得我心的视频,我脑海里瞬间冒出了下载到本地这个需求,一来方便离线播放,二来可以进行再创作(当然会注明出处~),于是乎,我上网查找了 B 站视频下载爬虫。

关于 B 站视频爬虫背后那些事

不查不知道,搜到好多可以下载 B 站视频的插件或库,you-get(https://github.com/soimort/you-get/releases/tag/v0.4.486) 和 IDM(一款多线程下载工具,有 exe 版和浏览器插件,可以嗅探并下载 web 上的媒体文件,包括图片、音频、视频),我试了下,然并软,坑太多,放弃了,还是自己写个吧~

神奇的是,我居然在搜到了自己以前写的一个 b 站视频爬虫(https://blog.csdn.net/ygdxt/article/details/84501500),我欣喜若狂地试了下,发现果然不行了,查阅资料改了 json 解析的一处代码,又可以跑起来了:

def parseHtml(self,html):
#用pq解析得到视频标题
doc = pq(html)
video_title = doc('#viewbox_report > h1 > span').text()

#用正则、json得到视频url;用pq失败后的无奈之举
pattern = r'\<script\>window\.__playinfo__=(.*?)\</script\>'
result = re.findall(pattern, html)[0]
temp = json.loads(result)
# 改了此处,原来是 temp['durl']
for item in temp['data']['durl']:
    if 'url' in item.keys():
        video_url = item['url']
        return{
            'title': video_title,
            'url': video_url
        }

好事多为,有的视频可以正确下载,而有的下载下来是 0kb,我觉得事情肯定没这么简单。进一步查阅资料得知,B 站 2018 前使用的视频格式都是 flv 的,后面技术升级转成 dash 了(可参见 b 站通知:https://www.bilibili.com/read/cv855111),而我之前的爬虫只是针对 flv 的,所以只能下载某些视频。

不仅如此,后面的视频都是声音和图像分离的,下载一个完整的视频我们需要分别下载视频和音频,视频和音频的地址获取和我之前的代码大同小异,不过要注意一点是,下载音视频必须先向 b 站发一个 OPTIONS 请求,我们常用 GET/POST,这个 OPTIONS 可能用的比较少,不过在 requests 库中使用方式区别不大,然后合成,合成音视频的主流库首选 ffmpeg ,嗯,大致有了个技术路线。

插一句,就在上一个月(2020/3/23),B 站将视频 av 号升级到了 BV 号

一直以来,AV号都是B站视频稿件的重要标识,在视频的传播和分享中起到了关键作用。

为了保护稿件信息安全,容纳更多投稿,维护UP主的权益,自2020年3月23日起,AV号将全面升级为BV号。与纯数字的AV号不同,BV号是一段由数字和大小写字母组成的字符串,经过算法自动生成。未来将统一使用BV号作为稿件标识。

同时,2020年3月23日前生成AV号的相关功能保持不变。例如,已分享的稿件链接,AV号搜索,以及动态、评论、私信中的高亮跳转。

此外,用户在复制BV号或者包含BV号的链接后,打开B站APP的同时会自动跳转至该视频

简而言之,就是 2020年3月23日之前的视频都是通过 av 确定的,现在也可以通过 BV 号确定,但是 2020年3月23日之后的视频,就只是 BV 号索引了。

所以我们干脆直接根据 BV 号爬取,网上的绝绝大部分 b 站视频爬虫都是针对 av 号的。

至于我是如何将思路写成代码,一并其中遇到的坑,此处可以省略 1 w 字...

还是直接看怎么获得该工具并使用吧~

如何使用

请欣赏下面这段演示视频,一目了然

点我,视频在此链接地址文章的末尾

关注公众号 月小水长,后台回复,干杯,即可获得下载工具

为了方便使用,将 ffmpeg 环境一并集成到下载工具中,无需重新配置 ffmpeg 环境,也无需配置 Python 环境,开箱即用~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ### YUV颜色空间 视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张图片。 yuv是一种图片储存格式...
    天使君阅读 3,372评论 0 4
  • 亲手了结了它。 弥生撒过的最大的慌,骗了她,也骗了自己。 不过这样也好,对所有人都好。 我们都还有很长的路要走,一...
    阑尘阅读 110评论 0 0
  • 小路无力的说了一声:“这不是我想要的生活。”然后低下了头,拿起面前那杯已经有些凉的咖啡,抿了一口,就望向了窗外。冬...
    奇妙之源阅读 260评论 0 0
  • 我可能会在春天死去 像一颗种子 深埋土地 不晓得 是冷艳 还是明媚 只要骄傲着 都是我想看到的
    一腔方言阅读 126评论 0 0
  • 窗外的雨淅淅沥沥, 雨滴一点一点, 渐渐融化了那颗冻封的心, 一颗颗斗大的雨点, 是一个个奋不顾身投身于大地的精灵...
    Yayummy阅读 253评论 1 6