【问题标题】:PRAW 6: Get all submission of a subredditPRAW 6:获取所有子版块的提交
【发布时间】:2019-05-28 01:19:25
【问题描述】:

我正在尝试使用 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 个提交执行此操作?

【问题讨论】:

  • 你尝试过与时俱进吗?就像将其更改为当前时间减去上次搜索时间,并在这些时间之前获得结果
  • @ShlomiBazel 你能详细说明一下吗?如果我理解正确,这就是我在第一个示例中所做的。我说的是'给我None 和当前时间之间的所有提交。现在我找不到基于时间值的搜索。

标签: python reddit praw


【解决方案1】:

不幸的是,Reddit 从他们的 API 中删除了这个函数。

查看PRAW changelog。 6.0.0版本的变化之一是:

已移除

链接的帖子说 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 获取子reddit 中的所有帖子。但是,存在带有 API 的第三方数据集,例如 pushshift.io。作为/u/kungming2said 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 之间。

【讨论】:

  • 感谢您的信息!因此,有了这个链接,人们可以使用标准的网络抓取来继续,或者这种方法是否也有类似 PRAW 的东西?
  • @Dan 由于 PushShift 是一个 API,因此不需要“网络抓取”。根据您的操作,您可能会发现直接与 API 交互或使用包装器(如 PSAW)更容易。
【解决方案2】:

您可以使用迭代循环从 pushshift.io 检索所有数据。只需将开始日期设置为当前 epoch 日期,并获取 1000 个项目,然后将列表中最后一个项目的 created_utc 作为 before 参数,以获取接下来的 1000 个项目并继续直到它停止返回。

以下是获取更多信息的有用链接: https://www.reddit.com/r/pushshift/comments/b7onr6/max_number_of_results_returned_per_query/enter link description here

【讨论】:

    【解决方案3】:

    Pushshift 不适用于私人子版块。在这种情况下,您可以从现在开始一次创建 1000 个提交的数据库(不追溯)。

    如果您只需要尽可能多的提交,您可以尝试使用不同的排序方法 top、hot、new 并将它们组合起来。

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 2017-10-24
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多