如何用Python无需认证提取公开发布Google Doc的表格数据?
无需认证提取公开Google Doc中的表格到Pandas DataFrame
你之前用Google Docs API报错是因为pub URL里的长字符串并不是Docs API要求的原始文档ID,而且API本身需要认证,完全不符合你“无授权、直接用公开URL”的需求。
直接爬取公开发布的HTML页面是最直接的方案,步骤如下:
依赖准备
先安装需要的库:
pip install requests beautifulsoup4 pandas
完整代码实现
import requests from bs4 import BeautifulSoup import pandas as pd # 替换成你的公开Google Doc的pub URL pub_url = "https://docs.google.com/document/d/e/<你的长字符串>/pub" # 模拟浏览器请求,避免被Google拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } # 获取页面内容 response = requests.get(pub_url, headers=headers) response.encoding = "utf-8" # 确保Unicode字符正常解析 # 解析HTML soup = BeautifulSoup(response.text, "html.parser") # 找到文档中的表格(这里假设只有一个目标表格,若多个可调整索引) table = soup.find_all("table")[0] # 解析表格行数据 rows = [] for tr in table.find_all("tr"): cells = [] for td in tr.find_all(["td", "th"]): # 获取单元格文本,处理可能的换行和空格 cell_text = td.get_text(strip=True, separator=" ") cells.append(cell_text) rows.append(cells) # 转换为Pandas DataFrame # 第一行作为表头,后续作为数据 df = pd.DataFrame(rows[1:], columns=rows[0]) # 输出结果 print(df)
说明
- 这个方案完全不需要任何Google API认证,只要文档是公开发布的,任何人替换URL就能运行。
- 自动处理Unicode字符,因为我们指定了UTF-8编码。
- 如果文档中有多个表格,修改
find_all("table")[0]的索引即可(比如[1]取第二个表格)。 - 若表格存在合并单元格,需要额外处理单元格的
rowspan和colspan属性,基础版代码默认将合并单元格的内容保留在第一个单元格,其余合并位置留空,你可以根据需求调整解析逻辑。
内容的提问来源于stack exchange,提问作者Rbe
相关产品推荐
相关产品推荐

