使用 PRAW 获得 100 多个搜索结果?

Posted

技术标签:

【中文标题】使用 PRAW 获得 100 多个搜索结果?【英文标题】:Getting more than 100 search results with PRAW? 【发布时间】:2017-07-28 06:34:15 【问题描述】:

我正在使用以下代码通过 PRAW 4.4.0 获取 reddit 搜索结果:

params = 'sort':'new', 'time_filter':'year'
return reddit.subreddit(subreddit).search('', **params)

我想从 subreddit 中抓取无限量的帖子,最长期限为一年。 Reddit 的搜索功能(以及相应的 API)通过 'after' 参数实现了这一点。但是,上述搜索功能不接受 'after' 作为参数。有没有办法使用 PRAW 的 .search() 获取超过 100 条搜索结果?

【问题讨论】:

【参考方案1】:

是的,通过发送参数limit=None 会将其增加到 1000,但不会保证任何时间范围,也无法获取超过 1000。但是您可以使用 cloudsearch 语法。它在 reddit wiki https://www.reddit.com/wiki/search#wiki_cloudsearch_syntax 中有详细描述,是非常强大的搜索增强器。

用一些代码来支持它,像这样的例子用法可以这样实现:

import datetime
params = 'sort':'new', 'limit':None, 'syntax':'cloudsearch'
time_now = datetime.datetime.now()
return reddit.subreddit(subreddit).search('timestamp:0..1'.format(
    int((time_now - datetime.timedelta(days=365)).timestamp()),
    int(time_now.timestamp())),
    **params)

每个查询的结果限制为 1000 个,但由于指定的时间范围,您可以针对不同的时间范围多次查询。 IE。抓取 1000 个提交,从最旧的提交中获取 utc_time 并将该时间作为时间戳的第一个参数发送,这将为您提供从上次查询停止的时间点开始的结果。

【讨论】:

cloudsearch 已从 reddit API 中删除,参考:***.com/a/54046328/740639 和 reddit.com/r/redditdev/comments/8bia9n/…【参考方案2】:

您想要的功能可以通过 subreddit 的 submissions 功能获得。您只需为其提供开始和结束时间戳:

http://praw.readthedocs.io/en/latest/code_overview/models/subreddit.html#praw.models.Subreddit.submissions

【讨论】:

以上是关于使用 PRAW 获得 100 多个搜索结果?的主要内容,如果未能解决你的问题,请参考以下文章

ucwa 获得超过 100 个搜索结果

如何从 GraphQL 获得 100 多个结果

PRAW:评论提交者的用户名

搜索包含列表 PSAW python 中任何单词的 reddit 评论

通过 URL 每页获得更多搜索结果

如何在hibernate搜索中使用多个查询字符串检索精确的搜索结果