【问题标题】:The iteration loop is not working properly for APIAPI 的迭代循环无法正常工作
【发布时间】:2021-03-29 05:00:53
【问题描述】:

有一个 API 每页只能产生 100 个结果。我正在尝试创建一个 while 循环,以便它遍历所有页面并从所有页面获取结果,但它无法正常工作。

此脚本遍历页面:

params = dict(
    order_by='salary_desc',
    text=keyword,
    area=area,
    period=30, # days
    per_page=100,
    page = 0,
    no_magic='false',  # disable magic
    search_field='name'  # available: name, description, company_name
)
pages = []
while True:
  params["page"] += 1
  response = requests.get(BASE_URL + '/vacancies', headers={'User-Agent': generate_user_agent()}, params=params,)
  items = response.json()['items']
  if not items:
    break
  pages.append(items) # Do it for each page
response

启动时:

params
{'area': 1,
 'no_magic': 'false',
 'order_by': 'salary_desc',
 'page': 5,
 'per_page': 100,
 'period': 30,
 'search_field': 'name',
 'text': '"python"'}

他看了五页。

当我在执行后查看变量时:

len(pages)
4

他只看到四页。

如果我理解正确,他看不到零页面(api 中的页面从零开始)。

请告诉我如何解决这个错误?

colab 中的完整脚本在此链接https://colab.research.google.com/drive/14KddVLTyH3LkcE-LmHm7EooTYMM7b0zB?usp=sharing

【问题讨论】:

  • 代码在获取之前增加页面,因此您永远不会在第 0 页上进行获取。
  • 感谢您的回答,但我不明白如何解决此问题,以便页面从零开始。
  • 将页面增量移动到 for 循环的底部,而不是顶部。
  • 我认为你错了。调用 params 变量时,它将输出正确的五页数。但是当我们用完成的结果页面查看变量时,它会产生四个页面。我认为这里有一个逻辑错误,但我不明白他为什么只添加了五页中的四页。
  • 页面从零开始,并在发出请求之前递增到 1,因此永远不会获取页面 0。我不知道如何更简单地解释这个问题。

标签: python api iterator iteration


【解决方案1】:

您在获取响应之前递增页面。像这样重新排序。

while True:
  response = requests.get(BASE_URL + '/vacancies', headers={'User-Agent': generate_user_agent()}, params=params,)
  items = response.json()['items']
  if not items:
    break
  pages.append(items) # Do it for each page
  params["page"] += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2019-04-04
    相关资源
    最近更新 更多