Python網絡爬蟲實戰(四)模擬登錄


對於一個網站的首頁來說,它可能需要你進行登錄,比如知乎,同一個URL下,你登錄與未登錄當然在右上角個人信息那里是不一樣的。

1

(登錄過)

2

(未登錄)

那么你在用爬蟲爬取的時候獲得的頁面究竟是哪個呢?

肯定是第二個,不可能說你不用登錄就可以訪問到一個用戶自己的主頁信息,那么是什么讓同一個URL在爬蟲訪問時出現不同內容的情況呢?

在第一篇中我們提到了一個概念,cookie,因為HTTP是無狀態的,所以對方服務器並不知道這次請求到底來自於誰,就好像突然你收到了一封信,上面讓你給他寄一些東西,但是信上卻沒有他的聯系方式。

在HTTP中也是如此,我們普通的請求都類似於匿名信,而cookie的出現,就是讓這封信上蓋上了你自己的名字。

在請求時附帶上你的cookie,服務器放就會知道這次請求來自於誰,然后你點擊個人信息頁,服務器就知道是要返回這個cookie對應的用戶的信息頁了。

在谷歌瀏覽器中,你可以在控制台Application里面找到當前網站的所有cookie鍵值對。一般來說用於確認你個人信息的只有一個鍵值對,但是你也可以把所有的都用上,並不能保證對方服務器是不是對某些鍵值對也進行檢查了。

很多網站在你沒有登錄的情況下並不會給過多的數據讓你看,所以你的爬蟲需要進行一次模擬登錄。

模擬登錄需要從一個網站的登錄界面開始,因為我們要在這里用爬蟲發送post請求附帶賬號密碼來登錄對方網站。

拿人人網來舉例。

人人網登錄地址:http://www.renren.com/

3

打開控制台,我們可以先嘗試觀察一次登錄的網絡請求。很容易就能在里面找到一個/login的POST請求,登錄的請求都會是POST,因為GET請求的參數會放在URL上,很容易被人攔截看到你的賬號密碼。

4

在表單參數中,我們需要注意的就只有email,password和rkey了,其他的照填即可。

email是我們的賬號名,可以是郵箱也可以是電話號。

password是密碼,這個密碼明顯是加密過的,對於這種情況,我們在請求時也要用同樣的算法對密碼進行加密,但是我們如何知道對方采用了什么加密算法呢?

這種情況大多數你都可以在控制台sources里面找到,在這里你可以找到網站加載過的所有文件,而加密算法一般會在js文件中。

sources里面很明顯有一個叫login.js的文件,那么它一定和登錄有關系,因為在sources里面打開js太難看了,會縮成一行,所以我就在控制台打開它了。

5

根據password定位到這里。

6

可以找到關於登錄時密碼加密的算法,順便一提,人人網這個login.js的函數命名真的是沒救了,abcd...xyz用了個遍,不知道是為了惡心自己人還是惡心別人寫爬蟲分析它這個login。但是很遺憾的是人人網給爬蟲留下了一個很方便的登錄途徑,我們甚至可以不用自己加密密文!!!

雖然說這里可以不用自己轉義加密算法了,但是其實很多網站並不會像人人網這樣暴露出一個action的do事件讓我們可以直接調用的,所以最好還是掌握一些密文加密的那部分。

再來看人人網暴露出的爬蟲便捷登錄的接口。

7

我們只需要調用這個do即可完成登錄。

也就是說,我們模擬這個form來完成請求,在請求前,我們需要把信息裝填到form中。

先安裝scrapy依賴

pip install scrapy

import scrapy
url = "http://www.renren.com/PLogin.do"
data = {"email": "xxxxx", "password": "xxxxx"}
response = scrapy.FormRequest(url,formdata=data,callback=self.parse_page)

登錄成功之后,我們就可以從response中拿到cookie,然后在之后的請求中都附帶上cookie,這樣對方服務器就知道我們是誰了。

7

如果之前在網頁登錄失敗次數過多,可能會導致爬蟲模擬登錄需要驗證碼,而此處是考慮不需要驗證碼的情況,所以可能會登錄失敗,解決方法可以是清理本機Cookie。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM