使用Python urllib2/requests对Google Drive进行身份验证并下载电子表格
我想下载一个文档,我在我的谷歌驱动器认证谷歌(我只希望某些用户能够访问它,不想在网上发布) 我尝试过使用使用Python urllib2/requests对Google Drive进行身份验证并下载电子表格,python,excel,http,download,python-requests,Python,Excel,Http,Download,Python Requests,我想下载一个文档,我在我的谷歌驱动器认证谷歌(我只希望某些用户能够访问它,不想在网上发布) 我尝试过使用请求,但显然我做错了什么。 从浏览器中,我可以下载我的文档到 https://docs.google.com/spreadsheets/d//export?format=xls 因此,在我的python脚本中,我执行以下操作: import os import requests import shutil from requests.auth import HTTPBasicAuth rem
请求
,但显然我做错了什么。
从浏览器中,我可以下载我的文档到
https://docs.google.com/spreadsheets/d//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)
导入操作系统
导入请求
进口舒蒂尔
从requests.auth导入HTTPBasicAuth
远程=”https://docs.google.com/spreadsheets/d//export?format=xls"
username=os.environ['GOOGLEUSERNAME']
password=os.environ['GOOGLEPASSWORD']
r=requests.get(远程,auth=HTTPBasicAuth(用户名,密码))
如果r.status_code==200:
以open(“document.xls”、“wb”)作为f:
shutil.copyfileobj(r.raw,f)
但是,生成的document.xls
为空
我做错了什么?事实上,你想做的事情可能是有可能的,但以下是一些原因,说明了为什么这件事很重要(绝对不是一个完整的清单):
用户代理(出于安全原因)浏览预期内容;你必须
希望这有帮助 我可能会为您提供一个简单的解决方案,具体取决于身份验证要求。你是说 我只希望某些用户能够访问它,但不希望 在网上发布 仅凭此声明,您就可以为文档创建一个“秘密”链接,并在用户之间共享此链接。然后,您可以轻松地自动检索此文档,例如使用wget,并指定格式,例如
csv
:
wget -O data.csv "https://docs.google.com/spreadsheets/d/***SHARED-SECRET***/export?format=csv"
或者,在Python(2)中:
实际上,我在生产中使用了它,它工作可靠,不会伪造用户代理。您是否有第(1)点的参考资料?我从来没有注意到这一点。这是我多年前尝试解析谷歌网站时的亲身经历。在这方面,我没有遇到过问题,使用wget和Python而不试图伪造用户代理(见下文)。关于用户代理,阻止这一点将起作用-因为这些链接是为任何人下载而创建的。但是试着在不创建链接的情况下抓取google.com,或者在本例中是一个随机的google文档,您的脚本会因为您的用户代理而被阻止。它的网络安全性当然你总的来说是有道理的。我回答的全部要点是,如果他能稍微改变一下关于身份验证的方法,那么有一种非常简单的方法可以可靠地工作,原因您再次指出:这是一个仅受共享机密保护的文档。
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())