urllib2 - Pytube 出错:signature = cipher.get_signature(js, stream['s']) KeyError: 's'
问题描述
运行我的 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 次上传后挂起。
有没有人可以解决这个问题?
解决方案
我通过将 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,
),
)
推荐阅读
- java - 如何在没有 Eclipse 的情况下将 Web 应用程序部署到 tomcat?
- php - 提交数据并显示未定义的偏移量:3c 我使用了 forloop
- php - 如果 in_array 没有使用指定的模板
- mysql - 导入mysql数据时,sqoop有一些问题
- reactjs - JSX 元素类型“CommonHeader”没有任何构造或调用签名
- redhat - 无法启用 rhel-7-server-devtools-rpms 来安装 llvm-toolset-7
- javascript - 取消选中一个复选框,该复选框在 Angular 5 中被选中并冻结了一个条件
- python - 是否可以从 python 中的另一个应用程序连接线程?
- regex - 使用 SED 或 AWK 删除特定 CSV 列中的所有引号
- python - 如何在 Python 上使用 bs4/selenium 从解析的代码中创建 Pandas DataFrame?