使用Python urllib2 /请求对Google云端硬盘进行身份验证并下载电子表格

时间:2015-01-26 21:41:38

标签: python excel http download python-requests

我想下载我在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为空。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

实际上你可能会尝试做什么,但这里有一些的原因,为什么它不重要(绝不是一个完整的清单):

  1. Google通常会阻止user-agents非浏览器(如您的Python脚本)用于浏览器内容(出于安全原因);你必须spoof it, which is actually easy
  2. 多因素身份验证 - 您必须关闭它(很简单,但是您可能会被黑客攻击......)
  3. Session-cookie - aka security cookie; (不太容易得到)
  4. 你应该做什么

    使用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())

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