如何在URL带变量场景下递归调用API并将数据导出至Excel
实现步骤与完整代码
你已经完成了分页拉取成员列表的逻辑,接下来只需要补充「提取所有href→批量调用详情接口→写入CSV文件」三个步骤即可,完整代码如下:
import requests import csv client = requests.session() headers = { "Authorization": "bearer %s" % "mine", "Content-Type": "application/json" } HOST = "https://api.application" ENDPOINT = "/v3/groups/something/members/" uri = "%s%s" % (HOST, ENDPOINT) # 原有分页拉取成员列表逻辑 response = client.get(uri, headers=headers) response_json = response.json() paginated = [response_json] while 'next' in response.links: response = client.get(response.links['next']['url'], headers=headers) paginated.append(response.json()) # ----------------新增逻辑开始---------------- # 1. 提取所有成员详情接口的href all_hrefs = [] for page in paginated: for member in page.get("data", []): if member.get("href"): all_hrefs.append(member["href"]) # 2. 批量调用每个href获取详情,收集所有结果 all_member_details = [] for href in all_hrefs: try: detail_resp = client.get(href, headers=headers) detail_resp.raise_for_status() # 接口返回4xx/5xx时抛出异常 detail_data = detail_resp.json() # 可根据实际返回的详情字段做筛选,此处默认全量保存 all_member_details.append(detail_data) except Exception as e: print(f"请求接口{href}失败,错误信息:{str(e)}") continue # 3. 写入CSV文件,Excel可直接打开 if all_member_details: # 取第一个元素的key作为CSV表头 headers_csv = list(all_member_details[0].keys()) with open("成员详情.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=headers_csv) writer.writeheader() writer.writerows(all_member_details) print(f"已成功保存{len(all_member_details)}条数据到成员详情.csv") # ----------------新增逻辑结束----------------
注意事项
- 调用详情接口时添加了异常捕获,避免单个接口请求失败导致整个程序中断,失败的接口会打印日志可手动排查
- 输出的CSV采用
utf-8-sig编码,用Excel打开不会出现乱码 - 如果你需要保存指定字段,可以在写入CSV前对
detail_data做过滤,只保留需要的键值对即可
内容的提问来源于stack exchange,提问作者makensen
相关产品推荐
相关产品推荐

