代码改变生活-使用You-Get下载bilibili的视频【一】

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/111307733

这篇分享是我在csdn的第100篇原创了,真的是时光飞逝啊;那 这次分享来说些下载B站视频相关的;

这是我写的 代码改变生活的 category,有兴趣可以看看;

个人博客:https://blog.csdn.net/zyooooxie

需求背景

我手机装了bilibili的app,有时候因为喜欢、学习的缘故,会缓存些视频;之前缓存格式为blv,我将其保存到电脑里,都是直接改blv为mp4【改文件格式】;现在发现 有些是两个:audio.m4s和video.m4s,我想保存 得先合并; 感觉好麻烦啊!!!

此外 想弄清楚哪个是哪个,重命名 也很麻烦!!!

so 我想找个途径,只需要输入视频url 或者某up的空间url,就可触发下载,保存;

那要怎么做呢?
找到了知乎,看到 有人推荐you-get;

you-get

看了些教程,感觉 实操不难。

在这里插入图片描述

you-get下载视频

【因为you-get 轮子都已经造好了,我就对着我自己的需求 做些简单的扩展】

细致说下 我的要求:

  1. 可下载单个视频,也可以多个视频批量下载,也可以下载某up的全部视频;
  2. 能够指定下载路径;
  3. 只下视频,不下弹幕;
  4. 尽可能下载高清的视频;

(我不是大会员,最高只能是1080p-80;我了解到的qn值:4k-120 \ 1080p60-116 \1080p+为112 \ 1080p-80 \ 720p60-74 \ 720p-64 \ 480p-32 \ 360p-16)

    def down_bilibili_videos(self, url, multipart=None, down_path=r'F:\bili'):
        """
        不用大会员cookies 下载视频
        :param url:地址 (此处为不带p=x的)
        :param multipart:a multipart video
        :param down_path: 保存路径
        :return:
        """

        if multipart is None:
            cmd = """you-get --format=dash-flv {} -o {} --no-caption""".format(url, down_path)

        else:
            os.chdir(down_path)
            new_dir = url.split('/')[-1]
            if not os.path.exists(new_dir):
                os.mkdir(new_dir)
            down_path = os.path.join(down_path, new_dir)

            cmd = """you-get --format=dash-flv --playlist {} -o {} --no-caption""".format(url, down_path)

        print(cmd)
        os.system(cmd)

【请留意:这是第一版,实际博主使用代码 在第二篇分享第三篇分享

说下我用的options:

  1. 高清画质:我选了–format=dash-flv,是因为 --format=dash-flv 和 --format=flv 我看都是1080p,但第二个 我家里电脑下载速度慢;
  2. –no-caption 不下载其他文件(字幕,歌词,弹幕。。。);
  3. -o 指定保存路径
  4. –playlist 是download all parts

在这里插入图片描述

获取某up主的所有视频BV号

在这里插入图片描述

上图 这个就是我的账号-未登录的时候; up空间

查看投稿,

在这里插入图片描述

查接口请求,

在这里插入图片描述

所以,可以写代码了;【因为我没投过稿,所以响应是没有bvid信息 ;{“code”:0,“message”:“0”,“ttl”:1,“data”:{“list”:{“tlist”:null,“vlist”:[]},“page”:{“pn”:1,“ps”:30,“count”:0}}},可以拿其他up主来试下】

    def get_UP_videos(self, up_mid, pagesize=25):
        url = 'https://api.bilibili.com/x/space/arc/search?mid={}&pn=1&ps={}'.format(up_mid, pagesize)

        # res = requests.get(url, headers=self.change_header)           # 伪造ua
        res = requests.get(url)
        bvid_list = res.json()['data']['list']['vlist']
        bvid = [bv['bvid'] for bv in bvid_list]

        count = res.json()['data']['page']['count']
        chu = math.ceil(count / pagesize)

        if chu != 1:
            for i in range(2, chu):
                new_url = 'https://api.bilibili.com/x/space/arc/search?mid={}&pn={}&ps={}'.format(up_mid, i, pagesize)
                new_res = requests.get(new_url)
                new_bvid = [bv['bvid'] for bv in new_res.json()['data']['list']['vlist']]
                bvid.extend(new_bvid)

        print(bvid)
        return bvid

既然已经知道了BV号,写个循环,直接把所有视频下载下来了。

【下载的视频 仅做学习收藏之用,请尊重原创】

后面还一篇是 you-get下载bilibili视频时 遇到的某些意外情况和解决方式

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值