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

使用Python requests.get()获取CSV/TSV格式谷歌表格多行字段问题

问题背景

我有一个包含多行字段的谷歌表格,可通过以下URL导出为CSV或TSV格式:

  • CSV导出链接:https://docs.google.com/spreadsheets/d/e/Eis4Ya-Le9Py/pub?gid=0&single=true&output=csv
  • TSV导出链接:https://docs.google.com/spreadsheets/d/e/Eis4Ya-Le9Py/pub?gid=0&single=true&output=tsv

手动下载文件后,用OpenOffice能正常识别多行字段——这些多行字段会被双引号包裹,纯文本编辑器里也能看到该格式。但用Python的requests库发送get请求获取文件时,双引号却被移除了。

示例代码

import requests

r = requests.get(url)

print(r.text)
print(r.content)
print(r.headers)

返回内容

文本输出:

id  description
1   one line
2   line1 line2
3   l1 l2 empty line below  end
4   normal

字节内容输出:

b'id\tdescription\r\n1\tone line\r\n2\tline1 line2\r\n3\tl1 l2 empty line below  end\r\n4\tnormal'

响应头:

{'Content-Type': 'text/tab-separated-values', 'X-Frame-Options': 'ALLOW-FROM https://docs.google.com', ... , 'Transfer-Encoding': 'chunked'}
问题

该现象原因是什么?如何修改此行为?注:所处环境无法使用csv处理库。


解答

原因分析

谷歌表格导出服务会根据请求的Accept请求头调整返回内容格式:

  • 浏览器或文件下载工具请求时,发送的Accept头通常包含text/csv或application/octet-stream这类明确标识,谷歌会返回带双引号包裹多行字段的标准格式。
  • requests库默认发送的Accept头是*/*(接受所有类型),再加上响应头的Transfer-Encoding: chunked,谷歌导出服务会自动去掉双引号,将多行字段合并为单行返回,导致格式丢失。

解决方法

手动给requests的get请求添加指定的Accept头,明确告诉谷歌服务返回带引号的标准TSV/CSV格式:

针对TSV的修改代码:

import requests

headers = {
    'Accept': 'text/tab-separated-values'
}
r = requests.get(url, headers=headers)

print(r.content)

针对CSV的修改代码:

import requests

headers = {
    'Accept': 'text/csv'
}
r = requests.get(url, headers=headers)

print(r.content)

添加指定Accept头后,谷歌服务会返回和手动下载一致的、带双引号包裹多行字段的原始格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:00:56