Python 爬蟲模擬登陸知乎

2022-04-13 16:25:16 字數 2151 閱讀 8339

在之前寫過一篇使用python爬蟲爬取電影天堂資源的部落格,重點是如何解析頁面和提高爬蟲的效率。由於電影天堂上的資源獲取許可權是所有人都一樣的,所以不需要進行登入驗證操作,寫完那篇文章後又花了些時間研究了一下python模擬登陸,網上關於這部分的資料很多,很多demo都是登陸知乎的,原因是知乎的登陸比較簡單,只需要post幾個引數,儲存cookie。而且還沒有進行加密,很適合用來做教學。我也是是新手,一點點的摸索終於成功登陸上了知乎。就通過這篇文章分享一下學習這部分的心得,希望對那些和我一樣的初學者有所幫助。

先來說一下,爬蟲模擬登陸的基本原理吧,我也是剛開始接觸對於一些深層次的東西也不是掌握的很清楚。首先比較重要的乙個概念就是cookie,我們都知道http是一種無狀態的協議,也就是說當乙個瀏覽器客戶端向伺服器提交乙個request,伺服器回應乙個response後,他們之間的聯絡就中斷了。這樣就導致了這個客戶端在向伺服器傳送請求時,伺服器無法判別這兩個客戶端是不是乙個了。這樣肯定是不行的。這時cookie的作用就體現出來了。當客戶端向伺服器傳送乙個請求後,伺服器會給它分配乙個標識(cookie),並儲存到客戶端本地,當下次該客戶端再次傳送請求時連帶著cookie一併傳送給伺服器,伺服器一看到cookie,啊原來是你呀,這是你的東西,拿走吧。所以乙個爬蟲模擬登陸就是要要做到模擬乙個瀏覽器客戶端的行為,首先將你的基本登入資訊傳送給指定的url,伺服器驗證成功後會返回乙個cookie,我們就利用這個cookie進行後續的爬取工作就行了。

我這裡抓包用的就是chrome的開發者工具,不過你也可以使用fiddler、firebug等都可以,只不過作為一名前端er對chrome有一種特殊的喜愛之情。準備好工具接下來就要開啟知乎的登陸頁面並檢視 我們可以很容易發現這個請求 傳送的就是登入資訊,當然我使用手機登陸的 用郵件登陸的是最後結尾是email

所以我們只需要向這個位址post資料就行了

phone_num   登入名

password       密碼

captcha_type  驗證碼型別(這個引數著這裡並沒有實質作用)

rember_me    記住密碼

_xsrf             乙個隱藏的表單元素 知乎用來防禦csrf的(關於csrf請開啟這裡) 我發現這個值是固定所以就在這裡直接寫死了 若果有興趣的同學可以寫乙個正規表示式 把這部分的值提取出來 這樣更嚴謹一些。

#初始化乙個cookiejar來處理cookie

#例項化乙個全域性opener

opener=urllib2.build_opener(cookie_support)

request =urllib2.request(posturl, data, headers)

result=opener.open(request)

print result.read()

當你看到伺服器返回這個資訊的時候就說明你登陸成功了

#翻譯過來就是 「登陸成功」 四個大字

然後你就可以用這個身份去抓取知乎上的頁面了

page=opener.open("

")content = page.read().decode('

utf-8')

print(content)

這段** 就是通過例項化乙個opener物件儲存成功登陸後的cookie資訊,然後再通過這個opener帶著這個cookie去訪問伺服器上關於這個身份的完整頁面。更複雜的比如微博的登陸這種對請求的資料進行加密了的後面有時間再寫出來,與大家分享

Python爬蟲之模擬登陸知乎

在chrome瀏覽器下抓取登陸過程的包 注意把preserve log勾上 表單的結構主要包括 xsrf,password,phone num 我們要找到 xsrf的值,重新載入zhihu.com之後我們可以發現response裡面有 xsrf 我們就可以把 xsrf的值讀取出來 然後set一下co...

python模擬登陸知乎

恢復內容開始 在完成前面的階段的任務之後,我們現在已經能夠嘗試著去模擬登入一些 了。在這裡我們模擬登入一下知乎做一下實驗。筆者在這裡總共用了三天多的時間,下面給大家分享一下筆者是怎麼一步一步的模擬登入成功的。也希望大家能夠吸取我的教訓。初步的模擬登入 下面這段 是筆者最初寫的,我們慢慢來看 impo...

HttpClient 模擬登陸知乎

最近做爬蟲相關工作,我們平時用httpwebrequest比較多,每乙個url都要建立乙個httpwebrequest例項,而且有些 驗證比較複雜,在登陸及後續抓取資料的時候,每次請求需要把上次的cookie傳遞給這次請求。記得這篇部落格 結尾,dudu總結了 httpclient最與眾不同的地方是...