【Python】哔哩哔哩视频下载第1篇:常规方法与you-get

本系列文章旨在分享python学习的心得,所涉及的视频和up主皆是值得与大家分享的,如有冒犯,望请谅解。

本期任务:使用Python下载B站大佬投稿页所有视频

【Python】第1节:常规方法与you-get

【Python】第2节:进程池的应用

【Python】第3节:Beautifulsoup+requests+selenium获取视频url

【Python】第4节:常见问题的解决(2020年3月23日哔哩哔哩将稿件的「av 号」变更为「BV 号」)

完整GitHub代码:BilibiliDownloader

哔哩哔哩高手云集,各路技术大牛十分活跃,比如:莫烦大佬,CodeSheep,。。。
大佬们的视频精彩,不收藏一些到本地岂不可惜?
网上有不少教程,教你如何下载B站视频,我分享总结了两种比较靠谱的方法分享给大家,希望能帮到大家。


攻略1:哔哩哔哩视频下载器

操作简单,无需安装,完全免费
打开之后,直接输入视频地址和保存位置,
点击解析,选中视频,右键即可下载。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJoRkTPG-1584522983264)(C:\Users\yeyuc\AppData\Roaming\Typora\typora-user-images\image-20200318165835923.png)]
下载速度很ok,一般能达到一般以上的带宽!!!
在这里插入图片描述
缺点:

  • 下载数量比较多时,容易崩,稳定性不大好!
  • 只能下载给定url的全部视频

下载途径:


攻略2:you-get

完整代码

import os
import sys

import you_get


class YouGet():

    def __init__(self, path):
        self.path = path  # 存放视频文件的路径

    def rmfile(self, path):
        """
        删除文件
        :param path: 文件路径
        :return: None
        """
        try:
            os.remove(path)
        except Exception as e:
            print(e)

    def download(self, url):
        sys.argv = ['you-get', '-o', self.path, url]
        you_get.main()

        # 下载完成,删除xml文件
        for file in os.listdir(self.path):
            if file[-3:] == 'xml':
                self.rmfile(os.path.join(self.path, file))

if __name__ == "__main__":
    path = r"视频存放路径"
    url = ["待下载的视频列表"]
    yg = YouGet(path)
    for url in urls:
        yg.download(url)

核心部分讲解

注:请确保已安装配置好python环境和you-get(第三方库)
YouGet类:

  • rmfile():you-get每下载完成一个视频,便会产生一个xml文件,rmfile()负责在下载完成后删除它。
def rmfile(self, path):
        """
        删除文件
        :param path: 文件路径
        :return: None
        """
        try:
            os.remove(path)
        except Exception as e:
            print(e)
  • download():输入url,you_get将开启下载工作,控制台可以看到实时的下载进度。下载完成,调用rmfile()删除xml文件
 def download(self, url):
        sys.argv = ['you-get', '-o', self.path, url]
        you_get.main()

        # 下载完成,删除xml文件
        for file in os.listdir(self.path):
            if file[-3:] == 'xml':
                self.rmfile(os.path.join(self.path, file))

效果图

在这里插入图片描述

未完待续。。。

本节只使用了一个python进程,对CPU和带宽的利用率很低,下一篇我们将解决这个问题。
【Python】哔哩哔哩视频下载第2篇:进程池的应用

原创文章 36 获赞 32 访问量 2731

猜你喜欢

转载自blog.csdn.net/weixin_43868754/article/details/104949078