requests.get()获取Google Sheets导出CSV返回HTML而非文件如何解决
原因说明
你获取到HTML源码而非CSV数据,是因为Google服务识别到当前请求来自自动化脚本,触发了校验拦截,返回了服务首页而非导出数据。浏览器可以正常下载是因为请求附带了完整的浏览器标识、Cookie等校验信息。
解决步骤
- 首先确认目标Google Sheets的共享权限已设置为「所有拥有链接的用户均可查看」,排除权限拦截问题。
- 请求时添加模拟浏览器的
User-Agent请求头,绕过基础的爬虫识别策略。 - 若需要导出指定工作表,可在URL中添加
gid=对应工作表ID参数(工作表ID可在浏览器打开表格时,从URL的gid参数处获取)。
修正后代码
from io import BytesIO import requests import pandas as pd sheet_id = '替换为你的表格ID' # 如需导出指定工作表,替换为对应gid,默认0为第一个工作表 gid = '0' url = f'https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv&gid={gid}' # 模拟浏览器请求头 headers = { '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' } response = requests.get(url, headers=headers) # 校验请求状态,异常时直接抛出错误方便排查 response.raise_for_status() df = pd.read_csv(BytesIO(response.content)) # 测试输出前5行数据 print(df.head())
如果上述方案仍无法获取数据,可以打开浏览器的开发者工具,在「网络」标签页找到CSV导出请求,将请求头中的Cookie字段也添加到代码的headers参数中即可。
内容的提问来源于stack exchange,提问作者Aitard
相关产品推荐
相关产品推荐

