2015-01-26 96 views
4

我想要下载我的Google Drive中的文档,并向Google进行身份验证(我只希望某些用户能够访问它并且不想发布它在网上)。向Google云端硬盘进行身份验证并使用Python下载电子表格urllib2/requests

我试过使用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是空的。

我在做什么错?

回答

5

它实际上可能是可能是你正在尝试做的,但这里有一些原因,这将是不平凡的(决不是一个完整的列表):

  1. 谷歌通常阻止user-agents这是非浏览器(如您的Python脚本)浏览器的预期内容(出于安全原因);你将不得不spoof it, which is actually easy
  2. 多因素身份验证 - 你必须把它们关掉(容易,但你打开自己的被黑客攻击...)
  3. Session-cookie - aka security cookie; (不是那么容易得到阿霍德)

你应该做的,而不是

使用official google-drive API。另外,Python client library有一个很好的教程,this page描述如何从谷歌驱动器下载文件。

如果您想要编写更少的代码,那么像PyDrive这样的库会让您的生活更轻松。

希望这会有所帮助!

+0

感谢Marco,PyDrive似乎是一个不错的解决方案:) – lucacerone 2015-02-01 09:32:19

+0

你有没有参考点(1)?我从未观察到这一点。 – 2015-02-05 15:29:00

+0

这是我自己的经验,当我试图解析谷歌网站多年前。 – 2015-02-05 15:33:11

2

我可能有一个简单的解决方案,取决于什么确切的认证要求。你是说

我只希望某些用户能够访问它,不想 它发布到网络

就从这句话独自一人,这可能足以为您打造您的文档的“秘密”链接,并在您的用户中分享。然后您可以轻松地自动检索此文档,例如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()) 

我实际使用,在生产中,工作可靠,没有伪造的用户代理。

+0

关于用户代理阻塞,这将起作用 - 因为这些链接是由任何东西创建的。但是请尝试在google.com或者在这种情况下搜索一个随机的google-doc文档而不创建链接,并且您的脚本因为您的用户代理而被阻止。它的网络安全101 – 2015-02-05 15:40:23

+1

当然,你总体上有一个问题。我的答案的重点是*如果他可以稍微改变他的身份验证方法,那么有一种非常简单的方法可以可靠地工作,因为你再次指出:它只是一个受共享密钥保护的文档。 – 2015-02-05 15:45:28

相关问题