慢慢爬虫路3-B站视频下载

批量下载b站视频

前提:已经将我想要下载的视频url链接爬到并保存到csv文件中,接下来就是通过这些url链接下载视频了。
注意:本分享仅供学习参考使用!无意侵犯任何人著作权!
在网上找了很多批量下载的介绍,基本都是爬取某个up主的所有视频,然后直接在命令行中使用you-get语句,而我的csv列表有1000条。。。显然不可能在命令行使用you-get语句了(岂不累死,虽然之前没找到方法的时候的确想过。。。)
话不多说进入正题,首先明确使用什么方法下载视频

1.you-get库

you-get库真的好用!它可能也有不足之处,但是瑕不掩瑜,目前我使用并未发现任何缺点,悔恨今天才发现这个库。

you-get库的下载

可以使用两种方法:
(1)直接在命令行

pip install you-get
pip3 install you-get

上面哪个有用用哪个,但是这个针对的是你使用的python环境就是你下载python时的python环境,我用anaconda新建了一个环境py36,基本代码都使用该环境,因此我是使用方法2
(2)直接在anaconda里面搜you-get库并下载
这个我用是可行的,有的博主说anaconda下载半天还是不行,我就不知道了。

2.ffmpeg的下载

下载方法参考

https://jingyan.baidu.com/article/3c48dd3473177da00ae3587f.html

这里我也比较混乱,装好ffmpeg后,下载还是flv格式,然后我又去anaconda下载了ffmpeg的库,不知道是哪个起了作用。大家可以都试一下。

3.python调用you-get

因为我是批量读取csv文件里面的url链接再进行下载,所以用pycharm比较方便,代码也很简单:

import sys
import you_get
import csv
import time


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


# 进度条
def view_bar(num, total):
    rate = float(num) / float(total)
    rate_num = int(rate * 100)
    bar = '\r[%s%s]%d%%,%d' % ("=" * rate_num, "" * (100 - rate_num), rate_num, num)
    sys.stdout.write(bar)
    sys.stdout.flush()


if __name__ == '__main__':
    with open("bilibili_url.csv", 'r', encoding='utf-8') as fp:
        reader = csv.reader(fp)
        j = 0
        for i in reader:
            url = ''.join(i)
   		    # 视频输出的位置
            path = 'F:\\b站视频'
            download(url, path)
            # 适当休息,防止ip被封
            time.sleep(3)
            j += 1
            view_bar(j, 1000)

我本人在进行下载时,刚开始没有下载ffmpeg因此下载格式时flv,无法直接在电脑上查看很不方面,一同操作猛如虎后(我也不知道真正作用的是什么),再次运行代码,视频下载格式就自动转换成mp4格式了。
并且!you-get库还自动下载了弹幕(前几天为了弹幕熬秃了头都没有下载所有历史弹幕)
视频下载结果:
(因爬取的内容较为敏感被封了。。。)
爬到一半发现出现如下错误:

you-get: [error] oops, something went wrong.
you-get: don't panic, c'est la vie. please try the following steps:
you-get:   (1) Rule out any network problem.
you-get:   (2) Make sure you-get is up-to-date.
you-get:   (3) Check if the issue is already known, on
you-get:         https://github.com/soimort/you-get/wiki/Known-Bugs
you-get:         https://github.com/soimort/you-get/issues
you-get:   (4) Run the command with '--debug' option,
you-get:       and report this issue with the full output.

应该是B站反爬,ip被封了。。。
之后发现等待几个小时就可以恢复,或者将下载频率调低一点,即可顺利下载。
以下为全部代码:

import sys
import you_get
import csv
import time


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


def view_bar(num, total):
    rate = float(num) / float(total)
    rate_num = int(rate * 100)
    bar = '\r[%s%s]%d%%,%d' % ("=" * rate_num, "" * (100 - rate_num), rate_num, num)
    sys.stdout.write(bar)
    sys.stdout.flush()


if __name__ == '__main__':
    with open("bilibili_url.csv", 'r', encoding='utf-8') as fp:
        reader = csv.reader(fp)
        j = 0
        for i in reader:
            # 视频网站的地址
            url = ''.join(i)
            # url = 'https://www.bilibili.com/video/av31059492?from=search&seid=8538131285851066960'
            # 视频输出的位置
            path = 'F:\\b站视频'
            download(url, path)
            time.sleep(3)
            j += 1
            view_bar(j, 91)
            # break

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值