使用Python urllib2 / requestsvalidationGoogle Drive并下载电子表格

我想要下载我在Google云端硬盘中对Google进行身份validation的文档(我只希望某些用户能够访问它,而不希望将其发布到网上)。

我曾尝试使用requests但显然我做错了什么。 从浏览器中,我可以将我的文档下载到地址https://docs.google.com/spreadsheets/d/<document key>/export?format=xls

所以在我的Python脚本中,我执行以下操作:

 import os import requests import shutil from requests.auth import HTTPBasicAuth remote = "https://docs.google.com/spreadsheets/d/<document key>/export?format=xls" username = os.environ['GOOGLEUSERNAME'] password = os.environ['GOOGLEPASSWORD'] r = requests.get(remote, auth=HTTPBasicAuth(username,password)) if r.status_code == 200: with open("document.xls","wb") as f: shutil.copyfileobj(r.raw, f) 

但是生成的document.xls是空的。

我究竟做错了什么?

实际上你可能试图做的是什么,但是这里有一些原因是不重要的(绝不是完整的列表):

  1. Google通常会阻止非浏览器的user-agents (例如您的Python脚本)以用于浏览器的预期内容(出于安全原因); 你将不得不欺骗它,这实际上很容易
  2. 多因素身份validation – 您将不得不closures(容易,但你被打开自己被黑客攻击…)
  3. 会话cookie – 又名security cookie ; (不那么容易得到)

你应该做什么呢

使用官方的谷歌驱动器API 。 此外, Python客户端库有一个很好的教程, 这个页面描述了如何从谷歌驱动器下载文件。

如果你想编写更less的代码,那么像PyDrive这样的库会让你的生活变得更加简单。

希望这可以帮助!

我可能会为你提供一个简单的解决scheme,具体取决于authentication要求是什么。 你是说

我只希望某些用户能够访问它,而不想在networking上发布它

仅从这个陈述中,您可以为您的文档创build一个“秘密”链接,并在您的用户之间共享。 然后,您可以使用wget 轻松地自动检索此文档,并指定格式,例如csv

 wget -O data.csv "https://docs.google.com/spreadsheets/d/***SHARED-SECRET***/export?format=csv" 

或者,在Python(2)中:

 import urllib2 from cookielib import CookieJar spreadsheet_url = "https://docs.google.com/spreadsheets/d/***SHARED-SECRET***/export?format=csv" opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar())) response = opener.open(spreadsheet_url) with open("data.csv", "wb") as f: f.write(response.read()) 

我实际上是在生产中使用它,它可靠地工作,而不伪造用户代理。