美文网首页
还是自己写个 B 站视频爬虫管用

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

作者: 月小水长 | 来源:发表于2020-04-13 12:39 被阅读0次

    我为什么要写 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 环境,开箱即用~

    相关文章

      网友评论

          本文标题:还是自己写个 B 站视频爬虫管用

          本文链接:https://www.haomeiwen.com/subject/yklgmhtx.html