PyTube3 播放列表返回空列表

Chr*_*sis 5 youtube python-3.x pytube

似乎在过去 2 或 3 周的某个时候,这Playlist门课似乎停止了对我的工作。我尝试了以下改编自他们 GitHub 的代码片段:

from pytube import Playlist
playlist = Playlist("https://www.youtube.com/playlist?list=PLynhp4cZEpTbRs_PYISQ8v_uwO0_mDg_X")

print(len(playlist.video_urls))
for url in playlist.video_urls:
    print(url)
Run Code Online (Sandbox Code Playgroud)

我尝试了多个公共播放列表,但它们都产生了一个空list对象。这段代码大约在 3 周前有效。另外,我正在运行 Python 3.7.6 和最新版本的 PyTube3 (9.6.4)。

有什么我做错了吗?

Chr*_*sis 7

我查看了一下源代码,它似乎会加载 html,然后对/watch/v=...URL执行正则表达式搜索。使用的正则表达式是href=\"(/watch\?v=[\w-]*)但找不到任何匹配项,因为 YouTube 必须更新了他们的 html。他们现在以 JSON 对象的形式发送监视 URL。所以我们应该寻找那个。

这是有效的方法:

from pytube import Playlist
import re

playlist = Playlist("https://www.youtube.com/playlist?list=PLynhp4cZEpTbRs_PYISQ8v_uwO0_mDg_X")
playlist._video_regex = re.compile(r"\"url\":\"(/watch\?v=[\w-]*)")

print(len(playlist.video_urls))
for url in playlist.video_urls:
    print(url)
Run Code Online (Sandbox Code Playgroud)

希望这在下一个补丁之前有用。