PRAW 6:获取所有提交的subreddit

Cur*_*984 6 python reddit praw

我正在尝试使用PRAW从最新到最旧的迭代某个subreddit的提交。我曾经这样做:

subreddit = reddit.subreddit('LandscapePhotography')
for submission in subreddit.submissions(None, time.time()):
    print("Submission Title: {}".format(submission.title))
Run Code Online (Sandbox Code Playgroud)

但是,当我现在尝试执行此操作时,出现以下错误:

AttributeError: 'Subreddit' object has no attribute 'submissions'

通过查看文档,我似乎无法弄清楚该如何做。我能做的最好的事情是:

for submission in subreddit.new(limit=None):
    print("Submission Title: {}".format(submission.title))
Run Code Online (Sandbox Code Playgroud)

但是,这仅限于前1000个提交。

有没有办法处理所有提交的内容,而不仅仅是前1000个?

jar*_*ll0 6

不幸的是,Reddit从其API中删除了此功能。

查看PRAW更新日志。6.0.0版中的更改之一是:

已移除

链接的帖子说Reddit正在为所有用户禁用Cloudsearch:

从2018年3月15日开始,我们将开始逐步将API用户转移到新的搜索系统。到三月底,我们期望将所有人都搬走,并最终关闭旧系统。

PRAW Subreddit.sumbissions()使用Cloudsearch来搜索给定时间戳之间的帖子。由于Cloudsearch已删除,并且替换它的搜索不支持时间戳搜索,因此不再可以使用PRAW或任何其他Reddit API客户端基于时间戳执行搜索。这包括尝试从subreddit获取所有帖子。

有关更多信息,请参见PRAW维护者发布的/ r / redditdev中的该线程


备择方案

由于Reddit将所有列表限制为〜1000个条目,因此目前无法使用其API在subreddit中获取所有帖子。但是,存在带有API的第三方数据集,例如pushshift.io。正如/ u / kungming2 在Reddit上所说

您可以使用Pushshift.io通过其API仍返回定义时间段内的数据:

https://api.pushshift.io/reddit/submission/search/?after=1334426439&before=1339696839&sort_type=score&sort=desc&subreddit=translator
Run Code Online (Sandbox Code Playgroud)

例如,这使您可以在2012-04-14和2012-06-2014之间解析对r / translator的提交。

  • @Dan 不需要“网络抓取”,因为 PushShift 是一个 API。根据您在做什么,您可能会发现直接与 API 交互或使用诸如 [PSAW](https://github.com/dmarx/psaw) 之类的包装器更容易。 (3认同)