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

2023-05-16

本文为博主原创,未经许可严禁转载。
本文链接: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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何编写 Nexus Rest Api 的 Get 方法?

    I have groupId artifactId and version 如何使用 Nexus Rest API 编写 GET 请求以获得进一步的工件描述 不确定您要查找什么信息 REST API 文档可在此处获取 Core API ht
  • 一个 $_GET 输入参数,它是一个数组

    我正在尝试将 3 个参数传递给脚本 其中第三个参数 GET value3 应该是一个数组 GET value1 GET value2 GET value3 an array of items 我这样调用脚本 注意我的语法value3 我不确
  • 在 php 中的 _GET 中发送数组

    php 提供了从 GET 发送数组的能力 example test php var1 abc arr 0 1 arr 3 test 将输出 Array var1 gt abc arr gt Array 0 gt 1 3 gt test 这是
  • 如何设置$_GET变量

    我如何设置变量 GET函数将能够使用 无需提交表单action GET GET包含在 URL 中传递给脚本的键 值 如果您有以下网址 http www example com test php a 10 b plop Then GET将包含
  • HTTP 动词 - 何时使用 GET/POST/PUT/Delete

    当您从事 RESTFUL 服务时 您经常会听到这些术语GET POST PUT DELETE 我的问题是这么多动词背后的想法是什么 我可以在以下人的帮助下实现一切GET动词或者如果我想在消息正文中发布一些大数据 我可以使用POST动词 我认
  • Github API v3 不显示所有用户存储库

    如果我输入这个命令 curl https api github com users KiCad repos grep full name 我预计它将返回所有 KiCad 存储库 但它返回 full name KiCad Air Coils
  • jQuery 的 ajax 成功函数的额外参数

    我正在使用以下代码获取 XML 文件 function getMaps toLoad loadMaps length for var i 0 i lt loadMaps length i ajax type GET url loadMaps
  • 在 IE 中通过 Iframe 传递参数时出现问题

    我正在尝试从我的网站执行 HTTP GET 到通过 iframe 引入的另一个网站 在 Firefox 上 您可以在源代码中看到 iframe src 中存在正确的 url 及其正确的参数 并且它可以工作 在 IE 上 您可以在源代码中看到
  • PHP:嵌入另一个 URL 的 URL 的较短/模糊编码?

    我正在为自己编写一个脚本 它基本上可以让我在单个 get 请求的查询字符串中发送一个 URL 和两个整数维度 我使用 base64 对其进行编码 但它太长了 我担心 URL 可能会变得太大 有谁知道另一种更短的方法吗 在 get 请求中收到
  • 缺少“访问控制允许来源”。我的下一步应该是什么?

    我想从这里提取收益率曲线数据 下面的 get 请求返回 200 正常 状态代码 但也显示一条控制台注释 指出跨域请求被阻止 因为缺少 CORS 标头 Access Control Allow Origin get http www trea
  • Facebook Graph API 返回空数据集

    我正在尝试使用 Graph API Explorer 为我的应用程序创建访问令牌 以使用 me accounts 查看我的页面 但是 每次我尝试此操作时 它都会返回一个空数据集 我已经选择了manage pages作为权限 但它仍然不起作用
  • CMS 中搜索表单的 POST 与 GET 方法

    我有点被一件事困住了 只是无法决定在搜索表单中使用 POST 还是 GET 方法 通常我会使用 GET 方法来创建这样的表单 这样用户就可以为他们得到的结果添加书签 但这一次 搜索表单出现在管理区域中 因此结果很快就会相关 并且无需为结果添
  • jquery 使用智能投票插件进行轮询

    我一生都在努力让这个插件正常工作 但我不理解状态函数 因此重试不会触发 poll 10000 function retry get willfail function response status if status success Do
  • 使用 Java 套接字进行 GET 请求

    我正在编写一个简单的程序来向特定的 url 发送 get 请求 http badunetworks com about http badunetworks com about 如果我将请求发送到 则该请求有效http badunetwork
  • PHP GET 变量数组注入

    我最近了解到可以将数组注入 PHP GET 变量来执行代码 php a asd a asdasd b a 这就是我得到的例子 我不知道它是如何工作的 并且想知道这是否可能 PHP 将解析查询字符串 并将这些值注入到 GET超全局数组 同样适
  • 如何通过 Facebook Graph Api 获取用户的朋友在生日当天在用户墙上发布的帖子?

    我正在尝试构建一个 Chrome 扩展程序 我想获取人们专门在用户生日那天发布在用户墙上的所有帖子 我尝试通过 Facebook Javascript SDK 进行调用 但它没有返回我的朋友在生日那天发布的帖子 FB api me feed
  • Javascript 从服务器获取纯文本

    我想从我的服务器接收纯文本 或任何文档 作为字符串变量 例如在警报中显示它我尝试了这个解决方案 wordsurl http alpha test function ButtonClicked showsentence wordsurl fu
  • AJAX 中的 GET 与 POST?

    为什么 AJAX 中有 GET 和 POST 请求 因为它无论如何都不影响页面 URL 由于数据未反映到页面 URL 因此通过 AJAX 中的 GET 传递敏感数据有何区别 您应该根据您的 Web 服务要求使用正确的 HTTP 动词 当处理
  • REST Web 服务 - 动态查询参数

    我需要将动态查询参数发送到 REST Web 服务 GET 方法 如下所示 主机 端口 应用程序 field1 XXX value1 VVV field2 XXX value2 XXX 消费者可以发送参数最多为字段和值 每个字段都映射到值
  • Elasticsearch:如何查询连接数?

    如何询问我的 Elasticsearch 服务器现在有多少个连接 这与插座数量相同吗 我也不知道如何获得这些数字 这与客户端的数量不同 对吧 因为每个客户端可能打开多个连接 找不到任何相关信息 但我确实发现您可以在 Elasticsearc

