用python进行宁静的分页

时间:2018-11-24 08:51:08

标签: python rest pagination

我正在通过如下所示的rest API调用使用Python获取数据...

result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))

API内置了100个最大结果,因此我必须在python中进行分页。

进行第一次调用后, result.nextPage 返回一个代码,然后我必须将该代码传递给下一个API调用,例如...

result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))

依次类推,直到浏览完所有页面为止。

python是否有任何内置机制来处理这种分页?

我本人可以编写一个笨拙的循环,但不确定

  1. 如何处理等待每个页面的时间,以便我可以继续下一个通话
  2. 如何处理“没有更多页面”事件而不会出错
  3. 在进行所有调用后如何将所有调用的结果合并为一个变量

以最优雅的方式欣赏所有想法。

1 个答案:

答案 0 :(得分:1)

  

python是否有任何内置机制来处理这种分页?

否。

如果没有更多页面要加载,请使用while True:语句编写一个break循环。

  

如何处理等待每个页面的时间,以便我可以继续下一个呼叫

urllib2.urlopen不是异步的。您的代码将被阻止(即等待),直到请求完成。

  

如何处理“无更多页面”事件而不会出错

这取决于您使用的API。我希望result.nextPage为空/未在最后一页上设置

  

在进行所有调用后如何将所有调用的结果合并为1个变量

将它们添加到列表中。伪代码:

url = "initial URL"
results = []

while True:
    current_page = request(url)
    results.append(current_page)
    if (another page available):
        url = "new url with next page code"
    else:
        break

我衷心建议您使用the requests module而不是简陋的urllib2.urlopen