使用Pytube从YouTube下载播放列表

Ani*_*dar 1 python pytube

我想使用PyTube库下载YouTube播放列表。目前,我可以一次下载一个视频。我不能一次下载多个视频。

目前,我的意思是

import pytube

link = input('Please enter a url link\n')
yt = pytube.YouTube(link)
stream = yt.streams.first()
finished = stream.download()
print('Download is complete')
Run Code Online (Sandbox Code Playgroud)

结果为以下输出

>> Download is complete
Run Code Online (Sandbox Code Playgroud)

并且YouTube文件已下载。当我尝试使用播放列表链接(示例)进行下载时,只会下载第一个视频。没有输出错误。

我希望能够下载整个播放列表,而无需重新提示用户。

Jea*_*der 11

上述解决方案不再有效。这是下载 Youtube 播放列表中引用的视频的声音流的代码。使用的是 Pytube3,而不是 pytube。请注意,播放列表必须是公开的,下载才能成功。此外,如果您想下载完整视频而不是仅下载音轨,则必须修改 Youtube 标签常量的值。空的 Playlist.videos 列表修复取自此 Stackoverflow 帖子:PyTube3 播放列表返回空列表

import re
from pytube import Playlist

YOUTUBE_STREAM_AUDIO = '140' # modify the value to download a different stream
DOWNLOAD_DIR = 'D:\\Users\\Jean-Pierre\\Downloads'

playlist = Playlist('https://www.youtube.com/playlist?list=PLzwWSJNcZTMSW-v1x6MhHFKkwrGaEgQ-L')

# this fixes the empty playlist.videos list
playlist._video_regex = re.compile(r"\"url\":\"(/watch\?v=[\w-]*)")

print(len(playlist.video_urls))

for url in playlist.video_urls:
    print(url)

# physically downloading the audio track
for video in playlist.videos:
    audioStream = video.streams.get_by_itag(YOUTUBE_STREAM_AUDIO)
    audioStream.download(output_path=DOWNLOAD_DIR)
Run Code Online (Sandbox Code Playgroud)

  • 在包含 1500 多个视频的播放列表上尝试此操作,但我只能从中获取 55 个 URL...有什么建议吗? (2认同)

use*_*846 7

如果需要下载播放列表中每一项的最高质量视频

playlist = Playlist('https://www.youtube.com/watch?v=VZclsCzhzt4&list=PLk-w4cD8sJ6N6ffzp5A4PQaD76RvdpHLP')

for video in playlist.videos:
    print('downloading : {} with url : {}'.format(video.title, video.watch_url))
    video.streams.\
        filter(type='video', progressive=True, file_extension='mp4').\
        order_by('resolution').\
        desc().\
        first().\
        download(cur_dir)
Run Code Online (Sandbox Code Playgroud)


use*_*080 6

此代码允许您将播放列表下载到指定的文件夹

import re
from pytube import Playlist
playlist = Playlist('https://www.youtube.com/playlist?list=Pd5k1hvD2apA0DwI3XMiSDqp')   
DOWNLOAD_DIR = 'D:\Video'
playlist._video_regex = re.compile(r"\"url\":\"(/watch\?v=[\w-]*)")    
print(len(playlist.video_urls))    
for url in playlist.video_urls:
    print(url)    
for video in playlist.videos:
    print('downloading : {} with url : {}'.format(video.title, video.watch_url))
    video.streams.\
        filter(type='video', progressive=True, file_extension='mp4').\
        order_by('resolution').\
        desc().\
        first().\
        download(DOWNLOAD_DIR)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以导入Playlist以实现此目的。在redoc中没有引用播放列表,尽管GitHub存储库中有一部分可在此处找到。脚本的源代码在此处的仓库中。

from pytube import Playlist

playlist = Playlist('https://www.youtube.com/watch?v=58PpYacL-VQ&list=UUd6MoB9NC6uYN2grvUNT-Zg')
print('Number of videos in playlist: %s' % len(playlist.video_urls))
playlist.download_all()
Run Code Online (Sandbox Code Playgroud)

注意:我发现该支持方法Playlist.video_urls无效。这些视频仍在下载中,如此处所示

  • playlist.download_all() 现已弃用并且不起作用。 (4认同)
  • `playlist.video_urls` 列表由 `populate_video_urls()` 方法填充,该方法由 `playlist.download_all()` 调用。调用 `populate_video_urls()` 似乎确实按预期填充了列表。 (2认同)

小智 5

from pytube import Playlist
playlist = Playlist('https://www.youtube.com/playlist?list=PL6gx4Cwl9DGCkg2uj3PxUWhMDuTw3VKjM')
print('Number of videos in playlist: %s' % len(playlist.video_urls))
for video_url in playlist.video_urls:
    print(video_url)
playlist.download_all()
Run Code Online (Sandbox Code Playgroud)
https://www.youtube.com/watch?v=HjuHHI60s44
https://www.youtube.com/watch?v=Z40N7b9NHTE
https://www.youtube.com/watch?v=FvziRqkLrEU
https://www.youtube.com/watch?v=XN2-87haa8k
https://www.youtube.com/watch?v=VgI4UKyL0Lc
https://www.youtube.com/watch?v=BvPIgm2SMG8
https://www.youtube.com/watch?v=DpdmUmglPBA
https://www.youtube.com/watch?v=BmVmJi5dR9c
https://www.youtube.com/watch?v=pYNuKXjcriM
https://www.youtube.com/watch?v=EWONqLqSxYc
https://www.youtube.com/watch?v=EKmLXiA4zaQ
https://www.youtube.com/watch?v=-DHCm9AlXvo
https://www.youtube.com/watch?v=7cRaGaIZQlo
https://www.youtube.com/watch?v=ZkcEB96iMFk
https://www.youtube.com/watch?v=5Fcf-8LPvws
https://www.youtube.com/watch?v=xWLgdSgsBFo
https://www.youtube.com/watch?v=QcKYFEgfV-I
https://www.youtube.com/watch?v=BtSQIxDPnLc
https://www.youtube.com/watch?v=O5kh_-6e4kk
https://www.youtube.com/watch?v=RuWVDz-48-o
https://www.youtube.com/watch?v=-yjc5Y7Wbmw
https://www.youtube.com/watch?v=C5T59WsrNCU
https://www.youtube.com/watch?v=MWldNGdX9zE
Run Code Online (Sandbox Code Playgroud)

我使用的是pytube3 9.6.4,而不是 pytube

现在Playlist.video_urls效果很好。

并且Playlist.populate_video_urls()该功能已被弃用。