我正在尝试从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)
问题在于,对于每个单元格,注释似乎都是随机拆分的。我希望每个评论都在自己的单元格中。关于如何实现这一目标的任何想法?
您正在导入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})
要在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,它是有关如何从提交中获得不仅仅是顶级评论的更多信息。
我猜这些单元不是随机分裂的,而是以逗号,分号分隔的。您可以使用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])