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
为什么有限制?
我们最多可以从每个列表中获得1000个结果,这是reddit的上游限制.我们无法超越这个限制.但我们可以用search()方法获得我们想要的结果.
任何解决方法?我希望在API中能够克服,我为twitter数据编写了一个剪贴簿,并发现它不是最有效的解决方案.
同样的问题:https://github.com/praw-dev/praw/issues/430 请参考上述链接进行相关讨论.
限制搜索或列表上的结果是减少服务器负载的常用策略.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)