一次性从API获取所有数据 - Python-Requests
import requests
url = 'http://www.justdial.com/autosuggest.php?'
param = {
'cases':'popular',
'strtlmt':'24',
'city':'Mumbai',
'table':'b2c',
'where':'',
'scity':'Mumbai',
'casename':'tmp,tmp1,24-24',
'id':'2'
}
res = requests.get(url,params=param)
res = res.json()
第一次在浏览器里输入基本网址时,最后三个参数在请求的查询参数中没有显示,但它还是能正常工作。
当我访问这个API时,它会返回一个包含两个键的JSON数据(total和results)。其中,results这个键包含一个字典列表(这就是主要的数据),而另一个键'total'则表示在Justdial上可用的不同类别的总数。
在当前的情况下,total=49,所以我需要调用这个API三次,因为每次调用只返回24个结果(24+24+1,所以我们需要调用三次)。
我想问的是,有没有办法一次性获取完整的JSON数据?也就是说,既然有49个结果,能不能只调用一次API就获取到所有数据(所有49个类别)?我已经尝试了很多参数组合,但都没有成功。
2 个回答
0
Github的API要求你以分页的方式获取数据,每页最多可以显示100条结果。返回的数据中有一个'links'的部分,里面包含了下一页结果的链接。
下面的代码会遍历一个组织中的所有团队,直到找到它想要的那个团队。
params = {'page': 1, 'per_page':100}
another_page = True
api = GH_API_URL+'orgs/'+org['login']+'/teams'
while another_page: #the list of teams is paginated
r = requests.get(api, params=params, auth=(username, password))
json_response = json.loads(r.text)
for i in json_response:
if i['name'] == team_name:
return i['id']
if 'next' in r.links: #check if there is another page of organisations
api = r.links['next']['url']
0
一般来说,API(应用程序接口)都有一个叫做 count
或者 max_results
的参数——在网址上设置这个参数,你就能得到更多的结果。
这是Twitter的API中 count
参数的说明文档:https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline