如何通过Python编程下载公开可访问的Google Drive文件
公开可访问Google Drive文件无授权Python下载方案
不需要申请Google API权限、不需要配置OAuth凭证,只要文件本身设置为「知晓链接即可访问」,就能直接模拟浏览器无痕模式的请求逻辑完成下载,你提供的示例文件可通过下述方法正常下载。
核心逻辑
官方Google Drive API默认要求身份校验,完全不适合公开无授权场景,直接走公开网页的下载通道即可:
- 从分享链接中提取文件ID,带
resourcekey的旧版分享链接必须同步提取该参数,否则会返回403 - 构造公开下载入口地址:
https://drive.google.com/uc?export=download - 小于100MB的文件直接请求即可返回文件流;大文件会触发Google的病毒扫描提示页,需要从页面中提取
confirm校验令牌,带上令牌二次请求即可拿到真实文件内容
方法1:基于requests的轻量实现
仅依赖requests库,适合不想引入额外工具包的场景,先安装依赖:pip install requests
完整代码:
import re import requests def download_public_gdrive(file_id: str, save_path: str, resource_key: str = None): download_base = "https://drive.google.com/uc?export=download" req_params = {"id": file_id} if resource_key: req_params["resourcekey"] = resource_key sess = requests.Session() # 首次请求获取校验令牌 first_resp = sess.get(download_base, params=req_params, stream=True) # 匹配大文件场景的confirm参数 confirm_token = re.search(r'name="confirm" value="([0-9A-Za-z_-]+)"', first_resp.text) if confirm_token: req_params["confirm"] = confirm_token.group(1) first_resp = sess.get(download_base, params=req_params, stream=True) # 分块写入文件,避免大文件占用过多内存 with open(save_path, "wb") as f: for chunk in first_resp.iter_content(chunk_size=1024*32): if chunk: f.write(chunk) # 针对你提供的示例文件的调用代码 if __name__ == "__main__": # 从示例链接提取的文件ID和resourcekey FILE_ID = "0ByZjGXodIlspWmpBcUhvenVQa1k" RESOURCE_KEY = "0-0EDZ0S61PjdzFLa6nWo3yw" download_public_gdrive(FILE_ID, "downloaded_file", RESOURCE_KEY)
方法2:使用gdown库(稳定性更高)
gdown是专门处理公开Google Drive文件下载的工具,已经适配了所有已知的链接格式、校验令牌提取、限流规避等边界情况,不用自己写正则匹配逻辑,适合生产场景使用。
先安装依赖:pip install gdown
完整代码,直接传入分享链接即可,不需要手动拆分ID和参数:
import gdown share_url = "https://drive.google.com/file/d/0ByZjGXodIlspWmpBcUhvenVQa1k/view?resourcekey=0-0EDZ0S61PjdzFLa6nWo3yw" gdown.download(url=share_url, output="downloaded_file", fuzzy=True)
参数fuzzy=True会自动识别不同格式的Drive分享链接,包括预览页链接、短分享链接、直链等,不需要手动做字符串处理。
常见问题说明
- 返回403错误:首先确认文件确实开启了公开访问权限,旧版带
resourcekey的链接不能漏传该参数,否则即使文件公开也会被拦截 - 下载得到的是HTML网页而非目标文件:基本是大文件场景下没有正确提取confirm校验令牌,直接换gdown实现即可,不用自己反复调整匹配规则
- 大文件下载速度慢:可以调大分块写入的尺寸,gdown默认做了下载优化,速度和浏览器端下载基本一致
内容的提问来源于stack exchange,提问作者Malcolm Slaney
相关产品推荐
相关产品推荐

