Scrapy 模擬登錄知乎--抓取熱點話題

工具準備

在開始以前,請確保 scrpay 正確安裝,手頭有一款簡潔而強大的瀏覽器, 如果你有使用 postman 那就更好了。css

使用以上命令生成知乎爬蟲,代碼以下:html

有一點切記,不要忘了啓用 Cookies切記切記 :git

 

模擬登錄

過程以下:github

  • 進入登陸頁,獲取 Header 和 Cookie 信息

完善的 Header 信息能儘可能假裝爬蟲, 有效 Cookie 信息能迷惑知乎服務端,使其認爲當前登陸非首次登陸,若無有效 Cookie 會遭遇驗證碼。 在抓取數據以前,請在瀏覽器中登陸過知乎,這樣才使得 Cookie 是有效的。json

3255415-6c02f08c8697ef0c

Header 和 Cookie 整理以下:api

 

  • 在瀏覽器中,模擬登錄,抓取登錄請求信息。

3255415-6c02f08c8697ef0c

從圖中能夠看到 _xsrf 參數, 這個參數與登錄驗證信息無關,但很明顯是由登錄頁面攜帶的信息。 Google了下 xsrf 的含義, 用於防範 跨站請求僞造 。瀏覽器

3255415-6c02f08c8697ef0c

  • 整理以上,代碼以下:

設置Bearer Token

通過上述步驟登錄成功了,有點小激動,有沒有! 但苦難到此還遠沒有結束,這個時候嘗試抓取最近熱門話題,直接返回 code:401 ,未受權的訪問。 受權信息未設置,致使了此類錯誤,莫非遺漏了什麼,看來只能在瀏覽器中追蹤請求參數來偵測問題。 在瀏覽器的請求中,包含了Bearer Token, 而我在scrapy中模擬的請求中未包含此信息, 因此我被服務器認定爲未受權的。 經過觀察發現 Bearer Token 的關鍵部分,就是 Cookies 中的 z_c0 包含的信息。服務器

3255415-6c02f08c8697ef0c
z_c0 包含的信息,是在登錄完成時種下的,因此從登錄完成返回的登錄信息裏,獲取要設置的 Cookie 信息, 而後拼接出 Bearer Token,最後設置到 Header 中。cookie

代碼整理以下:app

 

獲取數據

上述步驟後,數據獲取就水到渠成了,爲了檢測成功與否, 把返回信息寫到文件中,並且只獲取前五十個,代碼以下:

最終獲取的數據以下圖所示:

3255415-6c02f08c8697ef0c

寫在最後

知乎的數據,只有登陸完成以後,纔可有效的獲取,因此模擬登錄是沒法忽略無論的。 所謂的模擬登錄,只是在scrapy中儘可能的模擬在瀏覽器中的交互過程,使服務端無感抓包過程。 請求中附加有效的 Cookies 和 Headers 頭信息,可有效的迷惑服務端, 同時在交互的過程當中,獲取後續請求必要信息和認證信息,使得整個流程能不斷先前。

相關文章
相關標籤/搜索