gpt4 book ai didi

python - Reddit 搜索 API 未提供所有结果

转载 作者:太空狗 更新时间:2023-10-30 02:10:15 25 4
gpt4 key购买 nike

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)

Ouput=953

为什么有限制?

  1. [文档][1] 提及

We can at most get 1000 results from every listing, this is anupstream limitation by reddit. There is nothing we can do to go pastthis limit. But we may be able to get the results we want with thesearch() method instead.

任何解决方法?我希望以某种方式克服 API 问题,我为 twitter 数据编写了一个scraper,但发现它不是最有效的解决方案。

同样的问题:https://github.com/praw-dev/praw/issues/430[1]: https://praw.readthedocs.org/en/v2.0.15/pages/faq.html相关讨论也请引用上述链接。

最佳答案

限制搜索或列表的结果是减少服务器负载的常用策略。 reddit API 很清楚这就是它的作用(正如您已经标记的那样)。然而,它并不止于此......

API 还支持列表分页结果的变体。由于它是一个不断变化的数据库,它们不提供页面,而是允许您使用“after”参数从中断的地方继续。这记录在案 here .

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

经过随后的尝试,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)

关于python - Reddit 搜索 API 未提供所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com