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

Python如何从带身份认证的PhysioNet URL直接获取CSV文件

解决方案

你之前代码返回403有两个核心原因:一是使用的HTTPDigestAuth不适用于PhysioNet的身份验证逻辑,平台采用表单认证而非摘要认证;二是你请求的是数据集目录地址,不是具体CSV文件的地址,无法直接读取。以下是两个可直接落地的实现方案:

方案1:使用官方wfdb库(最推荐)

wfdb是PhysioNet官方维护的工具库,原生适配平台认证规则,无需手动处理会话逻辑:

  • 安装依赖:
pip install wfdb pandas
  • 代码示例:
import wfdb
import pandas as pd
from io import BytesIO

# 配置你的平台账号凭据
wfdb.config.set_option('physionet_username', '替换为你的用户名')
wfdb.config.set_option('physionet_password', '替换为你的密码')

# 替换为目标CSV文件的相对路径,对应nch-sleep 3.1.0版本下的目标文件
target_file = 'nch-sleep/3.1.0/你的目标文件名.csv'

# 读取文件内容到内存,不写入本地磁盘
file_bytes = wfdb.io.dl_files(file_list=[target_file], pn_dir='', keep_header=False, return_bytes=True)[0]

# 直接读取内存中的字节流生成DataFrame
df = pd.read_csv(BytesIO(file_bytes))

方案2:手动构造requests会话

如果不想引入额外依赖,可通过requests.Session模拟表单登录流程,获取有效认证会话后再请求文件:

import requests
import pandas as pd
from io import BytesIO

# 初始化会话,自动管理cookie
session = requests.Session()
# 构造登录表单参数
login_data = {
    'username': '替换为你的用户名',
    'password': '替换为你的密码'
}
# 提交登录请求,获取认证cookie
session.post('平台表单登录接口地址', data=login_data)

# 替换为你要读取的具体CSV文件的完整URL
csv_url = 'https://physionet.org/files/nch-sleep/3.1.0/你的目标文件名.csv'
resp = session.get(csv_url)
resp.raise_for_status()

# 直接读取内存中的响应内容
df = pd.read_csv(BytesIO(resp.content))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:05