分布式爬蟲的登錄

Session是一段保存在服務器上面的信息,用來驗證用戶的身份。在客服端的Cookie中,保存了Session ID,服務器通過這個Session ID來找到對應的這個用戶的Session。

不論是模擬登錄還是在爬取數(shù)據(jù)的過程中輸入突然出現(xiàn)的驗證碼,歸根到底是修改服務器上面對應你的那一段Session。

只有你的Session被服務器允許直接訪問頁面,你的爬蟲才可以訪問頁面。否則就會讓你登錄,或者彈出一個驗證碼輸入框。

分布式爬蟲的登錄

如果網(wǎng)站需要登錄才能爬取數(shù)據(jù),那么登錄的過程應該在爬蟲開始爬取需要的內(nèi)容之前先完成,并獲取(足夠多的)Cookie來供我們的爬蟲使用。這里我把“足夠多的”打上了括號,是因為有些時候只需要一個或者不需要Cookie,但有時候如果只使用一個賬號的Cookie,很容易被屏蔽,所以需要注冊很多的賬號,并用這些賬號的Cookie來運行爬蟲。

登錄網(wǎng)站獲取Cookie這件事,還是使用中間件來完成。

假設獲取Cookie的中間件叫做CookieMiddleware, 那么它可以這樣寫:

假設我有100個賬號和密碼,那么我就得到100個賬號的Cookie,然后再隨機選擇一個賦值給request.cookies即可。

上面的代碼演示了設定Cookie的過程。但是如果有100個賬號,我們不可能在訪問每個網(wǎng)頁的時候,都把每個賬號重新登錄一次,這樣會大大降低訪問的速度。正確的做法是,把使用requests往服務器post賬號并返回Cookie的這部份代碼單獨存放到另外一個文件中,一次性獲取所有的Cookie,再將Cookie放到一個列表中,供CookieMiddleware的process_request隨機選用。如下面兩張圖所示:

當然,在實際的登錄中,很少網(wǎng)站只需要用戶名和密碼就可以登錄的,大多數(shù)情況下還需要一些其他的東西,像是驗證碼啊,是否保持登錄啊,或者網(wǎng)頁中的一些ID啊。所以需要根據(jù)實際情況來修改login.py。

一些不會經(jīng)常改變的常量信息可以使用settings.py來存放,如下圖所示:

當然,賬號也可以像代理IP一樣,存放在一個數(shù)據(jù)庫中,爬蟲定期使用新的賬號的Cookie來替換舊的賬號的Cookie。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容