logo
0
0
WeChat Login
wwyz<wwyz@wwyzdeMacBook-Air.local>
Initial commit: 百度网盘到MinIO的完整下载上传流水线

百度网盘下载工具

基于 BaiduPCS-Py 的百度网盘文件下载工具,支持批量下载、进度显示和断点续传。

功能特性

百度网盘下载

  • 自动认证: 支持 BDUSS 和 COOKIES 认证
  • 批量下载: 支持多目录、多文件同时下载
  • 进度显示: 实时显示下载进度和速度
  • 断点续传: 支持中断后继续下载
  • 目录结构: 保持原有的网盘目录结构
  • 错误处理: 完善的错误处理和重试机制

MinIO 数据上传

  • 双重上传方式: S3协议 + MC命令行工具
  • 性能对比: 自动测试并推荐最佳上传方式
  • 大数据优化: 专为32TB级别数据设计
  • 并发上传: 支持多线程并发上传
  • 断点续传: 支持大文件分片上传
  • 进度监控: 实时显示上传进度和速度

🚀 快速开始

1. 安装依赖

pip3 install BaiduPCS-Py

💡 使用示例

1. 配置设置

首先编辑 config.py 文件,配置百度网盘和MinIO信息:

# 百度网盘配置 BAIDU_CONFIG = { 'bduss': 'your_bduss_here', 'cookies': 'your_cookies_here', 'download_dir': './downloads', 'target_dirs': ['/其他'], # 要下载的目录 'max_workers': 3, 'chunk_size': 1024 * 1024, 'max_retries': 3, 'max_file_size': 100 * 1024 * 1024 } # MinIO配置 MINIO_CONFIG = { 'endpoint': 'your-minio-server:9000', 'access_key': 'your-access-key', 'secret_key': 'your-secret-key', 'bucket_name': 'your-bucket-name', 'secure': False, 'mc_alias': 'myminio' }

2. 运行完整流水线

# 推荐:使用统一的流水线脚本 python3 run_pipeline.py

3. 单独使用各个功能

仅下载百度网盘文件

python3 complete_baidu_download.py

仅上传到MinIO

python3 upload_to_minio.py

完整流水线(下载+上传)

python3 baidu_to_minio_pipeline.py

4. 编程方式使用

from baidu_to_minio_pipeline import BaiduToMinIOPipeline # 创建流水线实例 pipeline = BaiduToMinIOPipeline() # 运行完整流水线 success = pipeline.run_full_pipeline() if success: print("流水线执行成功!") else: print("流水线执行失败!")

2. 获取认证信息

重要:BaiduPCS-Py 不支持直接账号登录,需要手动获取 COOKIES

详细步骤:

  1. 登录 pan.baidu.com
  2. 打开浏览器开发者工具 (F12)
  3. 切换到 Network 面板
  4. 在网盘中点击任意文件夹
  5. 找到 list?... 请求
  6. Request Headers 中找到 Cookie
  7. 复制完整的 Cookie 内容

Cookie 示例格式:

BDUSS=your_bduss_value; STOKEN=your_stoken_value; PTOKEN=your_ptoken_value; ...

3. 使用 API

from baidupcs_py.baidupcs import BaiduPCSApi # 创建 API 实例 api = BaiduPCSApi(bduss="", cookies="your_cookies_here") # 获取用户信息 user_info = api.user_info() print(f"用户ID: {user_info.get('uk')}") # 列出文件 files = api.list("/") for file in files: print(f"{file.path} - {file.size if not file.is_dir else 'DIR'}") # 获取下载链接 download_links = api.download_link("/path/to/file") print(f"下载链接: {download_links[0]}")

📁 项目结构

baidu-downloader/ ├── config.py # 统一配置文件 ├── complete_baidu_download.py # 百度网盘下载脚本 ├── baidu_to_minio_pipeline.py # 百度网盘到MinIO完整流水线 ├── run_pipeline.py # 流水线运行脚本(推荐使用) ├── upload_to_minio.py # MinIO上传脚本 ├── minio_uploader.py # MinIO上传工具类 ├── minio_config.py # MinIO配置文件(已弃用,使用config.py) ├── performance_test.py # MinIO性能测试脚本 ├── MINIO_SETUP.md # MinIO工具安装配置指南 ├── requirements.txt # Python依赖 └── README.md # 项目说明

