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

如何用Python通过URL提取Google Docs中的表格数据

从公开Google Docs提取表格的两种有效方法

方法一:网页解析(无需API密钥)

你的Google Docs链接是公开发布状态(以/pub结尾),可以直接抓取网页HTML,通过解析表格标签提取数据,无需配置API权限。

步骤:

  1. 安装所需依赖:
pip install requests beautifulsoup4 pandas
  1. 运行以下代码提取表格:
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 目标文档链接
doc_url = "https://docs.google.com/document/d/e/2PACX-1vSHesOf9hv2sPOntssYrEdubmMQm8lwjfwv6NPjjmIRYs_FOYXtqrYgjh85jBUebK9swPXh_a5TJ5Kl/pub"

# 可选:添加请求头避免被拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

# 获取网页内容
response = requests.get(doc_url, headers=headers)
response.raise_for_status()  # 捕获请求失败的异常

# 解析HTML结构
soup = BeautifulSoup(response.text, 'html.parser')

# 提取所有表格
tables = soup.find_all('table')

# 处理每个表格并输出/保存
for table_idx, table in enumerate(tables, 1):
    # 提取表头
    header_cells = table.find_all('th')
    headers = [cell.get_text(strip=True) for cell in header_cells]
    
    # 提取表格行数据
    rows = []
    for row in table.find_all('tr')[1:]:  # 跳过表头行
        cell_texts = [cell.get_text(strip=True) for cell in row.find_all('td')]
        if cell_texts:  # 跳过空行
            rows.append(cell_texts)
    
    # 转换为DataFrame方便处理
    df = pd.DataFrame(rows, columns=headers if headers else None)
    print(f"第{table_idx}个表格:")
    print(df)
    
    # 可选:保存为CSV文件
    df.to_csv(f"google_docs_table_{table_idx}.csv", index=False)

如果之前用requests报错,大概率是未添加请求头导致被Google拦截,加上上述headers参数即可解决。


方法二:Google Docs API(精准提取)

如果需要更精准的结构化数据,可使用官方API,但需正确配置授权:

准备工作:

  • 登录Google Cloud控制台,创建新项目并启用Google Docs API
  • 创建服务账号,下载JSON格式的密钥文件
  • 将服务账号的邮箱地址添加到目标Google Docs的共享列表中,授予查看权限

步骤:

  1. 安装依赖:
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib pandas
  1. 运行以下代码:
from google.oauth2 import service_account
from googleapiclient.discovery import build
import pandas as pd

# 替换为你的服务账号密钥文件路径
SERVICE_ACCOUNT_KEY_PATH = "your-service-account-key.json"
# 从文档链接中提取的文档ID
DOCUMENT_ID = "2PACX-1vSHesOf9hv2sPOntssYrEdubmMQm8lwjfwv6NPjjmIRYs_FOYXtqrYgjh85jBUebK9swPXh_a5TJ5Kl"

# 配置授权范围
SCOPES = ["https://www.googleapis.com/auth/documents.readonly"]
creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_KEY_PATH, scopes=SCOPES
)

# 构建API客户端
service = build("docs", "v1", credentials=creds)

# 获取文档内容
document = service.documents().get(documentId=DOCUMENT_ID).execute()
content = document["body"]["content"]

# 提取表格数据
tables_data = []
for elem in content:
    if "table" in elem:
        table = elem["table"]
        table_rows = []
        # 遍历表格的每一行
        for row in table["tableRows"]:
            cell_contents = []
            # 遍历行内的每个单元格
            for cell in row["tableCells"]:
                cell_text = ""
                # 提取单元格内的文本内容
                for cell_content in cell["content"]:
                    if "paragraph" in cell_content:
                        for para_elem in cell_content["paragraph"]["elements"]:
                            if "textRun" in para_elem:
                                cell_text += para_elem["textRun"]["content"].strip()
                cell_contents.append(cell_text)
            table_rows.append(cell_contents)
        tables_data.append(table_rows)

# 转换为DataFrame并输出
for idx, table in enumerate(tables_data, 1):
    # 第一行作为表头,其余作为数据行
    df = pd.DataFrame(table[1:], columns=table[0])
    print(f"第{idx}个表格:")
    print(df)
    df.to_csv(f"docs_api_table_{idx}.csv", index=False)

之前使用API报错,常见原因包括:未启用Docs API、服务账号无文档访问权限、密钥路径错误或文档ID提取错误,对照上述步骤检查即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:54:51