4

运行我的 Pytube 脚本时出现此错误:

     signature = cipher.get_signature(js, stream['s'])
     KeyError: 's'

我的代码是这样的:

    url = 'https://www.youtube.com/watch?v='
    train_List = []
    i = 0
    while i < len(my_list):
        if len(my_list[i]) > 6:
            urls = url + my_list[i]
            train_List.append(urls)
            yt=YouTube(train_List[i])
            t=yt.streams.filter(only_audio=True).all()
            t[0].download('/pathtofolder')
            i+=1

我也试过:

    t=yt.streams.filter(file_extension='mp4').all()

我根据此处的建议更改了 cipher.py 和 helper.py 文件:https ://github.com/nficano/pytube/issues/353#issuecomment-455116197

但它并没有解决问题。进行更改后,我得到了上面提到的错误。

接下来,我根据其他一些建议运行了“pip install pytube --upgrade”。下载一些音频文件后仍然收到 KeyError。

根据 github 问题,我还在 mixins.py 中实现了这一点:

    if ('signature=' in url) or ('&sig=' in url) or ('&lsig=' in url):

但现在它在 3 次上传后挂起。

有没有人可以解决这个问题?

4

6 回答 6

1

我通过将 mixins.py 中的第 49 行更改为以下内容来解决此问题(至少对我而言):

signature = cipher.get_signature(js, stream['url'])

代替

signature = cipher.get_signature(js, stream['s'])

然后将第 55-63 行更改为

logger.debug(
    'finished descrambling signature for itag=%s\n%s',
    stream['itag'], pprint.pformat(
        {
            'url': stream['url'],
            'signature': signature,
        }, indent=2,
    ),
)
于 2019-06-06T22:37:55.290 回答
0

有同样的问题,基于从源安装它的其他答案,刚刚检查了我当前的 pytube 版本,它是 9.5.0 并看到最后发布的是 9.5.2,所以我只是运行pip install --upgrade pytube并完美运行

于 2019-09-10T16:15:43.973 回答
0

我做到了pip uninstall pytube

检查了我的 python 版本python --version,原来是 Anaconda 3.6.8 版本。

所以我做到了pip3 install pytubepip3我相信 Python 3。

它现在没有问题。

于 2019-07-14T08:22:47.850 回答
0

解决方法之一:pip install git+https://github.com/nficano/pytube.git

除此之外,请检查此线程

于 2019-06-10T08:19:01.493 回答
0

Have the same problem. If I try a second time it works most of the time...

url = 'https://www.youtube.com/watch?v=gQrkvZeE3Uc'
yt = YouTube(url)
yt.streams.filter(progressive=True, subtype='mp4').order_by('resolution').desc().last().download()

Thanks for any help

于 2019-06-01T10:49:34.620 回答
0

您必须修复 lib/python3.6/site-packages/pytube 中的 cipher.py 文件:

在 cipher.py 中,将从第 38 行开始的模式更改为:

pattern = [
    r'(["\'])signature\1\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
    r'\.sig\|\|(?P<sig>[a-zA-Z0-9$]+)\(',
    r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*c\s*&&\s*d\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?(?P<sig>[a-zA-Z0-9$]+)\(',
    r'\bc\s*&&\s*d\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P<sig>[a-zA-Z0-9$]+)\(',
    r'\bc\s*&&\s*d\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
]
于 2019-06-02T19:21:12.120 回答