You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:50:53