2012-01-27 101 views
3

我是網絡編程的新手。我想構建一個爬行器,用於通過Python在Foursquare中抓取社交圖。 我有一個使用apiv2庫的「手動」控制爬蟲。主要方法是這樣的:如何爲使用oauth2的網站構建Python爬蟲

def main(): 
    CODE = "******" 
    url = "https://foursquare.com/oauth2/authenticate?client_id=****&response_type=code&redirect_uri=****" 
    key = "***" 
    secret = "****" 
    re_uri = "***" 

    auth = apiv2.FSAuthenticator(key, secret, re_uri) 
    auth.set_token(code)  
    finder = apiv2.UserFinder(auth)   

    #DO SOME REQUIRES By USING THE FINDER 
    finder.finde(ANY_USER_ID).mayorships() 
    bla bla bla 

的問題是,目前,我在我的瀏覽器中鍵入URL,拿起從重定向URL的代碼,然後在我的程序更新代碼,並運行它再次。我認爲可能有一些方法可以將代碼編碼到我當前的程序中並使其自動化。

任何指令或示例代碼表示讚賞。

回答

1

你應該看看python-oauth2模塊。它似乎是那裏最穩定的東西。

尤其是,this blog post在如何輕鬆使用Python的情況下很好地運行了Oauth。示例代碼使用Foursquare API,所以我會先檢查一下。

我最近不得不讓oauth與Dropbox合作,and wrote this module包含了做oauth交換的必要步驟。

對於我的系統,我能想到的最簡單的事情就是Oauth客戶端的pickle。我的博客只是包反序列化醃客戶端,並要求終端具有以下功能:

get = lambda x: client.request(x, 'GET')[1] 

就可以確保你的員工有這樣的客戶對象和你應該是好你不要去:-)

+1

謝謝您的關注,先生。我有一個問題,在博客中,似乎不需要「代碼」來進行拍攝。真的嗎?原因在我的庫中,代碼是訪問令牌的必需參數。我只是更新我的代碼部分。希望讓問題更清楚。 – user1056824 2012-01-28 05:52:37

+0

如果我正確讀取你的代碼,你的程序中的'CODE'變量是不需要的;它由Python-Oauth2處理。 – mvanveen 2012-01-28 07:13:55

+0

我會試試看。謝謝。 :) – user1056824 2012-01-28 17:41:56

0

每次都必須這樣做。他們會給你一個token,這對X小時/天有好處。最終你會得到403的http代碼,你需要重新認證

+0

我確實在'bla bla bla'部分獲得了一個令牌,類似autu.set_token(CODE)來獲得授權。但每個令牌都有限制請求服務器。我想抓取用戶的關係和他們的場地。似乎花了很多請求,像20個用戶一樣抓取後,令牌過期了,我必須申請一個新的。由於獲取令牌需要「代碼」,因此我必須使用我的個人帳戶獲得授權。這是我嘗試自動轉換的部分。或者我想知道是否有其他方法可以在沒有「代碼」和令牌的情況下抓取數據。 – user1056824 2012-01-28 05:45:02

1

讓你的應用程序首先由oauth2認證。 這是一個如何使用oauth進行twitter身份驗證的示例。 http://popdevelop.com/2010/07/an-example-on-how-to-use-oauth-and-python-to-connect-to-twitter/

同樣,你可以找到更多的例子,在https://code.google.com

然後你可以使用BeautifulSoup或LXML爲HTML解析。您可以提取頁面源中的相關數據,您將在請求完成後獲取該數據。

BeautifulSoup文檔 - http://www.crummy.com/software/BeautifulSoup/

要下載圖片,視頻等您可以用歎爲觀止。詳細瞭解http://docs.python.org/library/urllib2.html