我正在尝试编写一个可以从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 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)
`
答案 0 :(得分:1)
您的问题似乎与giacaglia今天修复的错误有关。根据{{3}},可以通过修改mixins.py来修复该错误的解决方案,如链接中所述。您的播放列表应该可以正常工作,而不会遇到上面遇到的KeyError:'url_encoded_fmt_stream_map'问题。
答案 1 :(得分:1)
在新版pytube发行之前,我曾问过这个问题,这个问题已在pytube3中解决,您只需使用pip cmd即pip install pytube3
答案 2 :(得分: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()
玩得开心可以使事情变得很酷!