我想下载我在Google云端硬盘中向Google认证的文档(我只希望某些用户能够访问它并且不想在网上发布)。
我尝试过使用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
为空。
我做错了什么?
答案 0 :(得分:5)
实际上你可能会尝试做什么,但这里有一些的原因,为什么它不重要(绝不是一个完整的清单):
user-agents
非浏览器(如您的Python脚本)用于浏览器内容(出于安全原因);你必须spoof it, which is actually easy security cookie
; (不太容易得到)使用official google-drive API。此外,Python client library有一个很好的教程,this page介绍了如何从google-drive下载文件。
如果您想编写更少的代码,那么像PyDrive这样的库将让您的生活变得更加轻松。
希望这有帮助!
答案 1 :(得分:2)
我可能有一个简单的解决方案,具体取决于auth要求的具体内容。你在说
我只希望某些用户能够访问它而不想这样做 在网上发布
仅从此声明中,您可以为文档创建“秘密”链接,并在用户之间共享。然后,您可以轻松自动检索此文档,例如使用 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())
我实际上在生产中使用它,它可靠地工作,而不会伪造用户代理。