一次性从API获取所有数据 - Python-Requests

1 投票
2 回答
7921 浏览
提问于 2025-04-18 08:36
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

撰写回答