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

如何在Python/Jupyter Notebook中下载需CC BY4.0授权的Excel文件

解决ICOS Global Carbon Budget Excel文件自动下载(需同意许可证)的问题

你遇到的核心问题是:目标链接并非直接指向Excel文件,而是需要先同意Creative Commons许可证的跳转页面——服务器返回的是许可证确认的HTML页面,而非文件内容,因此直接用pd.read_excel()会解析失败。

以下是可自动完成许可证同意、下载并读取文件的解决方案,基于requests和BeautifulSoup处理表单提交,全程保持会话状态完成流程:

步骤说明

  1. 用requests.Session()维持会话,确保同意许可证后的Cookie状态被保留
  2. 解析初始页面的许可证同意表单,提取提交地址和必要参数
  3. 提交同意表单,获取真实的文件下载资源
  4. 读取二进制文件内容并转为pandas DataFrame

完整代码

import requests
import pandas as pd
from bs4 import BeautifulSoup
from io import BytesIO

# 目标ICOS对象链接
target_url = "https://data.icos-cp.eu/objects/1umMtgeUlhS2Y1YW_Qp94bu3"

# 初始化会话,保持状态
session = requests.Session()

# 1. 获取许可证同意页面,解析表单
resp = session.get(target_url)
soup = BeautifulSoup(resp.text, "html.parser")

# 定位同意许可证的表单
license_form = soup.find("form", id="acceptLicenseForm")
form_action = license_form["action"]
# 提取表单隐藏参数
form_data = {
    input_tag["name"]: input_tag["value"]
    for input_tag in license_form.find_all("input", type="hidden")
}
# 添加同意许可证的勾选参数
form_data["accept"] = "on"

# 2. 提交同意表单,跳转至文件页面
resp = session.post(form_action, data=form_data)

# 3. 下载文件并读取为DataFrame
file_resp = session.get(resp.url)
df = pd.read_excel(BytesIO(file_resp.content))

# 验证数据
print(df.head())

注意事项

  • 如果后续页面表单结构(如id、参数名)发生变化,可通过浏览器开发者工具查看页面源码,调整表单定位和参数提取逻辑
  • requests默认会自动处理重定向,提交表单后无需手动跟进跳转
  • 该方法全程自动化,符合科研代码透明性要求,无需手动干预下载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:08:16