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

Python&Pandas:pd.read_excel读取requests返回content报错File is not a zipfile

解决方案

该报错是openpyxl读取.xlsx格式文件时,未获取到合法的zip格式二进制流导致,可按以下步骤逐一排查解决:

  • 第一步:校验请求返回内容是否为合法Excel
    你当前脚本缺少响应合法性校验,即使浏览器可正常下载,也可能因为请求缺头、cookie过期、服务端反爬拦截等原因,拿到的是错误页面/接口报错的非Excel内容。添加以下代码验证:
requests.packages.urllib3.disable_warnings()
excel_a = requests.get(link_a, verify=False, cookies=a)
# 新增校验代码
print(excel_a.status_code)
print(excel_a.headers.get("Content-Type"))
# 将返回内容写入本地手动验证
with open("debug.xlsx", "wb") as f:
    f.write(excel_a.content)

正常Excel的响应状态码为200,Content-Type值为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,如果不符合以上特征,说明请求被拦截,需要补全请求头参数,示例如下:

# 补充浏览器请求带的必要头字段,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Referer": link_a.split("/")[0] + "//" + link_a.split("/")[2] # 替换为Excel所属页面的地址
}
excel_a = requests.get(link_a, verify=False, cookies=a, headers=headers)
  • 第二步:适配字节流读取逻辑
    如果确认返回内容是合法Excel,大概率是Pandas 1.3.x版本直接读取bytes存在兼容性问题,将内容封装为BytesIO对象后传入即可:
from io import BytesIO

df = pd.read_excel(BytesIO(excel_a.content), engine="openpyxl")
  • 第三步:修复版本兼容性
    如果以上操作都无效,你当前使用的Pandas 1.3.1与openpyxl 3.0.7存在已知适配bug,替换为以下稳定兼容版本组合即可解决:
pip install pandas==1.4.2 openpyxl==3.0.10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:57:04