本地Jupyter使用requests下载Kaggle数据集异常求助
解决Kaggle数据集下载返回HTML而非压缩包的问题
问题根源
- 直接用
requests.get()请求Kaggle下载链接时,没有携带Kaggle身份认证信息,会被重定向到登录页面,因此返回的是HTML文件而非压缩包。 - 你把
kaggle.json放在了项目目录下,但Kaggle API默认读取用户主目录下的.kaggle文件夹,而非项目目录,导致认证无效。
解决步骤
1. 调整kaggle.json的位置(必做)
把.kaggle文件夹移动到用户主目录:
- Windows:
C:\Users\<你的用户名>\.kaggle\kaggle.json - macOS/Linux:
~/.kaggle/kaggle.json
如果一定要放在项目目录,需手动设置环境变量指定配置路径:
import os os.environ['KAGGLE_CONFIG_DIR'] = './.kaggle'
2. 使用Kaggle API下载(推荐方式)
先安装Kaggle库:
pip install kaggle
在Jupyter中执行以下代码下载数据集:
from kaggle.api.kaggle_api_extended import KaggleApi # 初始化并认证API api = KaggleApi() api.authenticate() # 下载指定版本的数据集,保存为压缩包 api.dataset_download_files('birdy654/cifake-real-and-ai-generated-synthetic-images', version=3)
如果需要直接下载完整压缩包(不自动解压),可以用:
api.dataset_download_file('birdy654/cifake-real-and-ai-generated-synthetic-images', version=3)
3. 手动用requests认证下载(复杂易出错,不推荐)
如果坚持用requests,需要在请求头中带上Kaggle API密钥,且使用API专属下载地址:
import requests import json # 读取本地kaggle.json中的密钥 with open('./.kaggle/kaggle.json', 'r') as f: creds = json.load(f) headers = { 'Authorization': f"Bearer {creds['key']}" } # 使用Kaggle API的下载地址,而非网页下载按钮链接 url = 'https://www.kaggle.com/api/v1/datasets/download/birdy654/cifake-real-and-ai-generated-synthetic-images?datasetVersionNumber=3' response = requests.get(url, headers=headers) with open('cifake-dataset.zip', 'wb') as f: f.write(response.content)
内容的提问来源于stack exchange,提问作者Amin
相关产品推荐
相关产品推荐

