5

我正在尝试制作一个可以从 YouTube 下载整个播放列表的代码。它适用于某些播放列表,但不适用于少数播放列表。我在下面的代码中显示的播放列表之一。还可以随意在此代码上添加更多功能。如果已经有下载播放列表的代码,请与我分享链接

`

from bs4 import BeautifulSoup
from pytube import YouTube
import urllib.request
import time
import os


## list of link parsed by bs4
s = []


## to name and save the playlist folder and download path respectively 
directory = 'Hacker101'
savePath = "G:/Download/video/"
path = os.path.join(savePath, directory)


## link parser
past_link_here = "https://www.youtube.com/playlist?list=PLxhvVyxYRviZd1oEA9nmnilY3PhVrt4nj"
html_page = urllib.request.urlopen(past_link_here)
x = html_page.read()
soup = BeautifulSoup(x, 'html.parser')
for link in soup.findAll('a'):
    k = link.get('href')
    if 'watch' in k:
        s.append(k)
    else:
        pass


## to create playlist folder
def create_project_dir(x):
    if not os.path.exists(x):
        print('Creating directory ' + x)
        os.makedirs(x)
create_project_dir(path)


## downloading videos by using links from list s = []
for x in set(s):
    link="https://www.youtube.com" + x
    yt = YouTube(link)
    k = yt.title
    file_path = path + '\\' + k + '.mp4'
    try:
        if os.path.exists(file_path):
            print(k + ' is \n' + "already downloaded")
        else:
            j = yt.streams.filter(progressive=True).all()
            l = yt.streams.first()
            print(k + ' is downloading....')
            l.download(path)
            time.sleep(1)
            print('downloading compleat')

##    except Exception:
##        print('error')

    except KeyError as e:
        print('KeyError') % str(e)

`

在此处输入图像描述

4

3 回答 3

5

您的问题似乎与giacaglia今天修复的错误有关。基于Github Commit,可以通过修改您的 mixins.py 来修复该错误的解决方案,如链接中所述。您的播放列表应该可以正常工作,而不会遇到上面遇到的 KeyError: 'url_encoded_fmt_stream_map' 问题。

于 2019-12-24T03:40:06.613 回答
1

我在发布新版本 pytube 之前已经问过这个问题,这个问题在 pytube3 中得到了解决,你只需要使用 pip cmd 安装它,即pip install pytube3

于 2020-05-05T21:43:15.923 回答
0

请查看此文档pytube3 ,我使用了其中的方法,它确实有效.. 第一步基本上是升级 pytube 库: pip3 install pytube3 --upgrade 接下来加载您的代码...对于普通的 youtube 视频下载:

from pytube import YouTube
url = input("Paste the URL here -->>")
yt = YouTube(url)
YouTube(url).streams[0].download()

对于整个播放列表

from pytube import Playlist

url = input("Paste the URL here -->>")
playlist = Playlist(url)
for my_videos in playlist:
     my_videos.streams.get_highest_resolution().download()

玩得开心,做一些很酷的事情!!!

于 2020-04-30T08:18:49.153 回答