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

使用Python模擬登錄知乎

點擊"萬和IT教育"關注我們

最近突然對爬蟲興趣倍增,主要是自己想從網上爬點數據來玩玩。前陣子從某房屋出售網爬取了長沙地區的房價以及2016年的成交額,只有幾千條數據,量較少,沒勁o(╯╰)o,因此將目標成功地轉移到了社交網上,難度顯然大了點。爬取社交網站比較鮮明的特點就是需要登錄,否則很多東西都無法獲取。做了幾個小Demo之後發現,人人網的登錄還比較簡單,驗證碼的都不用就可以成功登錄;知乎雖然攜帶驗證碼,但難度算是適中;微博的登錄難度稍微大點,因為不僅有驗證碼,還在傳遞參數的時候對用戶名進行了base64加密。在這篇博文里,主要是以知乎為例,模擬知乎登錄,至於數據爬取部分咱們就暫且不談吧。

>>>>

環境與開發工具

模擬知乎登錄前,先看看本次案例使用的環境及其工具:

Windows 7 + Python 2.75

Chrome + Fiddler: 用來監控客戶端與伺服器的通訊情況,以及查找相關參數的位置。

Github源碼下載:https://github.com/csuldw/WSpider.

>>>>

模擬過程概述

使用Google瀏覽器結合Fiddler來監控客戶端與服務端的通訊過程;

根據監控結果,構造請求伺服器過程中傳遞的參數;

使用Python模擬參數傳遞過程。

客戶端與服務端通信過程的幾個關鍵點:

登錄時的url地址。

登錄時提交的參數【params】,獲取方式主要有兩種:第一、分析頁面源代碼,找到表單標籤及屬性。適應比較簡單的頁面。第二、使用抓包工具,查看提交的url和參數,通常使用的是Chrome的開發者工具中的Network, Fiddler等。

登錄後跳轉的url。

在抓包的時候,開始使用的是Chrome開發工具中的Network,結果沒有抓到,後來使用Fiddler成功抓取數據。下面逐步來細化上述過程。

>>>>

參數探索

首先看看這個登錄頁面(https//www.zhihu.com),也就是我們登錄時的url地址。

看到這個頁面,我們也可以大概猜測下請求伺服器時傳遞了幾個欄位,很明顯有:用戶名、密碼、驗證碼以及「記住我」這幾個值。那麼實際上有哪些呢?下面來分分析下。

首先查看一下HTML源碼,Google里可以使用CTRL+U查看,然後使用CTRL+F輸入input看看有哪些欄位值,詳情如下:

(點擊看大圖)

通過源碼,我們可以看到,在請求伺服器的過程中還攜帶了一個隱藏欄位」_xsrf」。那麼現在的問題是:這些參數在傳遞時是以什麼名字傳遞的呢?這就需要借用其他工具抓包進行分析了。筆者是Windows系統,這裡使用的是Fiddler(當然,你也可以使用其他的)。

抓包過程比較繁瑣,因為抓到的東西比較多,很難快速的找到需要的信息。關於fiddler,很容易使用,有過不會,可以去百度搜一下。為了防止其他信息干擾,我們先將fiddler中的記錄清除,然後輸入用戶名(筆者使用的是郵箱登錄)、密碼等信息登錄,相應的在fiddler中會有如下結果:

(點擊看大圖)

備註:如果是使用手機登錄,則對應fiddler中的url是「/login/phone_num」。

為了查看詳細的請求參數,我們左鍵單機「/login/email」,可以看到下列信息:

(點擊看大圖)

請求方式為POST,請求的url為https://www.zhihu.com/login/email。而從From Data可以看出,相應的欄位名稱如下:

_xsrf

captcha

email

password

remember

對於這五個欄位,代碼中email、password以及captcha都是手動輸入的,remember初始化為true。剩下的_xsrf則可以根據登錄頁面的源文件,取input為_xsrf的value值即可。

(點擊看大圖)

對於驗證碼,則需要通過額外的請求,該鏈接可以通過定點查看源碼看出:

(點擊看大圖)

鏈接為https://www.zhihu.com/captcha.gif?type=login,這裡省略了ts(經測試,可省略掉)。現在,可以使用代碼進行模擬登錄。

溫馨提示:如果使用的是手機號碼進行登錄,則請求的url為https://www.zhihu.com/login/phone_num,同時email欄位名稱將變成「phone_num」。

>>>>

模擬源碼

在編寫代碼實現知乎登錄的過程中,筆者將一些功能封裝成了一個簡單的類WSpider,以便復用,文件名稱為WSpider.py。

(點擊看大圖)

關於模擬登錄知乎的源碼,保存在zhiHuLogin.py文件,內容如下:

(點擊看大圖)

關於源碼的分析,可以參考代碼中的註解。

>>>>

運行結果

在控制台中運行python zhiHuLogin.py,然後按提示輸入相應的內容,最後可得到以下不同的結果(舉了三個實例):

結果一:密碼錯誤

結果二:驗證碼錯誤

結果三:成功登錄

通過代碼,可以成功的登錄到知乎,接著如果要爬取知乎裡面的內容,就比較方便了。

小夥伴們可以在《@愛學習的你:2018年第一份開班計劃已出,萬和喊你來學習啦!》中看到,本月25號是python+人工智慧脫產班開班的日子啦!將Python與目前大熱的人工智慧聯合起來,如此緊跟時代潮流的課程你可一定不能錯過啦

本文素材來自網路,版權屬於原作者

鏈接地址:http://www.csuldw.com/2016/11/05/2016-11-05-simulate-zhihu-login/

GIF

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

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


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

TAG:Python |