Getting KeyError: 'url' with PyTube

Getting KeyError: 'url' with PyTube

下载视频时有时会出现错误。例如,我可以尝试下载视频,它会下载,下次我 运行 视频不会下载的脚本会抛出错误。

def search_youtube(song,randomString,playlist_name):
 results = YoutubeSearch(song, max_results=1).to_dict()
 for v in results:
    url = 'https://www.youtube.com' + v['link']
    print(url)

    _filename = song
    format_input = 'mp4'
    format_output = 'mp3'

    print("Downloading...." + ' ' + song)
    time.sleep(5)
    YouTube(url).streams.first().download(filename=randomString,output_path=playlist_name)

我有一些与您的代码类似的东西,希望对您有所帮助:

import webbrowser
import pytube
from subprocess import call

key = input('Input what you want to download: ')
a_website = "https://www.youtube.com/results?search_query="+key
webbrowser.open_new(a_website)

open('url.txt', 'w')
call(['notepad', 'url.txt'])

start = input('Press enter when ready to download >>> ')
with open('url.txt','r') as f:
    urls = f.readlines()
number = len(urls)
num = 0
for url in urls:
    num += 1
    print('Downloading video',num,'of',number)
    yt = pytube.YouTube(url)
    stream = yt.streams.first()
    stream.download()

open('url.txt', 'w')

由于错误消息,我决定跳过无法下载的视频。

except KeyError as e:
       print ('I got a KeyError - reason "%s"' % str(e))
       print ('skipping the song - : ' + song)

我刚刚解决了这个问题。 按照以下步骤操作。

  1. 转到站点包中的 pytube 目录。如果您不确定完整位置的使用位置:pip show pytube3。您会看到站点包的位置。
  2. 在从上述位置打开的 site-packages/pytube 文件夹中,您会看到一个名为 extract.py 的文件。在 IDE 或文本编辑器中打开该文件。
  3. 您会看到一个名为 apply_descrambler 的函数。在该函数内部,可能在 行 301 中,您会看到类似 parse_qs(formats[i]["cipher"]) for i, data in enumerate(formats)
  4. formats[i]["cipher"] 中的 cipher 替换为 signatureCipher 。这样那条线就变成了, parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
  5. pytube3 现在应该可以正常工作了。