當前位置:
首頁 > 最新 > Python 爬蟲闖關

Python 爬蟲闖關

前言

第三關開始上難度了,本關的難點在於題中所謂的「兩層認證」,涉及到 cookie 的處理。

闖關地址是:

http://www.heibanke.com/lesson/crawler_ex02/

頁面分析

剛進入頁面時沒看懂是怎麼玩,以為到這就結束了,抱著試試看的態度註冊了下。

註冊登錄後,發現是一個記賬點之類的,網頁還沒有跳轉到題目網頁,還不知道怎麼玩。

重新從題目地址進入後,發現可以玩了:

頁面提示比上一關多了兩層保護

解題思路

題目中提到了兩層保護,是哪兩層呢?

首先,多了賬號登陸一層,還有一層是什麼呢?重新登陸,打開 firebug 記錄一下整個流程:

GIF

從動圖中我們可以看到整個流程分為 4 步,依次點擊 4 個步驟,分析記錄請求標頭、請求正文、響應標頭、cookies 等是否有值,值為多少,值的來源與請求順序之間的關係。

為了下文描述方便,我們約定兩個變數:

URL=

LOGIN_URL=


首先訪問 URL,瀏覽器會向 URL 發出 GET 請求,得到一個 302 的重定向的響應,響應標頭中包含了一個 Location 欄位,告訴瀏覽器新的訪問地址 。

如果之前用同樣的瀏覽器闖過第一關或第二關,此請求的請求標頭仍然會帶上 cookie,但並無實際作用,可忽略;


瀏覽器向 LOGIN_URL 發出新的 GET 請求。我們注意到請求和響應中帶了一個 cookie,其中都有一個  欄位,其值為 708NMR2acyRWlblKw0rBqSjayL70TJDT。

如果仔細觀察,第一步請求頭的 cookie 中也有這麼一個欄位,我們將其記下,此 csrftoken 都將作為以後訪問過程中的依據之一。我們將此返回的 cookie 記為 c1;

首先我們這裡已經註冊過了,直接填寫登錄信息,瀏覽器會再向 LOGIN_URL 發出 POST 請求,得到一個向第一步中 URL 的 重定向的 302 響應。

請求標頭和請求正文中都附帶上第二步中的 cookie c1,另外,我們發現請求正文參數中除了 username 和 password 欄位外,還有一個  欄位,該欄位的值就是 c1 中 csrftoken 的值。

返回的響應標頭中附帶了兩個新的 cookie,其中一個中同樣包含了 csrftoken 欄位,值為 nmQXET2BHzNbhCksAur9XtLjEiYnfTC4,後面猜數字就會用到。我們將此返回的 cookies 記為 c2;

登錄成功後,發現還是第二關的猜數字遊戲。只不過,這次猜數字之前需要先進行登錄,獲取 cookie。


頁面填寫昵稱和數字,點擊提交,瀏覽器向 URL 提交 POST 請求,請求標頭附帶的是第 3 步的 cookie c2,請求正文是昵稱密碼和 cookie c2 中的 csrftoken 對應的值。

後面的步驟就和第二關差不多了,只不過需要帶上 cookie 和 csrftoken。

整個流程涉及兩次 cookie 的獲取,這就是題目所謂的兩層保護

requests 實現

由於第 1 步返回結果中除了 Location 欄位沒有其他有價值的信息,所以在已知新的地址的情況下可省略第 1 步,直接從第 2 步開始。

運行:

使用 selenium 實現

使用 selenium 實現方式好像不涉及驗證之類的問題,因為完全是模擬的人類登錄瀏覽器的過程。

運行成功頁面:

GIF


總結

這關主要考察了登錄過程的模擬,涉及到 cookie 和 post 數據的處理。登錄模擬重點在於過程的分析,post 數據中各欄位意義的分析。僅僅一個猜數字的網站就這麼複雜,要是其他更複雜的網路,要順利模擬登錄必須知道每個欄位的來源、關聯、意義,那會更加困難!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

十五分鐘了解 Python 並發編程
十行Python代碼搞定圖片中的物體檢測

TAG:Python |