追劇比追爬蟲強(qiáng)
最近想爬淘寶的一些產(chǎn)品,但是發(fā)現(xiàn)如果要用搜索等一些功能的話,基本都需要登錄,于是想出了一篇模擬登錄淘寶的文章!
在淘寶上看了很多關(guān)于模擬登錄的內(nèi)容,基本上都是用scrapy,pyppeteer,selenium等庫來模擬登錄,但是目前還沒有講過這些庫,只講了requests庫,所以今天就用requests庫來模擬淘寶上的登錄!
在說模擬登錄淘寶之前,我們先回顧一下之前使用和的過程:這種模擬登錄是比較簡單的登錄,只有在請求登錄時上傳并驗證用戶名和密碼,也就是說一步一個腳印,才算成功!
淘寶登錄比較復(fù)雜。為什么很復(fù)雜?因為淘寶登錄不止一次涉及很多參數(shù)和請求!先說淘寶登錄流程,先了解流程原理,再打代碼,讓大家輕松理解!
一、淘寶登錄流程
為了方便大家理解,豬哥畫了一個非標(biāo)準(zhǔn)的淘寶登錄請求時序圖
淘寶ua參數(shù):ua(User-Agent)命名為用戶代理。在淘寶ua參數(shù)中加入瀏覽器、ip、電腦、時間等信息,加密生成。很多地方都在用,不只是登錄!
上圖是詳細(xì)的流程圖。從代碼層面考慮,豬哥將模擬登錄淘寶分為以下四個步驟:
輸入用戶名后,瀏覽器會向淘寶(taobao.com)發(fā)送帖子請求,判斷是否有滑塊驗證!
用戶輸入密碼后,瀏覽器向淘寶(taobao.com)發(fā)送一個post請求,以驗證用戶名和密碼是否正確,如果是,則返回一個令牌。
瀏覽器帶令牌到阿里巴巴(Alibaba.com)交換st代碼!
瀏覽器獲取st代碼后,獲取帶有st代碼的cookies并成功登錄
這里可能會有同學(xué)問這個問題:淘寶(taobao.com)為什么要去阿里巴巴(Alibaba.com)驗證通過后用令牌交換st碼?這個我們以后再說!
二、模擬登錄實現(xiàn)
以上,我們只講了一般的登錄流程。這里豬哥詳細(xì)講解每一步的操作,然后貼實現(xiàn)代碼!
1.確定您是否需要驗證碼
目前我們登錄淘寶,大多數(shù)情況下是不會出現(xiàn)滑塊驗證碼的。豬哥多次嘗試登錄退出,中間只出現(xiàn)過一次。那么是什么控制著是否需要滑塊驗證碼呢?
從上圖可以看出,豬哥輸入用戶名時,瀏覽器會發(fā)起post請求,驗證是否需要滑塊驗證碼。如果返回true,將出現(xiàn)滑塊驗證碼!否則不會出現(xiàn),一般不會出現(xiàn)!
在圖中,我們可以看到這個post請求上傳了兩個參數(shù):username和ua!
豬哥說ua是瀏覽器、ip、設(shè)備信息等多信息加密參數(shù)。,所以豬哥猜測淘寶的驗證碼是否出現(xiàn)不僅是從賬號的角度,也是從ip、設(shè)備等角度。
比如某個設(shè)備可能登錄了大量賬號,淘寶可以從ua參數(shù)中獲取設(shè)備號,然后對設(shè)備進(jìn)行限制!
知道流程和請求鏈接和參數(shù)后,就可以用代碼來請求了!
2.驗證用戶名和密碼
這一步也是上述時間序列的第五步圖圖:請求登錄,其中用戶名、ua參數(shù)、加密密碼等30多個參數(shù)將會發(fā)布到淘寶(taobao.com)進(jìn)行驗證。
看請求結(jié)果!
你可以看到在應(yīng)用st代碼鏈接后面有一個令牌,我們后面會分析。
3.申請st代碼
以上,我們已經(jīng)從淘寶(淘寶網(wǎng))申請了令牌。這一步是用令牌換st碼。
這里很多人可能會有疑問:為什么登陸淘寶這么麻煩?你不能在taobao.com直接登錄嗎?為什么要先在淘寶驗證用戶名和密碼,然后去Alibaba.com換st碼登錄?
任何公司的框架都是緩慢演變的結(jié)果。我猜最初的淘寶登錄肯定沒那么復(fù)雜。但是隨著阿里巴巴的發(fā)展,很多職業(yè)線都分了,但是這些職業(yè)線是有關(guān)聯(lián)的。比如天貓在用戶登錄淘寶賬號后不需要登錄(注意淘寶和天貓的頂級域名不同,不能共享cookis)。為了實現(xiàn)這個功能,出現(xiàn)了單點登錄。
單點登錄是企業(yè)業(yè)務(wù)集成的常用解決方案之一。單點登錄被定義為在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。-百度百科
很多大企業(yè)幾乎都是做單點登錄的,所以阿里的單點登錄系統(tǒng)必須由母公司阿里巴巴(阿里巴巴網(wǎng))來做,所有子公司都調(diào)用母公司接口!
很容易理解為什么淘寶登錄這么復(fù)雜:用戶數(shù)據(jù)在淘寶這里,所以淘寶(taobao.com)現(xiàn)在需要驗證用戶名和密碼。驗證后生成令牌,瀏覽器拿著令牌向阿里巴巴(alibaba.com)申請單點登錄碼(st code)。阿里巴巴收到驗證令牌通過的請求,返回st碼,所以用令牌更改st碼的原因是單點登錄!
了解了設(shè)計原理之后,代碼實現(xiàn)非常清晰!
4.使用st代碼登錄
成功獲取st代碼后,我們就可以登錄了。這一步是通過st代碼獲取用于登錄的cookies。
在這里,我們已經(jīng)模擬登錄淘寶成功!
5.獲得淘寶昵稱
其實我們已經(jīng)成功登錄淘寶,回到了用戶主頁的鏈接。為了進(jìn)一步驗證登錄成功,我們會請求淘寶用戶主頁,順便提取淘寶昵稱。
三.總結(jié)
整個故事講完后,我們再稍微總結(jié)一下,主要從代碼結(jié)構(gòu)和存在的問題兩個方面來說:
1.代碼結(jié)構(gòu)
發(fā)布一個代碼結(jié)構(gòu)圖,讓大家直觀的理解
以上是我們之前提到的模擬登錄淘寶的四個步驟,但是這里我們用代碼實現(xiàn)了!
2.有問題
在寫這篇教程之前,豬哥也是先在網(wǎng)上了解了一下,然后用他的瀏覽器和Charles一步一步的練習(xí)。最重要的是你首先要了解淘寶登錄的一般流程,否則實際操作的時候會很混亂。以下是目前存在的問題和存在的問題
首先,第一個問題是解鎖淘寶的滑塊。目前沒有破解請求的好辦法。我們會在介紹一些爬蟲框架后破解。
豬哥多次(50多次)嘗試登錄退出,都沒有滑塊驗證碼。
網(wǎng)上有人用代理ip,在這里對豬哥沒用。只要你不是超超頻繁的爬大量數(shù)據(jù),大部分大公司都不會因為意外傷害率和用戶范圍廣而封ip。也許一個字母就是整個社區(qū)。
第二步,驗證用戶名和密碼時,上傳了近30個參數(shù)。如果你復(fù)制用戶名、ua和加密密碼,驗證仍然失敗,你可以嘗試用你瀏覽器中的參數(shù)替換這30個參數(shù)!
偶爾,第3步和第4步會出現(xiàn)錯誤。再試一次!
有些關(guān)于淘寶登錄框架的文章純屬豬猜。如有錯誤,請指正!
你是不是覺得在這里看到淘寶模擬登錄就清楚多了?有興趣的同學(xué)可以收藏轉(zhuǎn)發(fā),周末有空試試(源碼在原閱讀中)。征服淘寶登錄,其他登錄會比較簡單!
1.《淘寶登陸 Python模擬登錄淘寶》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《淘寶登陸 Python模擬登錄淘寶》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/shehui/1077885.html