📄 文件说明

  • config.py: 统一的配置文件,包含百度网盘、MinIO、上传等所有配置项
  • run_pipeline.py: 🌟 推荐使用 - 流水线运行脚本,提供交互式菜单,支持完整流水线、单独下载、单独上传等操作
  • complete_baidu_download.py: 百度网盘文件下载脚本,支持多线程并发下载、断点续传、进度显示等功能
  • baidu_to_minio_pipeline.py: 完整的数据流水线,将百度网盘下载和MinIO上传串联,实现一键式数据迁移
  • upload_to_minio.py: MinIO上传脚本,支持将本地文件上传到MinIO
  • minio_uploader.py: MinIO数据上传工具类,支持S3协议和MC命令行两种上传方式,针对大数据量进行了优化
  • performance_test.py: MinIO上传性能测试脚本,用于比较不同上传方式的性能,特别适用于32TB大数据场景
  • MINIO_SETUP.md: MinIO工具的详细安装配置指南,包括环境准备、配置说明、使用方法等

📁 项目文件说明

核心文件

  1. baidu_download_example.py - 完整的下载示例

    • 包含认证、文件列表、下载等完整流程
    • 支持进度显示和错误处理
    • 适合学习和测试使用
  2. complete_baidu_download.py - 高级下载工具

    • 支持批量下载
    • 文件大小过滤
    • 断点续传支持
    • 递归目录扫描
  3. test_baidupcs_api.py - API 测试脚本

    • 验证 API 可用性
    • 检查所有可用方法
    • 调试和故障排除
  4. minio_uploader.py - MinIO上传工具

    • 支持S3协议和MC命令行两种上传方式
    • 自动性能测试和方式推荐
    • 大文件分片上传支持
    • 实时进度监控
  5. minio_config.py - MinIO配置管理

    • 服务器连接配置
    • 认证信息管理
    • 上传参数设置
  6. performance_test.py - 性能测试脚本

    • 对比S3协议vs MC命令行性能
    • 生成详细测试报告
    • 推荐最佳上传策略

🔧 核心 API 方法

认证相关

# 创建 API 实例 api = BaiduPCSApi(bduss="", cookies=cookies) # 获取用户信息 user_info = api.user_info() # 获取配额信息 quota = api.quota()

文件操作

# 列出文件 files = api.list("/path") # 获取文件元信息 meta = api.meta("/path/to/file") # 检查文件是否存在 exists = api.exists("/path/to/file") # 检查是否为目录 is_dir = api.is_dir("/path")

下载相关

# 获取下载链接(推荐方法) download_links = api.download_link("/path/to/file") # 获取文件流 file_stream = api.file_stream("/path/to/file")

其他功能

# 搜索文件 results = api.search("keyword") # 创建目录 api.makedir("/new/directory") # 删除文件 api.remove("/path/to/file") # 重命名文件 api.rename("/old/path", "/new/path")

📥 下载实现方案

方案1:直链下载(推荐)

def download_with_direct_link(api, remote_path, local_path): # 获取下载链接 links = api.download_link(remote_path) if links: download_url = links[0] if isinstance(links, list) else links # 使用 requests 下载 response = requests.get(download_url, stream=True) with open(local_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk)

方案2:文件流下载(备用)

def download_with_stream(api, remote_path, local_path): # 获取文件流 file_stream = api.file_stream(remote_path) with open(local_path, 'wb') as f: for chunk in file_stream: if chunk: f.write(chunk)

⚠️ 注意事项

限制和约束

  1. 认证方式:不支持直接账号登录,必须手动获取 COOKIES
  2. 下载限速:普通用户可能有下载限速
  3. 大文件限制:建议设置最大下载文件大小
  4. API 稳定性:非官方 API,可能随时失效

最佳实践

  1. 错误处理:始终包装 try-catch 块
  2. 进度显示:对大文件显示下载进度
  3. 断点续传:检查本地文件是否已存在
  4. 批量下载:合理控制并发数量
  5. 日志记录:记录下载成功/失败的文件

安全建议

  1. 保护 COOKIES:不要在代码中硬编码认证信息
  2. 定期更新:COOKIES 有有效期,需要定期更新
  3. 访问频率:避免过于频繁的 API 调用

🔍 故障排除

常见错误

  1. bduss must be set

    • 解决:确保 COOKIES 中包含有效的 BDUSS 值
  2. 无法获取下载链接

    • 解决:检查文件路径是否正确,文件是否存在
  3. 下载失败

    • 解决:尝试使用文件流方法,或检查网络连接
  4. 认证失败

    • 解决:重新获取 COOKIES,确保登录状态有效

调试方法

  1. 运行 test_baidupcs_api.py 检查 API 可用性
  2. 使用 api.user_info() 验证认证状态
  3. 使用 api.list("/") 测试基本功能

📚 参考资源

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进这个项目!

📄 许可证

本项目仅供学习和研究使用,请遵守百度网盘的服务条款。


免责声明:本项目使用非官方 API,存在一定风险,请谨慎使用。作者不承担任何因使用本项目而产生的损失。