You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python捕获Postman API响应并存储CSV失败问题排查

问题:Python分页获取API数据并写入CSV失败

我尝试用Python捕获API响应并存储到CSV文件,代码意图通过skip参数分页获取数据:首次请求skip=0获取前100条,之后自动将skip更新为100、200……直至无数据返回,最终把所有结果写入CSV,但当前代码无法实现该逻辑。

原代码

UsergroupURL="https://"+ dex.3ds.com"
UsergroupsURL= UsergroupURL + "/3drdd/resources/b1/usersgroup?select=title,description,owner,members,pending_members,creation_date,modification_date&top=100&skip=0"

skip = 0
all_results = []

while True:
    usergroupresponse = session.post(UsergroupsURL, data = data)
    if usergroupresponse.status_code != 200:
        Failmsg="Failed to post usergroup. Status code : " + str(response.status_code)
        sys.exit(Failmsg)
    results = usergroupresponse.json()
    print(results)
    if len(results) == 0:
        # No more results to retrieve
        break
    # Append the results to the all_results list
    all_results += results
    # Increment skip to skip the previously retrieved results
    skip += 100
    # Update the URL with the new skip value
    UsergroupsURL = UsergroupURL + "/3drdd/resources/b1/usersgroup?select=title,description,owner,members,pending_members,creation_date,modification_date&top=100&skip=" + str(skip)
    print(results)
# Write the results to a CSV file
with open('response.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for row in all_results:
        writer.writerow(row.values())

代码中的问题

  • URL初始化语法错误:"https://"+ dex.3ds.com"中dex.3ds.com未加引号,会被当作变量处理,引发NameError。
  • URL重复拼接:每次更新UsergroupsURL时,在基础URL后重复拼接完整路径,导致URL变成https://dex.3ds.com/3drdd/.../3drdd/...,请求无效。
  • 变量引用错误:错误信息里用了未定义的response.status_code,实际响应变量是usergroupresponse。
  • CSV无表头:直接写入字典值,CSV缺少表头,数据可读性差。
  • 冗余代码:循环内重复打印results。

修正后的代码

import sys
import csv
# 需提前初始化session和data,示例:
# import requests
# session = requests.Session()
# data = {}  # 替换为实际请求体数据

# 修复基础URL的语法错误
UsergroupURL = "https://dex.3ds.com"
skip = 0
all_results = []

while True:
    # 每次循环动态构建请求URL,避免路径重复
    UsergroupsURL = f"{UsergroupURL}/3drdd/resources/b1/usersgroup?select=title,description,owner,members,pending_members,creation_date,modification_date&top=100&skip={skip}"
    usergroupresponse = session.post(UsergroupsURL, data=data)
    
    # 修正响应变量引用
    if usergroupresponse.status_code != 200:
        Failmsg = f"Failed to post usergroup. Status code : {usergroupresponse.status_code}"
        sys.exit(Failmsg)
    
    results = usergroupresponse.json()
    print(results)
    
    if not results:
        break
    
    all_results.extend(results)
    skip += 100

# 写入CSV并添加表头
if all_results:
    headers = all_results[0].keys()
    with open('response.csv', 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        writer.writerows(all_results)
else:
    print("未获取到可写入CSV的数据")

修正说明

  1. 修复URL初始化:将基础URL改为正确的字符串格式。
  2. 动态构建请求URL:使用f-string每次基于基础URL和当前skip值生成新请求地址,避免路径重复叠加。
  3. 修正变量引用:错误信息中使用正确的usergroupresponse.status_code。
  4. 优化CSV写入:使用csv.DictWriter自动生成表头,确保数据与表头对应,提升可读性。
  5. 移除冗余代码:删除重复的print(results)语句。
  6. 添加空数据判断:无数据时给出提示,避免写入空文件。

内容的提问来源于stack exchange,提问作者Lechu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:14:57