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

Google Drive批量下载大量文件遇403限制,求高效解决方案

解决Google Drive批量下载403限制的高效方案

1. 使用Google Drive官方API(优先推荐)

Google Drive API的请求配额远高于普通浏览器下载,能大幅降低403错误的触发概率,同时支持批量操作和直接流处理(无需本地存储)。

操作步骤:

  • 登录Google Cloud Console,创建新项目并启用Google Drive API
  • 创建服务账号密钥,下载JSON格式的凭据文件
  • 联系客户,将所有简历文件(或其所在文件夹)共享给服务账号对应的邮箱
  • 编写脚本批量处理(以Python为例):
    1. 读取Excel中的简历链接,提取每个文件的fileId(链接中d/后、/或?前的字符串)
    2. 通过API获取文件流,直接上传至S3,跳过本地存储环节

示例代码片段:

from googleapiclient.discovery import build
from google.oauth2 import service_account
import boto3
import pandas as pd

# 初始化Drive API客户端
SERVICE_ACCOUNT_KEY = 'your-service-account-key.json'
SCOPES = ['https://www.googleapis.com/auth/drive.readonly']
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_KEY, scopes=SCOPES)
drive_service = build('drive', 'v3', credentials=creds)

# 初始化S3客户端
s3 = boto3.client('s3')
BUCKET_NAME = 'your-target-s3-bucket'

# 读取Excel中的链接数据
df = pd.read_excel('employee-resumes.xlsx')

for _, row in df.iterrows():
    link = row['resume_link']
    file_id = link.split('/d/')[1].split('/')[0]
    employee_name = row['employee_name']  # 假设Excel包含员工名字列
    
    # 下载文件流
    media_request = drive_service.files().get_media(fileId=file_id)
    file_content = media_request.execute()
    
    # 上传至S3
    s3_key = f"resumes/{employee_name}.pdf"
    s3.put_object(Bucket=BUCKET_NAME, Key=s3_key, Body=file_content)

2. 优化普通下载的请求策略

如果暂时不想接入API,可通过调整下载逻辑绕过Google的限制:

  • 转换为直接下载链接:将标准Drive链接(如https://drive.google.com/file/d/FILE_ID/view)替换为https://drive.google.com/uc?export=download&id=FILE_ID,减少跳转环节的限制触发
  • 添加随机请求间隔:每次下载后暂停1-3秒(用随机值,避免固定间隔被识别为机器人),代码中可使用time.sleep(random.uniform(1, 3))
  • 模拟浏览器请求:设置请求头的User-Agent为常见浏览器标识,例如:
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
    
  • 禁用并发下载:用单线程执行下载任务,避免同时发起多个请求触发配额限制

3. 利用Drive文件夹批量导出

如果客户配合,让其将所有简历文件整理到单个Google Drive文件夹并共享给你:

  • 直接右键文件夹选择「下载」,Drive会自动打包为ZIP文件,一次性完成所有文件下载,不会触发单文件下载的配额限制
  • 或使用rclone工具同步:配置rclone连接Google Drive后,直接将文件夹同步到S3,无需本地存储:
    # 先通过rclone config配置Google Drive和S3连接
    rclone sync gdrive:resume-collection s3:your-bucket/resumes
    

4. 自动重试与指数退避

无论采用哪种方案,都应添加自动重试逻辑,遇到403错误时按指数退避策略等待后重试(例如第一次等10秒,第二次20秒,最多重试5次),减少手动干预。

示例(使用Python的tenacity库):

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(5), wait=wait_exponential(multiplier=1, min=10, max=60))
def process_file(file_id, s3_key):
    media_request = drive_service.files().get_media(fileId=file_id)
    file_content = media_request.execute()
    s3.put_object(Bucket=BUCKET_NAME, Key=s3_key, Body=file_content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:50:29