為爬蟲獲取登入cookies:登入的恩恩怨怨

王平發表於2018-12-04

我們在上一章中講到的新聞爬蟲,是基本不受目標伺服器限制的爬蟲,技術上的挑戰主要在抓取任務的管理、分配,併發的使用,提高效率等方面。而實際中,不同抓取目標的爬蟲會遇到很多阻礙,這個阻礙就是登入

python爬蟲實現登入功能

曾幾何時,登入是一件很簡單的事情,一個賬戶及其密碼,POST給伺服器,伺服器驗證通過即可。那是一個美好的樸素年代,伺服器不設防,使用者不貪婪。然而,時過境遷,人心變了。越來越多的人想要收集資料,爬蟲也就越來越多;而網站就有了網路請求壓力,也有了死守資料私心。天下熙熙,皆為利來;天下攘攘,皆為利往。現在的網際網路,就成了一個利字當頭、魔高一尺道高一丈的戰場。

如今,各種網站都設定了複雜的登入這堵高高的牆來阻止爬蟲大量甚至全部獲取網站的資料。比如,12306的驗證碼是點選圖片,微博是變形的字母驗證碼,知乎是點選倒立的漢字,嗶哩嗶哩通過拖動滑塊拼圖來驗證。這些變態的驗證過程都是加入人的互動來防止爬蟲自動登入,從而阻止爬蟲自動化的大批量抓取。

小猿們都已經知道,HTTP協議是無狀態的,使用者登入的狀態靠cookies在瀏覽器和伺服器之間來回傳送來記錄。完成登入後,cookies在一定時間範圍內是保持不變的,直接獲得這個cookies給爬蟲用,就可以讓爬蟲有了登入的狀態,進而進行後面的抓取,當然,這個抓取只能持續到cookies過期之前。

1. 爬蟲登入的三種層次

完成登入這個過程,最好是程式自動化的實現,那麼你寫好程式後就可以一邊兒玩去了;然而好多時候,事情不是那麼讓人省心,登入還需要人工參與一下下。總結下來,實現登入有以下三個層次:

  1. 簡單的POST賬戶密碼就可以實現自動化登入;
  2. 通過程式可以模擬出登入流程實現自動化登入;
  3. 登入需要人工(智慧)介入,人工智慧實現自動化登入;

第一個層次,使用requests模組加一兩行程式碼就可以實現,關鍵是而今遇到這樣的良心網站是可遇不可求的。
第二個層次,是很有挑戰性的,也是爬蟲界人士力求達到的層次。
第三個層次,是很方便的,臨時抓取定量資料的寶典利器,無法是人工輸入一下驗證碼;利用人工智慧識別驗證碼,同樣也可以達到完全無人介入的地步,但是這已經不是爬蟲的範疇了,而要實現人工智慧破解各種變態的驗證碼所耗費的資源也是難以想象的。

由此看來,登入狀態cookies的獲取,主要還是靠模擬登入流程或人工輸入驗證碼的方式實現。

2. 爬蟲登入分析的三類工具

模擬登入,首先就要分析出目標網站的登入流程才能進行程式模擬。而要分析這個過程,就需要工具的輔助,這樣的工具有:

  • Chrome瀏覽器開發者工具(F12)
  • Charles、Fiddler Web除錯代理(Web Debugging Proxy)工具
  • Wireshark抓包工具

Chrome的F12,我們前面已經介紹過了,它可以很好的幫助我們分析瞭解網站的載入過程,但相對於專業工具Charles等又稍顯不足;Wireshark是專業的抓包工具,它不僅僅可以分析http協議,TCP、UDP等照樣不在話下,但對我們分析登入流程又過於複雜。所以我們還是選擇Charles、Fiddler這樣的專門的Web(http)除錯代理。

下一篇說個常用的網路抓包工具:
charles抓包工具的使用

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章