list() returns 来自视频的不同数量的评论
list() returns different number of comments from a video
我正在尝试使用 youtube API 抓取给定 videoId 的评论。
但是爬取的评论数量比实际数量要少。
你有什么想法吗?我的代码如下所示。
from googleapiclient.discovery import build
from typing import List
def get_comments(api, video_id: str, fields: str)-> List[List[str]]:
comments = list()
response = api.commentThreads().list(part='snippet', fields=fields, videoId=video_id, maxResults=50).execute()
all_comment_crawled = True
while all_comment_crawled:
for item in response['items']:
comment = item['snippet']['topLevelComment']['snippet']
comments.append([comment['textOriginal'], comment['likeCount']])
if 'nextPageToken' in response:
response = api.commentThreads().list(part='snippet', videoId=video_id, fields=fields, pageToken=response['nextPageToken'], maxResults=50).execute()
else:
all_comment_crawled = False
return comments
api_key = "MY_API_KEY"
api_obj = build('youtube', 'v3', developerKey=api_key)
video_id = 'fgSvGLxanCo'
fields = 'items(snippet(totalReplyCount, topLevelComment(snippet(textOriginal, likeCount)))), nextPageToken'
comments = get_comments(api_obj, video_id, fields)
print(len(comments)) # returns 1,945 actually is over 2,000
在 YouTube 视频上列出评论时有一个陷阱(我宣布另一个容易掉入的陷阱):
- YouTube 上的评论计数包括所有(未过滤的)评论。 回复已包含在此计数中,但您尚未在您的算法中考虑它们。看看CommentThreads: list
- 使用 commentThreads 时的回复最多 5 条回复。
如果邮件有超过 5 个回复,您必须使用 Comments: list 列出所有回复。
我正在尝试使用 youtube API 抓取给定 videoId 的评论。 但是爬取的评论数量比实际数量要少。 你有什么想法吗?我的代码如下所示。
from googleapiclient.discovery import build
from typing import List
def get_comments(api, video_id: str, fields: str)-> List[List[str]]:
comments = list()
response = api.commentThreads().list(part='snippet', fields=fields, videoId=video_id, maxResults=50).execute()
all_comment_crawled = True
while all_comment_crawled:
for item in response['items']:
comment = item['snippet']['topLevelComment']['snippet']
comments.append([comment['textOriginal'], comment['likeCount']])
if 'nextPageToken' in response:
response = api.commentThreads().list(part='snippet', videoId=video_id, fields=fields, pageToken=response['nextPageToken'], maxResults=50).execute()
else:
all_comment_crawled = False
return comments
api_key = "MY_API_KEY"
api_obj = build('youtube', 'v3', developerKey=api_key)
video_id = 'fgSvGLxanCo'
fields = 'items(snippet(totalReplyCount, topLevelComment(snippet(textOriginal, likeCount)))), nextPageToken'
comments = get_comments(api_obj, video_id, fields)
print(len(comments)) # returns 1,945 actually is over 2,000
在 YouTube 视频上列出评论时有一个陷阱(我宣布另一个容易掉入的陷阱):
- YouTube 上的评论计数包括所有(未过滤的)评论。 回复已包含在此计数中,但您尚未在您的算法中考虑它们。看看CommentThreads: list
- 使用 commentThreads 时的回复最多 5 条回复。 如果邮件有超过 5 个回复,您必须使用 Comments: list 列出所有回复。