當前位置:
首頁 > 最新 > Python最新模擬登錄知乎

Python最新模擬登錄知乎

大家都知道知乎是比較專業的知識問答平台。裡面不僅具有專業的問答,還有社交屬性,吸引了一大部分人使用Python來爬取答案,社交關係等。今天我們來進行爬蟲操作的第一步:模擬登陸


分析Post數據

首先打開知乎登陸頁,打開谷歌瀏覽器開發者工具,選擇Network頁,勾選Presev log,點擊登陸。

我們可以在很容易的看到登陸介面如下:

模擬登陸最終是要構建請求頭和提交參數,即:構造POST Headers和FormData

我們可以看到 Request Headers 信息,對比Request Headers和Response Headers,有幾個參數比較關鍵authorization 和 X-Xsrftoken ,這兩個是必須欄位,其中 authorization 為驗證身份,為固定值,可直接複製.

X-Xsrftoken,則是防止Xsrf跨域的Token認證,可以在Response Set-Cookie中找到.

所以需要請求一次登錄頁面,然後將這幾個欄位用正則表達式匹配出來。


我們可以在控制台中看到,form提交了很多信息,中間的------WebXXXX---------起到分割作用,可以忽略。

timestamp 為時間戳,可以使用 timestamp = str(int(time.time()*1000))生成

signature 通過 Crtl+Alt+F 搜索找到是在一個 JS 里生成的,是通過 Hmac 演算法對幾個固定值和時間戳進行加密,那麼只需要在 Python 里也模擬一次這個加密即可。

captcha驗證碼,是通過 GET 請求單獨的 API 介面返回是否需要驗證碼(每次登陸必須請求一次),如果是 True 則需要再次 PUT 請求獲取圖片的 base64 編碼。

實際上有兩個 API,一個是識別倒立漢字,一個是常見的英文驗證碼,任選其一即可,代碼中我將兩個都實現了,漢字是通過 plt 點擊坐標,然後轉為 JSON 格式。(另外,這裡其實可以通過重新請求登錄頁面避開驗證碼,如果你需要自動登錄的話可以改造試試) 最後還有一點要注意,如果有驗證碼,需要將驗證碼的參數先 POST 到驗證碼 API,再隨其他參數一起 POST 到登錄 API。


最後實現一個檢查登錄狀態的方法,如果訪問登錄頁面出現跳轉,說明已經登錄成功,這時將 Cookies 保存起來(這裡 session.cookies 初始化為 LWPCookieJar 對象,所以有 save 方法),這樣下次登錄可以直接讀取 Cookies 文件。


Python 2/3requestsmatplotlibPillow



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

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


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

Python轉行新手們,不要盲目入坑!需要先了解什麼你知道嗎?
Python各種學習資料和精品免費課程隨便領

TAG:Python |