1. 程式人生 > >python-知乎模擬登入

python-知乎模擬登入

這裡寫圖片描述

本篇文章用於記錄如何實現知乎模擬登入

本篇採用firefox瀏覽器,按F12開發者工具來進行HTTP互動的獲取和分析。需要設定開發者工具中的preserve log選項,否則會因為HTTP互動過多,無法參考中間過程的HTTP請求和迴應

該登入是通過post方式實現,所以我們需要檢視並分析postdata。
這裡寫圖片描述

需要特別提到的是_xsrf,它是頁面校驗碼,用來檢查你是否是從正常的登入頁面過來的,從而防止跨站點請求偽造。這個引數是動態變化的,所以不能獲取一次後就一勞永逸,通過html中使用正則表示式匹配出來.
這裡寫圖片描述

如果只是把以上資料post過去不一定會成功,因為很有可能需要驗證碼。關於驗證碼的網頁地址,在頁面的html中可以看到,但通過程式讀取的內容中確搜不到。通過在

https://www.zhihu.com/question/29925879的最高票的答案,可以知道驗證碼的網址由時間戳組成。

t = str(int(time.time()*1000))
    captcha_url = 'http://zhihu.com/captcha.gif?r='+t+"&type=login"

關於驗證碼的識別,在本文章中使用手動輸入進行識別。以後會嘗試自動進行圖片驗證碼的識別,傳統的機器學習演算法可能有一定困難,但通過卷積神經網路等深度學習演算法可以擁有不俗的識別率,在之後的進階版中將會整合卷積神經網路。

在進行模擬登入前,需要記錄該網站的Cookie。Cookie就是儲存在使用者端的經過加密的資料,從而實現Session跟蹤。某些網站通過Cookie來識別使用者身份,某些網頁需要登入後才能訪問,通過載入Cookie後就可以進行訪問並爬取。關於session和cookie的詳解可以參考這篇文章

http://blog.csdn.net/fangaoxin/article/details/6952954/

可以先通過訪問https://www.zhihu.com/settings/profile 來判斷是否登入,如果沒有登入,知乎會將你的訪問進行重定向,所以返回的HTTP狀態碼就是301或302。

如果登入成功,返回的結果:
這裡寫圖片描述
如果登入失敗,返回的結果:
這裡寫圖片描述