6 回答
TA贡献1864条经验 获得超2个赞
现在已经100%修复了:
https://github.com/nficano/pytube/pull/767#issuecomment-716184994
如果其他人遇到此错误或问题,请在终端或 cmd 中运行此命令: python -m pip install git+https://github.com/nficano/pytube
尚未随 pip 安装一起发布的 pytubeX 更新。GitHub 链接是当前开发人员对情况的解释。
TA贡献1847条经验 获得超11个赞
我也遇到了同样的麻烦,但我保证最上面的答案不能解决任何问题,只是隐藏问题,直到它再次出现。我调查了“extract.py”文件的范围,发现了一个错误。该范围通过字典搜索在视频所在的 Youtube 页面的源代码中搜索“字符串”片段,例如:
#Example ---------------
Vars = {
'name':'luis'
'age':'27'
}
print(Vars['name'])
result: 'luis'
#Extract.py Code -------
def js_url(html: str) -> str:
"""Get the base JavaScript url.
Construct the base JavaScript url, which contains
the decipher
"transforms".
:param str html:
The html contents of the watch page.
"""
base_js = get_ytplayer_config(html)["assets"]["js"]
return "https://youtube.com" + base_js
错误:
base_js = get_ytplayer_config(html)["assets"]["js"]
KeyError: 'assets'
之所以给出这个源代码片段,是因为该源代码片段不支持字典搜索,因此出现 'KeyError' 键错误,因为 'assets' 不是有效键,并且源代码不是字典。所以我做了这个脚本,我相信它取代了原来的脚本,但在我的脚本中,特别是出现了其他错误。
def js_url(html: str) -> str:
"""Get the base JavaScript url.
Construct the base JavaScript url, which contains
the decipher
"transforms".
:param str html:
The html contents of the watch page.
"""
base_js = html[html.find('js') + 4:html.find('.js')
+ 4]
return "https://youtube.com" + base_js
上面的脚本搜索函数想要的字符串形式,而不是字典形式。
我希望我为未来更完整的解决方案做出了贡献:)
TA贡献1852条经验 获得超7个赞
将此函数添加到 extract.py
def get_ytplayer_js(html: str) -> Any:
"""Get the YouTube player base JavaScript path.
:param str html
The html contents of the watch page.
:rtype: str
:returns:
Path to YouTube's base.js file.
"""
js_url_patterns = [
r"\"jsUrl\":\"([^\"]*)\"",
]
for pattern in js_url_patterns:
regex = re.compile(pattern)
function_match = regex.search(html)
if function_match:
logger.debug("finished regex search, matched: %s", pattern)
yt_player_js = function_match.group(1)
return yt_player_js
raise RegexMatchError(
caller="get_ytplayer_js", pattern="js_url_patterns"
)
并将 extract.py 中的函数“js_url”更改为:
def js_url(html: str) -> str:
"""Get the base JavaScript url.
Construct the base JavaScript url, which contains the decipher
"transforms".
:param str html:
The html contents of the watch page.
"""
base_js = get_ytplayer_config(html)["assets"]["js"]
return "https://youtube.com" + base_js
到:
def js_url(html: str) -> str:
"""Get the base JavaScript url.
Construct the base JavaScript url, which contains the decipher
"transforms".
:param str html:
The html contents of the watch page.
"""
base_js = get_ytplayer_js(html)
return "https://youtube.com" + base_js
TA贡献2036条经验 获得超8个赞
我遇到了同样的问题,更新 pytube
到当前可用的最新版本问题消失了。
pip install pytube==10.0.0
或者
pip install --upgrade pytube
TA贡献1848条经验 获得超10个赞
如果您正在使用该软件包pytube
或pytube3
,我建议您卸载它并安装pytubeX
。无需更改导入。我发现它的工作更加可靠。
编辑:从评论中,如果这些都不起作用,请尝试pytube4
编辑:pytube
现在再次维护!
添加回答
举报