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
相关产品推荐
相关产品推荐

