开发YouTube视频下载工具时pytube报RegexMatchError错误如何解决
报错触发原因
YouTube近期更新了网页端播放器的JavaScript代码结构,调整了节流限速相关函数的命名规则与代码位置,而pytube官方版本长期未更新适配,内置在cipher.py文件中的正则表达式无法匹配到新版的节流函数名称,因此抛出RegexMatchError异常。
解决方案
- 方案1:修改本地cipher.py正则规则
定位到报错信息中给出的cipher.py文件路径:C:\Users\Sanskar\PythonProjects\venv\lib\site-packages\pytube\cipher.py,找到get_throttling_function_name函数内的function_patterns变量,将原有匹配规则替换为以下内容:
function_patterns = [ r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&\s*' r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)', r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])\([a-z]\)', ]
保存文件后重新运行代码即可修复该问题。
- 方案2:安装更新版本的pytube
卸载当前旧版本pytube,安装社区维护的修复版本,执行以下命令:
pip uninstall pytube -y pip install pytube==15.0.0
- 方案3:使用OAuth认证模式
初始化YouTube对象时添加OAuth相关参数,跳过节流函数匹配逻辑,修改代码为:
from pytube import YouTube yt = YouTube( 'https://www.youtube.com/watch?v=yVcjVsk29XQ', use_oauth=True, allow_oauth_cache=True ) streams = yt.streams.filter(adaptive=True)
首次运行时按照终端提示完成YouTube账号授权即可正常使用。
内容的提问来源于stack exchange,提问作者Sanskar Dhıman
相关产品推荐
相关产品推荐

