您的位置:首页 > 其它

如何批量下载 Youtube 视频

2019-04-09 12:54 941 查看

下载单个视频

如果只想下载某一个视频的话,通过一些网址就可以做到:

下载播放列表

通过上面网址人工一部部下载也是可以的,不过程序员对于这种重复的工作一般通过代码解决。

环境准备

首先需要一个能够科学、上网的工具。并且确保 Python 代码是经过该工具的。

  • 通过 Pycharm 调用代码,可在 Setting 中设置 proxy
  • 直接使用 CLI 调用,需要在代码中添加代理

其次,确保电脑上有 Python3,pip3 环境,然后安装以下库:

  • pip3 install bs4
  • pip3 install requests
  • pip3 install lxml

脚本

from pytube import YouTube
import requests
from lxml import html
import sys

# proxies = {'http': 'http://localhost:1080', 'https': 'http://localhost:1080'}
# 列表页的url
play_list_url = "https://www.youtube.com/watch?v=QOaXm_9S9_0&list=PLIx8QniXH-rElLyjzNMSOXSTbOKsDShyu"
# 文件下载路径
output_path = '.'
# 文件下载名称,后续跟上集数,如:甄嬛传7
filename = '甄嬛传'

result = requests.get(play_list_url)

with open("youtube.html", "wb") as f:
f.write(result.content)

bs = html.fromstring(result.text)
play_list = bs.xpath(
'//div[@class="main-content"]/div[@class="playlist-videos-container yt-scrollbar-dark yt-scrollbar"]/ol/li/a')
if len(sys.argv) > 1:
# 从列表的第 7 集 开始下载
begin = sys.argv[1]
# 到列表的第 8 集 开始下载
end = sys.argv[2]
else:
begin = 0
end = len(play_list)

if begin is 0:
print("下载全部:共",len(play_list),"集")
for i in range(len(play_list)):
print("正在下载第 %s 集..." % str(i + 1))
url = "https://www.youtube.com" + play_list[i].get('href')
print('url:', url)
YouTube(url).streams.first().download(filename=filename + str(i + 1), output_path=output_path)
print("第 %s 集下载完成" % str(i + 1))
else:
print("下载",sys.argv[1],"-",sys.argv[2],'集')
for i in range(int(begin) - 1,int(end)):
print("正在下载第 %s 集..." % str(i + 1))
url = "https://www.youtube.com" + play_list[i].get('href')
print('url:',url)
YouTube(url).streams.first().download(filename=filename + str(i + 1), output_path=output_path)
print("第 %s 集下载完成" % str(i + 1))

使用

根据具体需求修改上述代码,url,下载路径,文件名称等。
默认下载全部,下载部分可传入参数,如:

# 下载 12 - 14 集
python script.py 12 14
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: