Python 如何在没有页面指示的API查询中迭代页面?

Python 如何在没有页面指示的API查询中迭代页面?,python,json,pandas,api,Python,Json,Pandas,Api,我使用这个JSON查询进行了一个api调用: import requests import json import pandas as pd url = ("https://api.meetup.com/2/groups?zip=b1+1aa&offset=0&format=json&lon=-1.89999997616&category_id=34&photo-host=public&page=500&radius=200.0&

我使用这个JSON查询进行了一个api调用:

import requests 
import json
import pandas as pd

url = ("https://api.meetup.com/2/groups?zip=b1+1aa&offset=0&format=json&lon=-1.89999997616&category_id=34&photo-host=public&page=500&radius=200.0&fields=&lat=52.4799995422&order=id&desc=false&sig_id=243750775&sig=ed49065d620a34c10e1f0f91dd58da2e36547af1")

data = requests.get(url).json()
df = pd.io.json.json_normalize(data['results'])
这就变成了一个数据帧,但是,我还有5个url页面需要查询,如下所示:

url2 = ("https://api.meetup.com/2/groups?zip=b1+1aa&offset=1&format=json&lon=-1.89999997616&category_id=34&photo-host=public&page=500&radius=200.0&fields=&lat=52.4799995422&order=id&desc=false&sig_id=243750775&sig=ed49065d620a34c10e1f0f91dd58da2e36547af1")
url3
与之类似,关键是通过
offset=2
等更改页面


我想知道是否可以使用for循环遍历所有这些页面

首先不要硬编码url中的查询字符串,而是将查询数据作为命令传递给
请求,即:

url = "https://api.meetup.com/2/groups"
querydict = {
   "zip":"b1+1aa",
   "offset": 0,
   "format":"json",
   "lon":-1.89999997616,
   "category_id": 34,
   "photo-host":"public",
   # etc
   }

response = requests.get(url, params=querydict)
然后,您所要做的就是循环,直到您拥有所需的所有内容,并在每次迭代中更新
querydict[“offset”]

url = "https://api.meetup.com/2/groups"
querydict = {
   "zip":"b1+1aa",
   "offset": 0,
   "format":"json",
   "lon":-1.89999997616,
   "category_id": 34,
   "photo-host":"public",
   # etc
   }

while True: 
    response = requests.get(url, params=querydict)
    # check your response status, check the json data
    # etc
    if we_have_enough(response):
        break
    # ok let's fetch next page
    querydict["offset"] += 1

首先,不要对url中的查询字符串进行硬编码,而是将查询数据作为命令传递给
request
,即:

url = "https://api.meetup.com/2/groups"
querydict = {
   "zip":"b1+1aa",
   "offset": 0,
   "format":"json",
   "lon":-1.89999997616,
   "category_id": 34,
   "photo-host":"public",
   # etc
   }

response = requests.get(url, params=querydict)
然后,您所要做的就是循环,直到您拥有所需的所有内容,并在每次迭代中更新
querydict[“offset”]

url = "https://api.meetup.com/2/groups"
querydict = {
   "zip":"b1+1aa",
   "offset": 0,
   "format":"json",
   "lon":-1.89999997616,
   "category_id": 34,
   "photo-host":"public",
   # etc
   }

while True: 
    response = requests.get(url, params=querydict)
    # check your response status, check the json data
    # etc
    if we_have_enough(response):
        break
    # ok let's fetch next page
    querydict["offset"] += 1

Meetup version 2 API响应一个
meta
字典,其中包含一个
next
键,您应该使用该键

url = '...'
while url:
    data = requests.get(url).json()
    ... do something with data ...
    url = data['meta'].get('next')

Meetup version 2 API响应一个
meta
字典,其中包含一个
next
键,您应该使用该键

url = '...'
while url:
    data = requests.get(url).json()
    ... do something with data ...
    url = data['meta'].get('next')

有关于这个API的文档吗?因为只要看看url,我就会看到
page=500
。你可以做的另一件事是在访问其他页面时尝试自己查看模式。你提到看到了偏移模式。您可能希望查看循环或在循环内部。您还应该使用字典正确设置请求格式,并使用
有效负载
@MattR导入参数。谢谢。该页面=500是您希望每页的查询数,因此我输入了我希望每页的最大查询数。是否有关于此API的文档?因为只要看看url,我就会看到
page=500
。你可以做的另一件事是在访问其他页面时尝试自己查看模式。你提到看到了偏移模式。您可能希望查看循环或在循环内部。您还应该使用字典正确设置请求格式,并使用
有效负载
@MattR导入参数。谢谢。该页面=500是您希望每页的查询数,因此我输入了我希望每页的最大查询数。谢谢@bruno desthuilliers。我不清楚我们是否有足够的(回应)
部分。我想问一下,您是否可以简单地解释一下它是什么,以及我如何定义
我们有足够的
变量?这只是一种告诉您可能希望在给定点突破的方式,因为您不想要整个数据集,或者因为没有更多的数据可获取。如何测试这一点取决于确切的API(参见关于检查响应状态和返回内容等的注释),因此实现这一部分是您的工作。谢谢@bruno desthuillers。我不清楚我们是否有足够的(回应)
部分。我想问一下,您是否可以简单地解释一下它是什么,以及我如何定义
我们有足够的
变量?这只是一种告诉您可能希望在给定点突破的方式,因为您不想要整个数据集,或者因为没有更多的数据可获取。如何测试这一点取决于确切的API(参见关于检查响应状态和返回内容等的注释),因此实现这一部分是您的工作。好的,我可能会感到困惑,但什么构成,
对数据做些什么?这是一个if语句吗@Daniel RosemanNo,这是你对下载的数据所做的一切。把它放到一个数据框里,或者别的什么。好吧,我可能会感到困惑,但是什么构成,
用数据做点什么?这是一个if语句吗@Daniel RosemanNo,这是你对下载的数据所做的一切。把它放到数据框里,或者别的什么。