You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YouTube Data API抓取视频评论仅返回20余条如何解决

问题原因
  • YouTube Data API v3的commentThreads.list接口采用分页返回机制,单次请求默认最多返回20条评论线程,就算手动设置maxResults参数,单次请求最大也只能返回100条,剩余的内容必须携带上一次请求返回的nextPageToken参数再次发起请求,才能拿到下一页的数据。你的代码仅发起了一次请求,只能获取到第一页的20条左右结果。
  • 现有代码还存在逻辑bug:遍历回复时错误地重复添加主评论到结果列表,每一条回复都会多存入一次主评论,没有正确存入回复内容。
修复后的代码
from googleapiclient.discovery import build

# 存储所有评论的列表,也可改为函数返回值避免使用全局变量
l = []

def remove_URL(text):
    # 保留你原有去除链接的逻辑即可
    return text

def video_comments(video_id, api_key):
    replies = []
    # 初始化YouTube资源对象
    youtube = build('youtube', 'v3', developerKey=api_key)
    # 分页token,首次请求无需传入
    page_token = None
    
    while True:
        # 发起请求时携带分页token,设置maxResults为100减少请求次数
        video_response = youtube.commentThreads().list(
            part='snippet,replies',
            videoId=video_id,
            maxResults=100,
            pageToken=page_token
        ).execute()

        # 处理当前页的所有评论
        for item in video_response['items']:
            # 提取主评论内容
            comment = item['snippet']['topLevelComment']['snippet']['textDisplay']
            replycount = item['snippet']['totalReplyCount']
            # 提取该条主评论的所有回复
            if replycount > 0:
                for reply in item['replies']['comments']:
                    reply_text = reply['snippet']['textDisplay']
                    replies.append(reply_text)
            # 处理主评论后存入列表
            comment = remove_URL(comment)
            l.append(comment)
            # 处理所有回复后存入列表
            for resp in replies:
                resp = remove_URL(resp)
                l.append(resp)
            # 清空回复列表处理下一条主评论
            replies = []
        
        # 检查是否还有下一页数据,没有则退出循环
        page_token = video_response.get('nextPageToken')
        if not page_token:
            break

# 调用示例
# api_key = "你的YouTube Data API密钥"
# target_video_id = "目标视频的ID(注意不是完整链接)"
# video_comments(target_video_id, api_key)
主要修改说明
  • 新增分页循环逻辑,每次请求后检查是否存在nextPageToken,存在就携带该token发起下一次请求,直到所有页数据都拉取完成
  • 修复了回复存入的错误逻辑,将原本重复添加主评论的代码改为存入处理后的回复内容
  • 新增maxResults=100参数,最大化单次请求返回的评论数量,减少请求次数
  • 注意函数参数需要传入的是视频ID而非完整YouTube链接,如果你之前传的是完整链接,需要先从链接中提取出视频ID再传入函数

内容的提问来源于stack exchange,提问作者Abhishek Jha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:24:02