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

基于YouTube Data API爬取评论及回复并规整至DataFrame的技术求助

解决思路:将评论与对应回复规整到DataFrame

你已经搞定了最关键的部分——成功获取到了主评论和回复的所有信息,现在只需要把这些数据结构化,让每一条主评论和它的回复都能正确关联,同时方便后续分析。下面是具体的实现方案:

核心思路

  1. 用一个列表统一收集所有评论(主评论+回复)的结构化数据,每条数据用字典存储,包含明确的字段(比如评论类型、作者、内容、发布时间、点赞数、关联的父评论)
  2. 所有数据收集完成后,一次性转换成DataFrame,这样比循环追加CSV效率高得多
  3. 通过comment_type字段区分主评论和回复,用唯一的评论ID关联回复与对应的主评论(比用文本关联更可靠,避免重复内容干扰)

修改后的完整代码

import pandas as pd

def get_video_comments(service, **kwargs):
    # 初始化空列表,用于存储所有评论和回复的结构化数据
    all_comments = []
    results = service.commentThreads().list(**kwargs).execute()
    
    while results:
        for item in results['items']:
            # 提取主评论的核心信息,用字典存储
            main_comment = {
                "comment_type": "main",
                "comment_id": item['snippet']['topLevelComment']['id'],  # 主评论唯一ID
                "author": item['snippet']['topLevelComment']['snippet']['authorDisplayName'],
                "text": item['snippet']['topLevelComment']['snippet']['textDisplay'],
                "published_at": item['snippet']['topLevelComment']['snippet']['publishedAt'],
                "like_count": item['snippet']['topLevelComment']['snippet']['likeCount'],
                "parent_comment_id": None  # 主评论无父评论,设为None
            }
            all_comments.append(main_comment)
            
            # 处理当前主评论下的所有回复
            if 'replies' in item:
                for reply in item['replies']['comments']:
                    reply_comment = {
                        "comment_type": "reply",
                        "comment_id": reply['id'],  # 回复的唯一ID
                        "author": reply['snippet']['authorDisplayName'],
                        "text": reply['snippet']['textDisplay'],
                        "published_at": reply['snippet']['publishedAt'],
                        "like_count": reply['snippet']['likeCount'],
                        "parent_comment_id": main_comment['comment_id']  # 关联到对应的主评论ID
                    }
                    all_comments.append(reply_comment)
        
        # 处理分页,获取下一页的评论
        if 'nextPageToken' in results:
            kwargs['pageToken'] = results['nextPageToken']
            results = service.commentThreads().list(**kwargs).execute()
        else:
            break
    
    # 将列表转换为DataFrame
    comments_df = pd.DataFrame(all_comments)
    # 保存到CSV,设置index=False避免生成多余的索引列
    comments_df.to_csv('youtube_comments.csv', index=False)
    
    # 返回DataFrame,方便后续的数据分析操作
    return comments_df

关键改动说明

  • 用列表统一收集数据:避免了循环创建小DataFrame并追加CSV的低效操作,同时让代码逻辑更清晰
  • 添加唯一ID关联:使用comment_id和parent_comment_id来关联回复与主评论,彻底解决了评论内容重复时的关联混乱问题
  • 明确区分评论类型:通过comment_type字段可以快速筛选主评论或回复,方便后续做统计分析(比如统计每条主评论的回复数)
  • 结构化字段:每个字段都有明确的含义,后续无论是筛选、排序还是做可视化分析都能快速上手

如果之后你需要分析父子评论的关联关系,比如查看特定主评论下的所有回复,或者统计高赞主评论的回复互动情况,用这个结构的DataFrame会非常容易实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:17:54