首页 > 解决方案 > 不使用搜索查询从所选频道获取*所有* Youtube 视频 ID

问题描述

从给定频道获取所有视频信息的最便宜的方法似乎是使用从频道的“contentDetails”中找到的“上传”,如此处所述。但这只会返回最近的 20,000 条视频信息。(在 Python 中)

CNN_ID = "UCupvZG-5ko_eiXAupbDfxWw" # CNN channel ID
search_kwargs = {
    "part": "contentDetails",
    "id": CNN_ID,
}
results = youtube.channels().list(**search_kwargs).execute()
playlist_id = results["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]

search_kwargs = {
    "part": "snippet",
    "playlistId": CNN_ID,
}
results = youtube.playlistItems().list(**search_kwargs).execute()
n_total = results["pageInfo"]["totalResults"] # 20000

似乎包含在其中一个播放列表(例如CNN)中的所有视频,我都可以使用Playlists获取他们的信息,例如

search_kwargs = {
    "part": "snippet",
    "channelId": CNN_ID,
}
results = []
while True:
    results.extend(youtube.playlists().list(**search_kwargs).execute()["items"])
    if "nextPageToken" not in results[-1]:
        break
    search_kwargs["pageToken"] = results[-1]["nextPageToken"]
pids = [item["id"] for item in results]
n_total = 0
for pid in pids:
    search_kwargs = {
        "part": "snippet",
        "playlistId": pid,
    }

    results = youtube.playlistItems().list(**search_kwargs).execute()
    n_total += results["pageInfo"]["totalResults"]
# n_total == 42579

这些视频包括较旧的视频。但我仍然无法获取未包含在任何播放列表中的旧视频的信息。有没有办法在不使用Search的情况下获得它们?

标签: pythonyoutube-data-api

解决方案


好吧,做到这一点的最好方法(至少据我所知)是使用 Selenium 从 Youtube 收集视频 ID。向下滚动时,必须找到感兴趣频道的视频部分并收集视频。


推荐阅读