首页 > 解决方案 > Python - 遍历每个页面以获取所有记录

问题描述

我想从 API 端点检索所有记录(总共 50,000 条)。端点每页最多只返回 1000 条记录。这是获取记录的功能。

def get_products(token,page_number):
  url = "https://example.com/manager/nexus?page={}&limit={}".format(page_number,1000)
  header = {
    "Authorization": "Bearer {}".format(token)
  }
  response = requests.get(url, headers=header)
  product_results = response.json()

  total_list = []

  for result in product_results['Data']:
    date = result['date']
    price = result['price']
    name = result['name']
    total_list.append((date,price,name))
  columns = ['date', 'price', 'name']
  df = pd.DataFrame(total_list, columns=columns)
  results = json.dumps(total_list)
  return df, results

如何在不硬编码页码的情况下遍历每一页直到最终记录?目前,我正在硬编码前 2 页的页码,以获得 2000 条记录作为测试。

for page_number in np.arange(1,3):
  token = get_token()

  product_df,product_json = get_products(token,page_number)
  if page_number==1:
    product_all=product_df
  else:
    product_all=pd.concat([product_all,product_df])

print(product_all)

谢谢你。

标签: pythonapiloops

解决方案


我不知道端点的行为。假设当页码大于最后一个页码时,您将得到一个空列表。如果是这种情况,您可以检查结果是否为空。

page_number = 1
token = get_token()

product_df, product_json = get_products(token,page_number)
product_all=product_df

while product_df.size:
  page_number = page_number + 1
  token = get_token()

  product_df,product_json = get_products(token,page_number)
  product_all=pd.concat([product_all,product_df])

print(product_all)

如果您确定每页最多有 1000 条记录,则可以检查结果计数是否小于 1000 并停止循环。


推荐阅读