最近想爬取淘寶的一些商品,可是發現若是要使用搜索等一些功能時基本都須要登陸,因此就想出一篇模擬登陸淘寶的文章! 瀏覽器
講模擬登陸淘寶以前,咱們來回顧一下以前用requests庫模擬登陸豆瓣和新浪微博的過程:這一類模擬登陸是比較簡單的登陸,只須要在請求登陸時將用戶名和密碼上傳驗證經過就成功了,也就是說一步到位!微信
而淘寶登陸就比較複雜,爲何說複雜呢?由於淘寶登陸涉及參數多且請求不止一次!咱們就先來說講淘寶登陸的流程,先把流程原理搞懂,再去敲代碼,這樣你們就容易理解!cookie
爲了便於你們理解,豬哥畫了一個非標準的淘寶登陸請求時序圖 框架
淘寶ua參數:ua(User-Agent)故名用戶代理,淘寶的ua參數加入了瀏覽器、ip、電腦、時間等信息,而後加密生成,在不少地方使用,不只僅是登陸!scrapy
上圖是比較詳細的流程圖,從代碼層面考慮豬哥將模擬登陸淘寶分爲如下四個步驟:工具
這裏也許有同窗會提出疑問:爲何淘寶(taobao.com)驗證經過以後還要拿着 token去阿里巴巴(alibaba.com)交換st碼呢? 這個咱們放後面講!post
上面咱們只講了大概的登陸流程,這裏豬哥會先詳細講解下每一步的操做,而後再貼出實現代碼!加密
目前咱們在登陸淘寶的時候,大多數狀況下是不會出現滑塊驗證碼,豬哥嘗試了不少次的登陸退出也只是在中間出現過一次,那到底是什麼在控制是否須要滑塊驗證碼的呢? .net
圖中咱們能夠看到此次post請求上傳了兩個參數:username、ua!設計
前面豬哥說過ua爲瀏覽器、ip、設備信息等多信息加密參數,因此豬哥猜測淘寶的驗證碼是否出現不只僅從帳號角度,還有ip、設備等角度!
舉個例子:某臺設備可能出現登陸過大量的帳號,這時候淘寶就能夠從ua參數中獲取設備號,而後對該設備進行限制!
知道了流程和請求連接及參數以後,咱們就能夠用代碼來請求了!
這裏一步也就是上面時序圖圖中的第5步:請求登陸,這裏會將用戶名、ua參數、加密密碼等30十幾個參數post到淘寶(taobao.com)去驗證。
上面咱們已經申請到了淘寶(taobao.com)的token,這一步就是用token來換取st碼。
到這裏不少人可能會有疑問:爲何淘寶登陸須要這麼麻煩呢?直接在 taobao.com 登陸不就能夠嗎?爲何要先在taobao驗證用戶名密碼,經過以後再去 alibaba.com 換取st碼登陸呢?
任何公司的框架都是慢慢演變的結果,我想最開始的淘寶登陸確定沒這麼複雜。可是隨着阿里巴巴的慢慢壯大,不少事業線都劃分開來,可是這些事業線之間又有關聯性,好比用戶登陸了淘寶帳號以後天貓就不須要再登陸了呢?(注意淘寶和天貓的頂級域名不一樣,因此不能共享cookis)爲了解決這個問題,單點登陸就出現了。
單點登陸(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。 ——百度百科
不少大企業幾乎都有作單點登陸,那阿里的單點登陸系統確定是由母公司阿里巴巴(alibaba.com)來作啦,全部子公司去調用母公司接口!
咱們再回來分析淘寶登陸爲什麼要如此複雜就很好理解了:用戶數據在淘寶這裏,因此須要如今淘寶(taobao.com)驗證用戶名和密碼,驗證經過生成一個token,瀏覽器拿着token去和阿里巴巴(alibaba.com)申請單點登陸碼(st碼),阿里巴巴收到請求驗證token經過則返回st碼,因此用token換st碼的緣由就在於單點登陸!
理解了設計原理以後,代碼實現起來就很清晰了!
成功獲取st碼以後咱們就能夠來登陸了,這一步是經過st碼獲取登陸的cookies。
其實上面咱們就已經登陸淘寶成功並返回用戶主頁的連接,咱們爲了進一步驗證登陸成功,就請求一下淘寶用戶主頁,順便把淘寶暱稱提取出來吧!
總體講完以後咱們來稍微總結一下吧,主要從代碼結構和存在的問題兩個方面說下:
來放出一張代碼結構圖,讓你們直觀瞭解
在寫這篇教程以前豬哥也是先在網上了解,而後本身用瀏覽器和抓包工具(Charles)一步一步實踐,最重要的是你先要了解淘寶登陸的大概流程,否則你實際操做起來會一頭霧水,下面就要講講目前遇到的問題和存在的問題吧
看到這裏是否是感受淘寶模擬登陸就清晰明瞭不少了,感興趣的同窗能夠收藏轉發,週末有空本身嘗試一下。征服淘寶登陸,其餘登陸也就相對簡單了!
源碼地址:關注微信公衆號「裸睡的豬」,回覆:模擬登陸淘寶