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)
输出继电器= 953
为什么有限制?
我们最多可以从每个列表中获得1000个结果,这是一个 reddit的上游限制。我们无能为力 这个限制。但是我们也许能够得到我们想要的结果 而是搜索()方法。
任何解决方法?我希望在API中能够克服,我为twitter数据编写了一个剪贴簿,并发现它不是最有效的解决方案。
同一问题:https://github.com/praw-dev/praw/issues/430 请参考上述链接进行相关讨论。
答案 0 :(得分:8)
限制搜索或列表上的结果是减少服务器负载的常用策略。 reddit API很明显,它就是它所做的(因为你已经标记过了)。但它并不止于此......
API还支持列表的分页结果的变体。由于它是一个不断变化的数据库,它们不提供页面,而是允许您通过使用'之后的#39;来提取您停止的位置。参数。记录在案here。
现在,虽然我不熟悉PRAW,但我发现reddit search 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)
答案 1 :(得分:0)
所以我只是循环一组预定的搜索查询,我假设句号是一个时间段?我也不确定它的格式是什么,所以下面很大程度上是弥补的,但是你应该得到主旨。
在这种情况下,它将类似于以下
import praw
def get_data_reddit(search):
username=""
password=""
r = praw.Reddit(user_agent='')
r.login(username,password,disable_warning=True)
title=[]
periods = (time1, time2, time3, time4) # declare a set of times to use in the search query to limit results
for period in periods: # loop through the different time points and query the posts from that time.
posts=r.search(search, subreddit=None,sort=None, syntax=None,period=None,limit=None) # this now returns a limited search query.
for post in posts:
title.append(post.title) # and append as usual.
print len(title)
search="stackoverflow"
get_data_reddit(search)