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

时间:2017-03-07 21:27:48

标签: python reddit praw

我正在使用以下代码通过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多个搜索结果?

2 个答案:

答案 0 :(得分:3)

是的,通过发送参数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个结果,但由于指定的时间范围,您可以在不同的时间内多次查询。即抓取1000个提交,从最早的提交中获取utc_time并将该时间作为时间戳的第一个参数发送,这将为您提供从上次查询停止的时间点开始的结果。

答案 1 :(得分:1)

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

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