如何通过Google Docs API读取无文档ID的公开Google文档?
如何通过Google Docs API读取无文档ID的公开Google文档?
嘿,我来帮你解决这个问题!你遇到的情况是那个公开文档链接用的是发布ID(就是URL里2PACX-xxx那段),而Google Docs API需要的是原生的文档ID(常规文档URL里d/后面的那串字符),所以直接用这个发布ID调用API肯定行不通。下面给你两种可行的方案:
方案一:尝试获取原生文档ID,继续使用Docs API
如果这个公开文档允许查看原始文档,你可以这样操作:
- 打开你提供的那个/pub链接,看看页面右上角有没有“打开原始文档”的按钮,点击它跳转到原始文档页面
- 从原始文档的URL里提取ID:比如URL格式是
https://docs.google.com/document/d/[这里就是文档ID]/edit,把中间那段字符复制下来替换你代码里的DOCUMENT_ID - 另外,因为文档是公开可查看的,你其实可以不用OAuth授权,改用API Key来调用API,这样更简单:
- 去Google Cloud控制台创建一个API Key,启用Docs API
- 修改你的代码,用API Key代替OAuth Credentials,示例代码如下:
from googleapiclient.discovery import build from googleapiclient.errors import HttpError # 替换成你自己的API Key API_KEY = "你的API_KEY" # 替换成从原始文档URL提取的ID DOCUMENT_ID = "提取到的原生文档ID" def main(): try: service = build("docs", "v1", developerKey=API_KEY) document = service.documents().get(documentId=DOCUMENT_ID).execute() print(f"文档标题:{document.get('title')}") # 这里可以处理文档内容,比如提取文本 except HttpError as err: print(err) if __name__ == "__main__": main()
不过如果作者没有开放“查看原始文档”的权限,那这个方法就用不了,这时候可以试试方案二。
方案二:用BeautifulSoup爬取公开发布的页面内容
既然文档已经以网页形式公开发布了,直接爬取这个/pub页面的内容是更直接的办法,不需要依赖Google Docs API,步骤如下:
- 安装BeautifulSoup和requests:
pip install requests beautifulsoup4 - 编写代码爬取页面内容:
import requests from bs4 import BeautifulSoup # 你的公开文档发布链接 URL = "https://docs.google.com/document/u/0/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub?pli=1" def main(): response = requests.get(URL) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") # 提取文档内容,Google Docs发布的页面里内容通常在class为"c1"的标签里,或者你可以根据实际结构调整 content = soup.find_all(class_="c1") for paragraph in content: print(paragraph.get_text(strip=True)) if __name__ == "__main__": main()
这个方法的好处是不需要任何Google API的授权,只要页面是公开可访问的就能用,缺点是需要处理网页的HTML结构,如果Google调整了发布页面的布局,可能需要更新选择器。
总结一下:如果能拿到原生文档ID,用Docs API是最规范的方式;如果拿不到,用BeautifulSoup爬取公开页面是更可行的替代方案。
备注:内容来源于stack exchange,提问作者Pandasonsleds
相关产品推荐
相关产品推荐

