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

Python多URL请求合并DataFrame仅返回最后一条数据问题排查

问题根因

你的代码存在两处明显逻辑错误,是导致最终仅能获取最后一个URL返回数据的直接原因:

  • 变量覆盖:循环内执行完data_results.extend(resp)后,下一行data_results = resp.json(strict=False)会直接将之前用于累积全量结果的列表变量,覆盖为当前单次请求的返回值,前序循环存储的所有数据会被直接丢弃,循环执行完成后自然只保留最后一个URL的返回结果。
  • 方法误用:resp是requests库返回的Response响应对象,并非接口返回的结构化业务数据,不能直接作为extend/append的参数,必须先调用.json()方法解析出结构化数据后,再执行追加操作。
修正代码
import requests
import pandas as pd

URLs = ["https://www.url1.com/fall", "https://www.url1.com/spring"]
data_results = []

payload = {}
headers = {
    'apikey': apikey
}

for url in URLs:
    resp = requests.get(url, headers=headers, data=payload)
    if resp.status_code != 200:
        print(f"Request error, url: {url}, status code: {resp.status_code}")
        continue
    
    # 解析当前请求的结构化返回
    current_res = resp.json(strict=False)
    # 根据返回结构选择追加方式:如果返回是多条记录组成的列表用extend,单条字典用append
    # 若接口返回外层包裹状态字段(如{"code":200,"data":[...]}),需先提取到实际存储数据的列表,例如current_res["data"]
    if isinstance(current_res, list):
        data_results.extend(current_res)
    else:
        data_results.append(current_res)

# 全量数据收集完成后转DataFrame,即可复用原有upsert逻辑入库
final_df = pd.DataFrame(data_results)
补充说明

如果转换后发现DataFrame结构不符合预期,先打印单次请求的current_res确认返回结构:大部分业务接口不会直接返回数据列表,通常会在外层包裹状态码、请求信息等字段,此时需要先定位到实际存储业务记录的列表字段,再执行追加操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:54:31