从Reddit收集评论,输出到CSV文件

问题描述 投票:1回答:3

我正在尝试从Reddit上的某个提交中抓取评论,并将其输出到CSV文件。

import praw
Import csv

reddit = praw.Reddit(client_id='ClientID', client_secret='ClientSecret', user_agent='UserAgent')

Submission = reddit.submission(id=“SubmissionID”)

with open('Reddit.csv', 'w') as csvfile:
    for comment in submission.comments:
        csvfile.write(comment.body)

问题在于,对于每个单元格,注释似乎都是随机拆分的。我希望每个评论都在自己的单元格中。关于如何实现这一目标的任何想法?

python reddit praw
3个回答
0
投票

您正在导入csv库,但实际上并没有使用它。利用它,您的问题可能会消失。

https://docs.python.org/3/library/csv.html#csv.DictWriter

import csv
# ...    
comment = "this string was created from your code"
# ...
with open('names.csv', 'w', newline='') as csvfile:
    fieldnames = ['comment']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'comment': comment})

0
投票

要在Python中编写CSV文件,请使用the csv module,特别是csv。您可以在代码的顶部导入该模块,但是从不使用它。

在您的代码中使用此代码,它看起来像:

csv.writer()

[这里,我们使用csv.writer()从打开的文件创建CSV编写器,我们将其称为with open('Reddit.csv', 'w') as csvfile: comment_writer = csv.writer(csvfile) for comment in submission.comments: comment_writer.writerow([comment.body]) 。然后,对于每个注释,我们将另一行写入CSV文件。该行表示为列表。由于每行只有一条信息要写入,因此列表仅包含一项。该行是csv.writer()

comment_writer模块负责确保将带有换行符,逗号或其他特殊字符的值正确格式化为CSV值。


[请注意,对于某些带有很多注释的提交,您的PRAW代码可能会引发[comment.body]处的异常。 csv,我鼓励您阅读该书以了解更多信息,但请注意,通过进一步修改循环,我们可以避免在代码中发生这种情况:

'MoreComments' object has no attribute 'body'

而且,您的代码仅获得提交内容的顶级注释。如果您对更多内容感兴趣,请参阅PRAW docs discuss this,它是有关如何从提交中获得不仅仅是顶级评论的更多信息。


0
投票

我猜这些单元不是随机分裂的,而是以逗号,分号分隔的。您可以使用delimiter参数选择要将单元格拆分为哪个字符。

from praw.models import Comment

# ...

with open('Reddit.csv', 'w') as csvfile:
    comment_writer = csv.writer(csvfile)
    for comment in submission.comments:
        if isinstance(comment, Comment):
            comment_writer.writerow([comment.body])
© www.soinside.com 2019 - 2024. All rights reserved.