我正在尝试使用PRAW从最新到最旧的迭代某个subreddit的提交。我以前是这样的:
subreddit = reddit.subreddit('LandscapePhotography')
for submission in subreddit.submissions(None, time.time()):
print("Submission Title: {}".format(submission.title))
但是,当我现在尝试执行此操作时,出现以下错误:
AttributeError: 'Subreddit' object has no attribute 'submissions'
通过查看文档,我似乎无法弄清楚该如何做。我能做的最好的是:
for submission in subreddit.new(limit=None):
print("Submission Title: {}".format(submission.title))
但是,这仅限于前1000个提交。
是否有一种方法可以处理所有提交的内容,而不仅仅是前1000个?
答案 0 :(得分:2)
签出PRAW changelog。 6.0.0版中的更改之一是:
已删除
Subreddit.submissions
,因为不再支持该方法的API端点。看到 https://www.reddit.com/r/changelog/comments/7tus5f/update_to_search_api/。
链接的帖子说Reddit正在为所有用户禁用Cloudsearch:
从2018年3月15日开始,我们将开始逐步将API用户转移到新的搜索系统中。到3月底,我们希望将所有人撤离,并最终关闭旧系统。
PRAW的Subreddit.sumbissions()
使用Cloudsearch来搜索给定时间戳之间的帖子。由于Cloudsearch已删除,并且替换它的搜索不支持时间戳搜索,因此不再可以使用PRAW或任何其他Reddit API客户端基于时间戳执行搜索。这包括尝试从subreddit获取所有帖子。
有关更多信息,请参见this thread from /r/redditdev posted by the maintainer of PRAW。
由于Reddit将所有列表限制为〜1000个条目,因此目前无法使用其API在subreddit中获取所有帖子。但是,存在带有API的第三方数据集,例如pushshift.io。为/ u / kungming2 said on Reddit:
您可以使用Pushshift.io从定义的时间仍然返回数据 使用其API的时间段:
https://api.pushshift.io/reddit/submission/search/?after=1334426439&before=1339696839&sort_type=score&sort=desc&subreddit=translator
例如,这允许您解析对r / translator的提交 在2012-04-14和2012-06-2014之间。
答案 1 :(得分:0)
您可以使用迭代循环从pushshift.io检索所有数据。只需将开始日期设置为当前纪元日期,然后获取1000个项目,然后将列表中最后一个项目的created_utc作为before参数即可获取接下来的1000个项目,并一直进行到停止返回为止。
以下是获取更多信息的有用链接: https://www.reddit.com/r/pushshift/comments/b7onr6/max_number_of_results_returned_per_query/ enter link description here
答案 2 :(得分:0)
Pushshift不适用于私人subreddit。在这种情况下,您可以从现在开始一次创建1000个提交的数据库(不追溯)。
如果您只需要尽可能多的提交,则可以尝试使用top,hot,new和合并它们的不同排序方法。