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

使用requests与openpyxl时数据被写入三次而非一次的问题

解决requests+openpyxl数据重复写入三次的问题

嘿,我之前也踩过类似的坑!你遇到的每个数据被写入三次的问题,大概率是代码里的重复执行逻辑或者数据结构处理不当导致的,我来帮你梳理下常见原因和修复方案:

常见问题原因及修复方法

1. 不小心遍历了多层重复的数据结构

很多接口返回的JSON会有嵌套数组(比如分组数据),如果没注意只取第一组,而是遍历了所有分组,就会导致数据重复写入。比如接口返回是这样的:

{
  "result": [
    {"items": [{"id":1, "name":"A"}, {"id":2, "name":"B"}]},
    {"items": [{"id":1, "name":"A"}, {"id":2, "name":"B"}]},
    {"items": [{"id":1, "name":"A"}, {"id":2, "name":"B"}]}
  ]
}

如果写了这样的代码:

for group in data["result"]:
    for item in group["items"]:
        ws.append([item["id"], item["name"]])

自然会写入三次相同数据。修复方法:直接取第一组数据,跳过多余的遍历:

# 只取第一个分组的内容
first_group = data["result"][0]
for item in first_group["items"]:
    ws.append([item["id"], item["name"]])

2. 写入逻辑被重复调用

检查代码是否把写入Excel的代码放在了循环里,或者不小心调用了三次ws.append()相关逻辑。比如:

# 错误示例:重复调用三次写入
row = ["1", "A"]
ws.append(row)
ws.append(row)
ws.append(row)

这种低级错误也很容易犯,仔细检查代码里的写入语句次数,确保只执行一次。

3. 网页爬取时选中了多个表格

如果是爬取网页表格(用requests获取HTML后解析),可能页面里有三个结构相同的表格,你用了find_all()获取所有表格后全部写入了。修复方法:用find()只取第一个表格:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "html.parser")
# 只取第一个表格,而不是所有表格
table = soup.find("table")

快速排查小技巧

  • 先打印你要写入的数据,看看是不是本身就有三份重复内容,确认是数据来源问题还是代码逻辑问题;
  • 在写入Excel的代码前加个计数器,比如count = 0,每次写入count +=1,最后打印count,看是不是执行了三次;
  • 检查请求是否被发送了三次,比如打印response.url或者看控制台的请求日志。

如果能把你的具体代码贴出来,我可以帮你更精准地定位问题哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:40:31