2009-10-14 55 views
4

現在,我可以使用urllib2來抓取常規頁面。如何使用Python登錄到Facebook/Myspace並抓取內容?

request = urllib2.Request('http://stackoverflow.com') 
request.add_header('User-Agent',random.choice(agents)) 
response = urllib2.urlopen(request) 
htmlSource = response.read() 
print htmlSource 

但是...我想模擬POST(或假會話)?這樣我就可以進入Facebook並抓取。我怎麼做?

回答

7

您需要在登錄時將您選擇的站點的Cookie發送給您;這就是保持你的會話。隨着urllib2,您可以通過創建一個支持cookie的處理的開瓶器對象做到這一點:

import urllib2, cookielib 
jar = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 

有了這個揭幕戰中,你可以做的請求,GET或POST:

content = opener.open(urllib2.Request(
    "http://social.netwo.rk/login", 
    "user=foo&pass=bar") 
).read() 

由於有第二參數urllib2.Request,它將是一個POST請求 - 如果這不是,你最終得到一個GET請求。您還可以通過.add_header或通過向構造函數傳遞一個字典(或元組元組)來添加HTTP標頭。閱讀urllib2.Request的手冊以獲取更多信息。

這應該讓你開始!祝你好運。

(PS:如果你不需要讀取到的Cookie訪問,你可以省略創建cookie罐自己;在HTTPCookieProcessor會爲你做它。)

1

您可以通過首先使用urllib對數據進行編碼,然後使用urllib2發送請求來完成POST請求,就像您現在正在做的那樣。

這在this article中有解釋。

4

Mechanize庫是一個簡單的方法來在Python中模擬瀏覽器。

1

或者您可以使用PyCurl作爲選擇...