运行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次上传后挂起。
有人为此解决吗?
答案 0 :(得分:1)
我通过将mixins.py中的第49行更改为此问题(至少对我来说):
Enum
代替
instance (Enum a, Bounded a) => Foldable (Relation a) (Ord ⊢ (->)) Hask where
foldMap (ConstrainedMorphism f) = ConstrainedMorphism $ \case
Fin g -> Prelude.foldMap (Prelude.foldMap f) g
Inf g -> Prelude.foldMap (Prelude.foldMap f . g) [minBound .. maxBound]
然后将第55-63行更改为
signature = cipher.get_signature(js, stream['url'])
答案 1 :(得分:0)
有同样的问题。如果我第二次尝试,大多数情况下都可以使用...
url = 'https://www.youtube.com/watch?v=gQrkvZeE3Uc'
yt = YouTube(url)
yt.streams.filter(progressive=True, subtype='mp4').order_by('resolution').desc().last().download()
感谢您的帮助
答案 2 :(得分: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$]+)\(',
]
答案 3 :(得分:0)
解决问题的方法之一:pip install git+https://github.com/nficano/pytube.git
除此之外,请选中此thread
答案 4 :(得分:0)
我做了pip uninstall pytube
。
用python --version
检查了我的python版本,原来是Anaconda 3.6.8版本。
所以我相信pip3 install pytube
,pip3
是为Python 3设计的。
现在没有问题。
答案 5 :(得分:0)
遇到了同样的问题,只是检查了我当前的pytube版本是9.5.0,看到上一个版本是9.5.2,所以我只运行pip install --upgrade pytube
并效果很好