Получение ошибки с Pytube: signature = cipher.get_signature (js, stream ['s']) KeyError: 's' - PullRequest
3 голосов
/ 30 мая 2019

У меня была эта ошибка при запуске моего скрипта 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 после того, как он загружает несколько аудио файлов.

Я также реализовал это в mixins.py, для проблем с github:

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

, но теперь он зависает после 3 загрузок.

У кого-нибудь есть исправление для этого?

Ответы [ 5 ]

1 голос
/ 07 июня 2019

Я исправил эту проблему (по крайней мере для меня), изменив строку 49 в mixins.py на эту:

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,
    ),
)
0 голосов
/ 14 июля 2019

Я сделал pip uninstall pytube.

Проверил мою версию Python с python --version, оказалась версией Anaconda 3.6.8.

Так я и сделал pip3 install pytube, pip3 Я думаю, что для Python 3.

Теперь работает без проблем.

0 голосов
/ 10 июня 2019

Один из способов ее решения: pip install git+https://github.com/nficano/pytube.git

Кроме этого, проверьте эту тему

0 голосов
/ 02 июня 2019

Вы должны исправить файл cipher.py в lib / python3.6 / site-packages / pytube:

В файле 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$]+)\(',
]
0 голосов
/ 01 июня 2019

есть такая же проблема.Если я попробую второй раз, это сработает большую часть времени ...

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

Спасибо за любую помощь

...