如何用PRAW爬取含指定关键词的Reddit子版块帖子评论?
解决PRAW批量爬取Reddit帖子及评论并导出CSV的问题
问题说明
使用PRAW编写Python脚本,爬取指定子版块中含特定关键词的帖子的标题、发布时间、评论数、URL及评论内容。目前能成功将标题、时间、评论数、URL导出至CSV,但评论仅能获取"comment forest"对象,无法提取实际内容;已实现单帖爬取评论的功能,但不知道如何整合到批量搜索流程中。
修改后的完整脚本
import praw import pandas as pd # 初始化Reddit客户端 reddit = praw.Reddit( client_id="xxxxxxxxxxx", client_secret="xxxxxxxxxxxxxx", password="xxxxxxxxxxxxxx", user_agent="xxxxxxxxxxxxxx", username="xxxxxxxxxxxxx", ) # 初始化存储数据的列表 title_list = [] date_list = [] num_comments_list = [] url_list = [] comments_all = [] # 遍历搜索到的帖子 for submission in reddit.subreddit("ChatGPT").search("plagiarism"): # 收集帖子基础信息 title_list.append(submission.title) date_list.append(submission.created_utc) num_comments_list.append(submission.num_comments) url_list.append(submission.url) # 处理当前帖子的评论 submission.comments.replace_more(limit=None) # 展开所有嵌套评论 post_comments = [] for comment in submission.comments.list(): if not comment.stickied: # 跳过置顶评论 post_comments.append(comment.body) # 将当前帖子的所有评论用分隔符拼接成字符串,方便CSV存储 comments_all.append("\n---\n".join(post_comments)) # 生成DataFrame并导出CSV df = pd.DataFrame({ 'Title': title_list, 'Time': date_list, '# of comments': num_comments_list, 'URL': url_list, 'Comments': comments_all }) df.to_csv('plagiarism_search.csv', index=False)
关键修改点
- 整合评论处理逻辑:将单帖爬取评论的代码移到批量遍历的循环内部,对每个搜索到的帖子都执行评论展开和收集操作
- 正确提取评论内容:使用
submission.comments.replace_more(limit=None)展开所有嵌套的评论回复,避免遗漏深层评论;通过comment.body获取评论的实际文本内容 - 优化CSV存储格式:将单个帖子的所有评论用
\n---\n分隔拼接成字符串,确保CSV中每个单元格对应一个帖子的所有评论,避免格式混乱 - 提升效率:把DataFrame的创建和CSV导出操作移到循环外部,避免每次循环都重复写入文件,减少IO开销
内容的提问来源于stack exchange,提问作者rhet_research
相关产品推荐
相关产品推荐

