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

如何通过DOI链接用Python下载并保存XLSX文件?

用Python自动下载DOI关联的XLSX文件

问题分析

你看到的乱码是正常现象——XLSX属于二进制文件,response.content返回的是原始字节流,直接打印自然会显示成编码字符,并非内容损坏。要正确保存文件,只需将字节流直接写入本地文件即可。

解决方案

核心思路

DOI链接会自动重定向到实际的文件存储地址,requests.get()默认会跟进重定向,直接获取到文件的二进制内容。我们只需将这些二进制内容以二进制写入模式保存为.xlsx格式文件。

单个文件下载代码

import requests

doi_url = 'https://doi.org/10.1371/journal.pone.0282068.s001'
# 发送请求,跟进重定向
response = requests.get(doi_url, allow_redirects=True)
# 检查请求是否成功
if response.status_code == 200:
    # 以二进制写入模式保存文件
    with open('dataset1.xlsx', 'wb') as f:
        f.write(response.content)
    print("文件下载保存成功")
else:
    print(f"请求失败,状态码:{response.status_code}")

批量下载两个文件

import requests

# 定义DOI链接和对应的保存文件名
doi_files = [
    ('https://doi.org/10.1371/journal.pone.0282068.s001', 'dataset1.xlsx'),
    ('https://doi.org/10.1371/journal.pone.0282068.s002', 'dataset2.xlsx')
]

for url, filename in doi_files:
    response = requests.get(url, allow_redirects=True)
    if response.status_code == 200:
        with open(filename, 'wb') as f:
            f.write(response.content)
        print(f"{filename} 下载完成")
    else:
        print(f"{filename} 请求失败,状态码:{response.status_code}")

关键说明

  • allow_redirects=True确保跟进DOI的重定向(默认已开启,显式写出更清晰)
  • 必须用'wb'模式写入:w代表写入,b代表二进制模式,才能正确保存XLSX这类非文本文件
  • 检查status_code == 200可确保请求成功,避免保存无效内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:03