当我尝试使用pytube下载视频时pytube.exceptions.RegexMatchError: get_throttling_function_name:无法找到多个匹配项。
我在这里看到这个,但是当我尝试它不工作。(如果是唯一的决定,请发送cipher.py的所有代码)
下面是代码
from pytube import YouTube
stream = YouTube("https://www.youtube.com/watch?v=SBQprWeOx8g").streams.get_highest_resolution()
stream.download('video.mp4')
升级pytube到12.0.0
python3 -m pip install --upgrade pytube
然后如果你得到错误:AttributeError: 'NoneType'对象没有属性'span'进入python根目录,如下所示:
C:Users#AppDataLocalProgramsPythonPython310Libsite-packagespytubeparser.py
修改这一行:152: func_regex = re.compile(r"function([^)]+)")
to this: 152: func_regex = re.compile(r"function([^)]?)")
如果不工作,请尝试:在pytube/cipher.py第311行:
change: name = re.escape(get_throttling_function_name(js))
to: name = "hha"
我也有类似的问题。
跟踪错误,似乎故障点在cipher.py
的286处array = re.search(
r'var {nfunc}s*=s*([.+?]);'.format(
nfunc=re.escape(function_match.group(1))),
js
)
这一行应该在它给定的youtubeObject.js中找到一个特定的赋值,在我的例子中,所讨论的行实际上确实存在,看起来像这样:
var Msa=[ema],Jsa=!1;
现在我很确定,这是一个逗号,抛出了一个扳动的东西,正则表达式期望行以一个普通的分号结束,因为它会找到的行没有;在]之后,数组找到None并抛出错误
我从
编辑了第287行r'var {nfunc}s*=s*([.+?]);'.format(
r'var {nfunc}s*=s*([.+?])[;,]'.format(
,以便它能够匹配单独的赋值或与第二个变量一起完成的赋值(就像这里一样)
不幸的是,我是一个业余爱好者,不能可靠地告诉你软件包的位置,但在我的计算中,我通过微软商店重新安装了python,我的cipher.py位于C:Users###AppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagespytubecipher.py