如何下载YouTube视频/如何使用pytube

在YouTube上看到一些比较好看的视频,想要把一个系列都下载下来。

简单分析了一下网站,感觉还可以,但是需要费时间,然后就想到了可以用现成的库,之后就想到了以前用过的一个库–pytube。

pytube的文档:https://pytube.io/en/latest/

pytube安装:pip install pytube

首先就是需要可以翻墙,这点是必须要的。

然后就是安装一下这个库。

我还用到了plyer这个库,做windows弹窗用。

plyer windows弹窗

但是我简单上手后发现弹窗会堆积,没去查怎么解决这个问题。

pytube这个库其实很容易就上手了,我下载的视频是有播放列表的,所以可以直接循环列表下载就行,如果是单独的视频的话,使用视频的url就可以下载,不过这样的话,我比较推荐直接使用网站下载(油猴插件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from pytube import YouTube
from pytube import Playlist
from time import sleep
from plyer import notification
from pytube.cli import on_progress


def download_ok(msg):
notification.notify(
title="YouTube下载提示",
message=msg,
app_icon=r"favicon.ico",
timeout=10,
)


a1 = 'https://www.youtube.com/playlist?list='
a2 = "https://www.youtube.com/playlist?list="
b1 = "https://www.youtube.com/playlist?list="
b2 = "https://www.youtube.com/playlist?list="
videoList = [a1, a2, b1, b2]
s = 0
d = ["a1", "a2", "b1", "b2"]
for a in videoList:
p = Playlist(a)
index = 0
proxies = {
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890"
}
f = d[s]
for url in p.video_urls:
while 1:
try:
yt = YouTube(url, proxies=proxies, on_progress_callback=on_progress)
title = yt.title
YTstream = yt.streams.get_highest_resolution()
download_ok("视频{}开始下载".format(title))
print('download ---')
# video.streams.get_highest_resolution().download(output_path="./a1")
YTstream.download(output_path="./"+f)
print('download ok')
download_ok("视频{}下载成功".format(title))
download_ok(title)
sleep(5)
break
except Exception as e:
print(e)
sleep(5)
s = s + 1
print(f+'all download')
print("ok")

其实逻辑是非常简单的,就是循环列表。

我这里是4个列表a1,a2,b1,b2。然后我把这四个列表便利出来,使用Playlist这个方法将该列表的信息取出来。

之后再通过video_urls取出list中所有视频的url。

然后通过Youtube()这个方法初始化一下内容。

再就是下载视频了,我这里之所以有一个while 1和try是因为视频下载可能会出现问题,然后我不想因为问题而耽搁,就直接无限循环了,如果正常的话,就break出来,不正常就重新下载。

更多的用法其实搜一下文档就可以了,当然直接在pycharm可以看提示。