使用Pytube下载YouTube视频失败,报错__init__: could not find match for ^\w+\W
解决Pytube
__init__: could not find match for ^\w+\W 错误 问题原因
该错误源于YouTube更新了视频加密签名的生成逻辑,旧版本Pytube内置的正则表达式无法匹配新的变量格式。手动修改cipher.py未生效,大概率是正则表达式修改不正确,或是修改的文件并非当前Python环境正在使用的Pytube版本文件。
解决方案
方案1:升级到Pytube最新开发版
稳定版Pytube往往无法及时同步YouTube的更新,直接安装GitHub上的最新开发版本可解决大部分匹配问题:
pip install --upgrade git+https://github.com/pytube/pytube.git
方案2:正确修改cipher.py的正则表达式
若无法升级,先通过pip show pytube查看Pytube的安装目录,找到目录下的cipher.py文件,定位var_regex变量并替换为:
var_regex = re.compile(r"^\$?\w+\W")
保存后重启Python环境,再运行下载器代码。
方案3:添加请求头或OAuth验证
部分场景下,YouTube反爬机制会拦截请求,可通过以下两种方式绕过:
修改你的download函数:
def download(): link = urlentry.get() try: # 添加自定义请求头模拟浏览器 from pytube.request import set_header set_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') # 或启用OAuth验证(首次需登录,后续会缓存登录状态) utube_obj = YouTube(link, use_oauth=True, allow_oauth_cache=True) utube_obj = utube_obj.streams.get_highest_resolution() utube_obj.download() status_lbl.config(text="下载成功") except Exception as e: print(e) status_lbl.config(text=f"下载错误: {str(e)}")
验证修改
完成上述操作后,重新输入YouTube视频URL并点击下载,即可正常获取视频流并完成下载。
内容的提问来源于stack exchange,提问作者PythonLover1878
相关产品推荐
相关产品推荐