随机推荐

  • sublime python环境(代码自动补全,调试python脚本等插件)

    用过sublime和pycharm xff0c 两款各有优缺点 xff0c 本人只是用来写一些脚本 xff0c 不开发大型项目 xff0c 选择轻量级的sublime编辑器 xff0c sublime需要根据开发语言 xff0c 自己安装一
  • 解决Vim插入模式下backspace按键无法删除字符的问题

    最近使用某个服务器编辑文件时 xff0c 快捷键i进入插入模式后 xff0c 下方不出现insert模式 xff0c 却可以插入字符 xff0c 但是backspace按键不能删除字符了 xff0c 最终google解决了此问题 xff0c
  • Kafka集群搭建详细步骤

    Kafka集群搭建 1 Kafka的安装需要java环境 xff0c cent os 7自带java1 6版本 xff0c 可以不用重新安装 xff0c 直接使用自带的jdk 即可 xff1b 如果觉得jdk版本太旧 xff0c 也可以自己
  • sublime text 3 打造python3环境(代码自动补全,运行程序,高亮显示)

    最近用python3用的比较多 xff0c 于是整理一下环境 xff0c 此博客仅记录下自己构造python3环境的过程 xff08 sublime text 3版本为3176 xff09 xff1a 安装的一些常用插件和配置过程如下 xf
  • 关于驱动程序的可移植性

    差不多所有的linux内核设备驱动都可以运行在不止一种处理器上 这仅仅因为设备驱动作者遵循一些重要规则 这些规则包括使用合适的变量类型 xff0c 而不是依赖于特定内存页大小 xff0c 提防外部数据的大小端模式 xff0c 设立合适的数据
  • centos7 安装mysql详细流程

    工作中经常需要安装mysql xff0c 每次安装的时候 xff0c 总是用不同的方法安装 xff0c 有错误就解决一下 xff0c 今天又重新装了一次mysql xff0c 记录下过程 xff0c 以后就用这种方式安装了 xff01 1
  • 10000端口无法运行

    1 查询端口 netstat ano findstr 10000 2 查询端口名 tasklist findstr 1572 3 关闭端口 taskkill pid 1572 F
  • Cmake编译-CMAKE_C_COMPILER-NOTFOUND解决

    第一次写博客 xff0c 其实就是记录一下从零开始的学习之路上遇到的各种 bug xff0c 一方面为了防止忘了犯过的错误 xff08 比如下一次 xff09 xff1b 另一方面为了从错误中汲取经历 分析 bug 之前 xff0c 记录一
  • libcurl官方实例代码(HTTP,FTP,上传下载等等)

    http curl haxx se libcurl c example html Some of the Examples simple HTTP simple c shows how to get a remote web page in
  • stm32驱动NRF24L01_原理+代码解析

    目录 概念 废话篇 xff08 24L01简介 xff09 引脚分配 工作模式 通信地址理解 xff08 个人疑难点 xff09 原理分析 寄存器赏析 寄存器操作指令 配置寄存器 xff08 CONFIG xff0c 位置 xff1a 0X
  • CSS实现进度条和订单进度条

    由于近期需要做一个订单进度条 xff0c 比较直观的反应当前订单的状态 xff0c css样式借鉴了网上的相关代码 xff0c 下面是效果图 xff0c 以及实现说明 一 说明 1 首先页面需要引入jQuery的相关js 一般页面都已经引入
  • ROS中CANopen的使用(1)

    ROS中CANopen的使用 xff08 1 xff09 今天终于实现了通过ros来控制无人车 xff0c 心情非常激动 xff0c 先简要记录 工作环境 工控机使用的Ubuntu18 02 xff0c can卡采用的innodisk的UC
  • 组合导航在ROS中的解析(2)

    工作环境 ubuntu18 02 xff0c 组合导航使用网口接口 xff0c ros使用melodic实现过程 include lt ros ros h gt include lt stdio h gt include lt stdlib
  • 上位机与下位机进行交互

    一 上位机与下位机 xff08 1 xff09 什么是上位机 上位机是指可以直接发出操控命令的计算机 这里使用的是winfrom xff08 2 xff09 什么是下位机 下位机是指直接控制设备获取状况的计算机 xff0c 一般是PLC 单
  • alist无法访问文件 提示“failed get link ”这样修复

    阿里网盘挂载alist无法访问文件 xff0c 提示 failed get link invalid X Device Id xff1f 34 Failed get link invalid X Device Id 34 是挂载阿里云网盘到
  • STM32F4应用-串口通信

    STM32F4应用 串口通信 1 基本介绍1 1 简介1 2 串口协议1 3 通信过程 2 配置过程2 1 引脚复用2 2 配置步骤2 3 例子 参考文献 1 基本介绍 1 1 简介 串口通信涉及USART TX RX xff0c GND三
  • 使用ADB命令来停用、卸载荣耀20 PRO的系统应用

    今年双十一买了部荣耀20 Pro手机 xff0c 某天感觉某个系统应用 系统更新 贼烦人 xff0c 过段时间就提醒一次 xff1b 我就被逼着上网搜有没有思路 xff0c 然后就打开了罪恶的大门 个人博客 xff1a https blog
  • Python笔记【二】

    之前分享过一次我在学习Python的笔记 xff0c Python笔记 一 xff0c 最近有些新的收获 xff0c 分享一下 xff1b 个人博客 xff1a https blog csdn net zyooooxie random sa
  • Fiddler 使用命令行和Filters

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 109020837 之前分享过一期 Fiddler断点 修改响应数据 xff0c
  • 代码改变生活-使用You-Get下载bilibili的视频【一】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 111307733 这篇分享是我在csdn的第100篇原创了 xff0c 真的是