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

使用Python从URL下载Excel文件失败:文件损坏、404错误如何修复?

问题解决方案

问题根源

你遇到的问题本质是生成的URL不正确,导致请求返回404状态码,下载的内容是网站的404错误页面(而非真实Excel文件),所以Excel无法打开,pandas读取时会抛出BadZipFile错误。

具体错误点:

  • 目标URL年份是4位格式(如2024),但你用%y格式化得到的是两位年份(如24),路径不匹配。
  • 用timedelta(30)计算上月的方式不可靠,不同月份天数不同,可能导致月份计算错误。

修复步骤

1. 生成正确的目标URL

替换错误的日期格式化方式,改用4位年份%Y,并准确计算上个月的年月:

from datetime import datetime

today = datetime.now()
# 计算上个月的年份和月份
if today.month == 1:
    last_year = today.year - 1
    last_month = 12
else:
    last_year = today.year
    last_month = today.month - 1

# 格式化月份为两位数字(如3转为03),拼接正确URL
url = f'https://www.gso.gov.vn/wp-content/uploads/{last_year}/{last_month:02d}/IIP-ENG.xlsx'

2. 安全下载并验证文件

添加状态码检查,仅当请求成功(状态码200)时才写入文件,避免保存错误页面:

import requests

resp = requests.get(url)
# 检查请求是否成功
if resp.status_code == 200:
    # 使用with语句自动关闭文件,更安全
    with open('IIP.xlsx', 'wb') as output:
        output.write(resp.content)
    print("文件下载成功")
else:
    print(f"下载失败:状态码{resp.status_code},请检查URL是否正确")

3. 读取Excel文件(可选)

确保下载的是有效文件后,再用pandas读取:

import pandas as pd

try:
    df = pd.read_excel('IIP.xlsx', sheet_name=0, engine='openpyxl')
    print(df.head(5))
except Exception as e:
    print(f"读取文件失败:{str(e)}")

额外注意事项

  • 尽量避免使用verify=False,除非确认目标网站SSL证书存在问题,否则会带来安全风险。
  • 如果目标文件的更新规则不是固定在上月路径,可能需要额外确认文件的实际存储路径规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:16:21