4

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

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)
4

3 回答 3

11

我刚刚解决了这个问题。按着这些次序。

  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. cipher informats[i]["cipher"]替换为signatureCipher。因此,这条线变成了, parse_qs(formats[i]["signatureCipher"]) for i, data in enumerate(formats)
  5. pytube3 现在应该可以正常工作了。
于 2020-06-28T14:21:02.537 回答
0

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

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')
于 2020-05-22T17:57:46.553 回答
0

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

except KeyError as e:
       print ('I got a KeyError - reason "%s"' % str(e))
       print ('skipping the song - : ' + song)
于 2020-05-22T19:06:35.253 回答