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

Python requests函数无法完整下载Kaggle大文件的问题求助

解决requests直接下载Kaggle数据集仅获取小文件的问题

问题根源

你直接用requests.get请求Kaggle的下载链接时,因为没有携带登录验证信息,Kaggle会返回登录页面的HTML代码(就是你看到的5465字节内容),而不是实际的数据集压缩包。Kaggle需要通过Cookie验证用户身份,才能允许下载数据集。

解决方案

  1. 获取登录后的Cookie:

    • 用浏览器登录Kaggle,打开目标数据集的下载页面;
    • 按F12打开开发者工具,切换到「网络」标签;
    • 刷新页面,找到download-all的请求,查看其请求头中的Cookie字段,复制完整内容。
  2. 修正后的代码:

import os
import requests

url = "https://www.kaggle.com/c/dog-breed-identification/download-all"
filename = "stanford-dogs.zip"
base_dir = "./"  # 替换为你的保存目录
save_path = os.path.join(base_dir, filename)

def download_zip(url, save_path, chunk_size=1024*1024):
    # 替换为你从浏览器复制的Kaggle登录Cookie
    headers = {
        "Cookie": "这里粘贴你的Cookie内容"
    }
    
    # 发起带身份验证的流式请求
    r = requests.get(url, stream=True, headers=headers)
    # 检查请求是否成功,失败则抛出异常
    r.raise_for_status()
    
    with open(save_path, 'wb') as fd:
        for chunk in r.iter_content(chunk_size=chunk_size):
            if chunk:  # 过滤空数据块
                fd.write(chunk)

# 修正函数调用(原代码存在函数名和参数不匹配的问题)
download_zip(url, save_path)

额外优化说明

  • 增大分块大小:把chunk_size改成1MB(1024*1024),比默认的128字节能大幅提升下载效率;
  • Cookie有效期:Kaggle的Cookie会定期过期,过期后需要重新从浏览器复制新的Cookie;
  • 错误处理:加入r.raise_for_status()可以在请求失败(比如Cookie无效、链接错误)时直接抛出异常,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:28