并不是所有的網(wǎng)站都能夠敞開心扉讓你看個透徹,它們總要給你出些難題讓你覺得有些東西是來之不易的,往往,這也更加激發(fā)你的激情和斗志!
從《為了媳婦的一張?zhí)?,我與百度醫(yī)生杠上了》里就有網(wǎng)友提出可以通過獲取cookie的方式來登錄,不需要借助selenium這樣的模擬瀏覽器操作了,到后來在公眾號里一號友說豆瓣如何實現(xiàn)登錄,以及近期園友都有提到想獲取更多的網(wǎng)站數(shù)據(jù)是需要登錄的……登錄,一直是爬蟲界躲不了也繞不開的話題。
之前已經(jīng)試過通過啟動瀏覽器,模擬人工操作填寫用戶名和密碼并點擊登錄來完成登錄。 這次準備由臺前模式切換到幕后,研究下不用啟動瀏覽器如何實現(xiàn)使用后臺代碼就模擬登錄豆瓣電影君。
我們登錄網(wǎng)站時發(fā)生了什么
類似這樣的登錄界面(movie.douban.com),我們只要填寫用戶名和密碼,樂意的話選中“下次自動登錄”,然后點擊登錄按鈕,不出意外(如果你總是調(diào)戲人家,屢次輸入錯誤,人家不會用小錘錘捶你胸,但是搞個驗證碼也夠你喝一壺的了),你就登錄成功了。
看著還是比較簡單,但是在瀏覽器后面,實際上已經(jīng)做了不少事兒~~~
如果是Chrome瀏覽器,可以按F12,切到Network選項,在點擊頁面中的登錄后,你可以看到唰唰唰的請求,好比這樣
其中最關鍵的發(fā)生在第一條,即通過發(fā)送HTTP Post請求與服務器交互,請求登錄,在這條請求中你可以看到很熟悉的內(nèi)容
沒錯,你在登錄網(wǎng)站的時候,實際上是與服務器做了一次通訊,驗證成功后,服務器才讓你登錄網(wǎng)站。
模擬登錄
如果網(wǎng)站像上面這樣的情況,其實很好登錄,比如在postman中填寫這些對應的參數(shù)就能夠成功登錄,但是有情操的網(wǎng)站都會有驗證碼,一般會出現(xiàn)在多次登錄失敗或者登錄網(wǎng)站過于頻繁就會出現(xiàn)驗證碼,好比這樣
則對應的post請求如下
這時候我們使用postman實施登錄,結果似乎不盡如人意,之所以產(chǎn)生這樣的效果時因為這個captcha-id在每次請求的時候都會重新生成,感覺是和驗證碼綁定的,所以即使你在請求參數(shù)中帶上了captcha-id也無濟于事,因為這次的cookie已經(jīng)不能使用上次的cookie,直白說就是這次我們又有了一個新的驗證碼,但是使用的captcha-solution卻是上一次的(一張舊船票如何登上進入的新船)。
解決思路
舊船票登不上船是因為日期不對,就是這里的captcha-solution和captcha-id不匹配,所以需要
預先請求獲得驗證碼圖片對應的captcha-id
下載這張驗證碼的圖片到本地,識別驗證碼的內(nèi)容即captcha-solution
<