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

Python循环请求URL数据时如何将各次结果追加到同一个列表

问题说明

现有代码逻辑为遍历Excel文件指定列的4500个单元格值,每次迭代将单元格值拼接至两段URL片段中间生成合法请求地址,调用接口获取对应数据,目标是将所有单元格对应的返回数据归集到同一个列表中。

原有问题代码如下:

import json
import requests
import pandas as pd

data = pd.read_excel('allstockdata.xlsx')

look = list(data["Meals"])
for i in look:
    alist = [] #Line of Interest
    i = str(i)
    alldata = json.loads(requests.get(url1half1 + i + url1half2).text) + json.loads(requests.get(url2half1 + i + url2half2).text) #Gets data in form of single nested dictionary in list for each iteration [{}]
    alist.append(alldata) # Line of Interest

    print(alist)

当前两次迭代的输出为:

[[{'Fruit': 'Apple', 'Protein': 'Steak', 'Vegetable': 'Cabbage' }]]
[[{'Fruit': 'Pear', 'Protein': 'Chicken', 'Vegetable': 'Spinach'}]]

期望输出格式为所有条目归集到同一个列表:

[
  [{'Fruit': 'Apple', 'Protein': 'Steak', 'Vegetable': 'Cabbage' }],
  [{'Fruit': 'Pear', 'Protein': 'Chicken', 'Vegetable': 'Spinach'}],
]
问题原因

存储结果的列表alist = []被写在了for循环内部,每次循环启动时都会重新创建一个空列表,追加完当前迭代的单条数据后就会进入下一轮循环重新初始化,之前迭代的数据完全不会保留,因此每次打印的列表都只包含当前单条数据。

修复方案
  1. 将存储全量结果的列表初始化逻辑移到for循环外部,保证整个遍历过程中列表只被创建一次
  2. 每次迭代拿到当前单元格对应的alldata后,直接追加到这个全局结果列表中
  3. 等所有循环执行完成后,再打印或使用这个总结果列表即可

修复后的完整代码:

import json
import requests
import pandas as pd

data = pd.read_excel('allstockdata.xlsx')
look = list(data["Meals"])

# 结果列表移到循环外初始化,全量循环共用这一个列表
result = []
for i in look:
    i = str(i)
    # 分别请求两个接口、解析返回结果后合并
    data1 = json.loads(requests.get(url1half1 + i + url1half2).text)
    data2 = json.loads(requests.get(url2half1 + i + url2half2).text)
    alldata = data1 + data2
    # 当前条数据追加到总结果列表
    result.append(alldata)

# 循环全部结束后打印,输出就是预期的归集后结构
print(result)
可选优化建议
  • 4500次接口请求量级较大,可以增加简单的异常捕获逻辑,避免某一次请求超时、报错直接中断整个遍历流程
  • 可以根据目标站点的限流规则适当增加请求间隔,或使用异步请求提升采集效率,避免触发反爬限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:18:17