2015-01-26 44 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

相關問題