基于YouTube Data API爬取评论及回复并规整至DataFrame的技术求助
解决思路:将评论与对应回复规整到DataFrame
你已经搞定了最关键的部分——成功获取到了主评论和回复的所有信息,现在只需要把这些数据结构化,让每一条主评论和它的回复都能正确关联,同时方便后续分析。下面是具体的实现方案:
核心思路
- 用一个列表统一收集所有评论(主评论+回复)的结构化数据,每条数据用字典存储,包含明确的字段(比如评论类型、作者、内容、发布时间、点赞数、关联的父评论)
- 所有数据收集完成后,一次性转换成DataFrame,这样比循环追加CSV效率高得多
- 通过
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
相关产品推荐
相关产品推荐

