使用pytube筛选YouTube视频格式时出现pytube.exceptions.RegexMatchError错误
问题修复方案
错误原因
该pytube.exceptions.RegexMatchError是YouTube更新了网页端播放器的JS代码逻辑,pytube内置的用于匹配节流函数名的正则表达式未适配新的JS结构,导致匹配失败,和你编写的业务代码逻辑无关。
修复步骤
- 首先找到报错提示里的pytube依赖文件:
/home/jay/PycharmProjects/videoinfo/venv/lib/python3.7/site-packages/pytube/cipher.py,用编辑器打开该文件 - 定位到
get_throttling_function_name函数,找到函数内定义正则匹配规则的列表,将原有列表替换为如下内容:
function_patterns = [ r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&.*?\|\|\s*([a-z]+)', r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)', ]
- 保存修改后的文件,重新运行代码即可解决报错
额外代码优化提示
你现有代码中link.streams.filter(progressive="True")的参数值存在语法问题,progressive参数接收布尔值而非字符串,建议修改为link.streams.filter(progressive=True),避免后续筛选视频流时出现不符合预期的结果。
内容的提问来源于stack exchange,提问作者jay Chovatiya
相关产品推荐
相关产品推荐

