在不使用搜索查询的情况下从所选频道获取 *所有* Youtube 视频 ID
Get *all* Youtube video ids from a chosen channel without using search query
从给定频道获取所有视频信息的最便宜的方法似乎是使用从频道的“contentDetails”中找到的“上传”,如前所述here。但是这个returns只有最近的20000条视频信息。 (在 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), I could get their information using 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 就能得到它们?
嗯,最好的方法(至少在我看来)是使用 Selenium 从 Youtube 收集视频 ID。人们必须找到感兴趣的频道的视频部分,并在向下滚动时收集视频。
从给定频道获取所有视频信息的最便宜的方法似乎是使用从频道的“contentDetails”中找到的“上传”,如前所述here。但是这个returns只有最近的20000条视频信息。 (在 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), I could get their information using 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 就能得到它们?
嗯,最好的方法(至少在我看来)是使用 Selenium 从 Youtube 收集视频 ID。人们必须找到感兴趣的频道的视频部分,并在向下滚动时收集视频。