Reddit搜索API没有给出所有结果

Abh*_*tia 4 python python-2.7 praw

import praw

def get_data_reddit(search):
    username=""
    password=""
    r = praw.Reddit(user_agent='')
    r.login(username,password,disable_warning=True)
    posts=r.search(search, subreddit=None,sort=None, syntax=None,period=None,limit=None)
    title=[]
    for post in posts:
        title.append(post.title)
    print len(title)


search="stackoverflow"
get_data_reddit(search)
Run Code Online (Sandbox Code Playgroud)

输出继电器= 953

为什么有限制?

  1. 文档提到

我们最多可以从每个列表中获得1000个结果,这是reddit的上游限制.我们无法超越这个限制.但我们可以用search()方法获得我们想要的结果.

任何解决方法?我希望在API中能够克服,我为twitter数据编写了一个剪贴簿,并发现它不是最有效的解决方案.

同样的问题:https://github.com/praw-dev/praw/issues/430 请参考上述链接进行相关讨论.

Pet*_*ain 8

限制搜索或列表上的结果是减少服务器负载的常用策略.reddit API很明显,它就是它所做的(因为你已经标记过了).但它并不止于此......

API还支持列表的分页结果的变体.由于它是一个不断变化的数据库,它们不提供页面,而是允许您通过使用'after'参数来提取您停止的位置.这在此处记录.

现在,虽然我不熟悉PRAW,但我发现reddit 搜索API符合列表语法.因此,我认为您只需要重新发出搜索,指定额外的"之后"参数(参考您第一次搜索的最后结果).

随后尝试了它,看来PRAW真的回报了你要求的所有结果.

根据OP的要求,这里是我编写的用于查看分页结果的代码.

import praw

def get_data_reddit(search, after=None):
    r = praw.Reddit(user_agent='StackOverflow example')
    params = {"q": search}
    if after:
        params["after"] = "t3_" + str(after.id)
    posts = r.get_content(r.config['search'] % 'all', params=params, limit=100)
    return posts

search = "stackoverflow"
post = None
count = 0
while True:
    posts = get_data_reddit(search, post)
    for post in posts:
        print(str(post.id))
        count += 1
    print(count)
Run Code Online (Sandbox Code Playgroud)

  • 我也认为应该有一些解释为什么这个答案被否决了. (2认同)