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

YouTube V3 API仅获取顶级评论,无法获取回复问题求助

问题排查与修复

你的代码无法获取评论回复的核心原因是调用commentThreads.list时没有指定replies字段作为返回的part。YouTube API默认不会返回回复数据,必须显式声明要获取replies部分;同时,单条顶级评论的回复可能分页,需要额外处理分页逻辑才能拿到全部回复。

具体修复步骤

1. 修改API请求的part参数

将commentThreads().list中的part='snippet'改为part='snippet,replies',这样API才会返回每个顶级评论对应的回复数据。

2. 处理回复的分页

默认情况下,API单次返回的单条顶级评论回复数量最多为100条,如果回复超过这个数量,需要通过nextPageToken循环调用comments.list接口获取剩余回复。

修改后的完整代码

import os
import csv
import googleapiclient.discovery

# 填入你的API密钥
API_KEY = 'API KEY'

# 初始化YouTube API客户端
youtube = googleapiclient.discovery.build('youtube', 'v3', developerKey=API_KEY)

def get_all_comments(video_id):
    all_comments = []

    # 获取所有顶级评论线程(处理分页)
    next_page_token = None
    while True:
        response = youtube.commentThreads().list(
            part='snippet,replies',  # 必须包含replies才能获取回复数据
            videoId=video_id,
            textFormat='plainText',
            pageToken=next_page_token,
            maxResults=100  # 单次请求最多获取100条顶级评论,提升效率
        ).execute()

        for item in response['items']:
            # 添加顶级评论数据
            comment_data = item['snippet']['topLevelComment']['snippet']
            comment_data['authorChannelId'] = comment_data.get('authorChannelId', {}).get('value', None)
            all_comments.append(comment_data)

            # 获取该顶级评论的所有回复(处理回复分页)
            if 'replies' in item:
                replies_next_page_token = None
                while True:
                    replies_response = youtube.comments().list(
                        part='snippet',
                        parentId=item['id'],
                        textFormat='plainText',
                        pageToken=replies_next_page_token,
                        maxResults=100
                    ).execute()

                    for reply_item in replies_response['items']:
                        reply_data = reply_item['snippet']
                        reply_data['authorChannelId'] = reply_data.get('authorChannelId', {}).get('value', None)
                        all_comments.append(reply_data)

                    if 'nextPageToken' in replies_response:
                        replies_next_page_token = replies_response['nextPageToken']
                    else:
                        break

        if 'nextPageToken' in response:
            next_page_token = response['nextPageToken']
        else:
            break
    
    return all_comments

def save_comments_to_csv(comments, file_path):
    if not comments:
        print("未采集到任何评论数据")
        return
    with open(file_path, 'w', encoding='utf-8', newline='') as csvfile:
        fieldnames = comments[0].keys()
        csv_writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        csv_writer.writeheader()
        
        for comment in comments:
            csv_writer.writerow(comment)

if __name__ == "__main__":
    video_id = 'video_id'  # 填入目标视频ID
    comments = get_all_comments(video_id)
    
    custom_location = 'youtube_comments.csv'  # 使用合法文件路径,避免空格或特殊字符
    save_comments_to_csv(comments, custom_location)
    
    print(f"共采集到 {len(comments)} 条评论")
    print(f"评论已保存至 '{custom_location}'")

额外注意事项

  • maxResults参数上限为100,设置后能减少请求次数,提升采集效率
  • 保存CSV的路径建议使用无空格、无特殊字符的合法路径,避免文件保存失败
  • 部分顶级评论可能没有回复,需通过if 'replies' in item判断后再处理

内容的提问来源于stack exchange,提问作者Kate FitzGerald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:54:52