不用Google API:Python通过URL实现Google Sheets读写的方法
无Google API读写公开Google Sheets的实现修正
原代码运行失败的核心原因
- 链接参数存在HTML转义错误:拼接的下载链接使用了
&作为参数分隔符,这是网页源码中的转义字符,实际HTTP请求需要使用&分隔参数,格式错误会直接返回无效响应 - 通用Drive下载链路会触发安全校验:无登录态的公开文件请求,走
drive.google.com/uc?export=download路径时,会被重定向到安全校验页,返回HTML网页内容而非表格原始数据,无法被pandas解析为CSV格式 - 未指定导出类型:原有请求没有声明需要导出的文件格式,哪怕绕过拦截,拿到的也是表格的二进制压缩包,不符合
pd.read_csv的解析要求
可直接复用的读取实现
- 替换为Sheets专属公开导出端点:跳过Drive通用下载链路,使用Sheets原生的gviz导出接口,接口默认返回标准CSV文本,可直接规避安全校验拦截
- 补充合法请求标识:通过pandas读取时传入模拟浏览器的
User-Agent字段,避免被反爬机制拦截 - 简化冗余流程:pandas的
read_csv原生支持网络URL读取,不需要手动调用requests拉取内容再封装为StringIO对象
修正后的可运行代码:
import pandas as pd file_id = "1bnCDl1DqRLqO8xHx3sjWdkydYC7rEb3vjpXUZ3ps2tY" # 构造Sheets原生CSV导出直链 csv_export_url = f"https://docs.google.com/spreadsheets/d/{file_id}/gviz/tq?tqx=out:csv" # 带请求头读取内容 df = pd.read_csv( csv_export_url, storage_options={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } ) print(df.head())
聊天应用场景下的写入实现注意事项
- 前置条件:目标表格在共享设置中开启“拥有链接的任何人可编辑”权限
- 实现逻辑:通过Sheets公开的表单提交接口,以追加行的形式写入单条聊天记录,全程不需要调用Google官方API,也不需要获取账号登录凭证
- 避坑提示:不要尝试通过“下载-本地修改-重新上传覆盖”的方式实现写入,无登录态场景下没有文件修改权限,上传操作会被直接拒绝
内容的提问来源于stack exchange,提问作者Ofir Ozery
相关产品推荐
相关产品推荐

