Python爬蟲實戰(5):模擬登陸淘寶並獲取全部訂單

通過屢次嘗試,模擬登陸淘寶終於成功了,實在是不容易,淘寶的登陸加密和驗證太複雜了,煞費苦心,在此寫出來和你們一塊兒分享,但願你們支持。css

本篇內容

1. python模擬登陸淘寶網頁html

2. 獲取登陸用戶的全部訂單詳情python

3. 學會應對出現驗證碼的狀況git

4. 體會一下複雜的模擬登陸機制github

探索部分紅果

1. 淘寶的密碼用了AES加密算法,最終將密碼轉化爲256位,在POST時,傳輸的是256位長度的密碼。web

2. 淘寶在登陸時必需要輸入驗證碼,在通過幾回嘗試失敗後最終獲取了驗證碼圖片讓用戶手動輸入來驗證。正則表達式

3. 淘寶另外有複雜且天天在變的 ua 加密算法,在程序中咱們須要提早獲取某一 ua 碼纔可進行模擬登陸。算法

4. 在獲取最後的登陸 st 碼時,歷經了屢次請求和正則表達式提取,且 st 碼只可以使用一次。windows

總體思路梳理

1. 手動到瀏覽器獲取 ua 碼以及 加密後的密碼,只獲取一次便可,一勞永逸。瀏覽器

2. 向登陸界面發送登陸請求,POST 一系列參數,包括 ua 碼以及密碼等等,得到響應,提取驗證碼圖像。

3. 用戶輸入手動驗證碼,從新加入驗證碼數據再次用 POST 方式發出請求,得到響應,提取 J_Htoken。

4. 利用 J_Htoken 向 alipay 發出請求,得到響應,提取 st 碼。

5. 利用 st 碼和用戶名,從新發出登陸請求,得到響應,提取重定向網址,存儲 cookie。

6. 利用 cookie 向其餘我的頁面如訂單頁面發出請求,得到響應,提取訂單詳情。

是否是沒看懂?沒事,下面我將一點點說明本身模擬登陸的過程,但願你們能夠理解。

前期準備

因爲淘寶的 ua 算法和 aes 密碼加密算法太複雜了,ua 算法在淘寶天天都是在變化的,不過,這個內容你獲取以後一直用便可,通過測試以後沒有問題,一勞永逸。

那麼 ua 和 aes 密碼怎樣獲取呢?

咱們就從瀏覽器裏面直接獲取吧,打開瀏覽器,找到淘寶的登陸界面,按 F12 或者瀏覽器右鍵審查元素。

在這裏我用的是火狐瀏覽器,首先記得在瀏覽器中設置一下顯示持續日誌,要否則頁面跳轉了你就看不到以前抓取的信息了。在這裏截圖以下:

20150225013600

 

好,那麼接下來咱們就從瀏覽器中獲取 ua 和 aes 密碼

點擊網絡選項卡,這時都是空的,什麼數據也沒有截取。這時你就在網頁上登陸一下試試吧,輸入用戶名啊,密碼啊,有必要時須要輸入驗證碼,點擊登陸。

QQ截圖20150225014124

等跳轉成功後,你就能夠看到好多日誌記錄了,點擊圖中的那一行 login.taobo.com,而後查看參數,你就會發現表單數據了,其中就包括 ua 還有下面的 password2,把這倆複製下來,咱們以後要用到的。這就是咱們須要的 ua 還有 aes 加密後的密碼。

QQ截圖20150225014019

恩,讀到這裏,你應該獲取到了屬於本身的 ua 和 password2 兩個內容。

輸入驗證碼並獲取J_HToken

通過博主本人親自驗證,有時候,在模擬登陸時你並不須要輸入驗證碼,它直接返回的結果就是前面所說的下一步用到的 J_Token,而有時候你則會須要輸入驗證碼,等你手動輸入驗證碼以後,從新請求登陸一次。

博主是邊寫程序邊更新文章的,如今寫完了是否有必要輸入驗證碼的檢驗以及在瀏覽器中呈現驗證碼。

代碼以下

恩,請把裏面的 ua 和 password2 還有用戶名換成本身的進行嘗試,用個人可能會產生錯誤的。

運行結果

QQ截圖20150225015508

而後會蹦出瀏覽器,顯示了驗證碼的內容,這個須要你來手動輸入。

在這裏有小夥伴向我反映有這麼個錯誤

QQ圖片20150227181617

通過查證,居然是版本問題,博主本人用的是 2.7.7,而小夥伴用的是 2.7.9。後來換成 2.7.7 就行了…,我也是醉了,但願有相同錯誤的小夥伴,能夠嘗試換一下版本…

好啦,運行時會彈出瀏覽器,如圖

QQ截圖20150225015717

那麼,咱們如今須要手動輸入驗證碼,從新向登陸界面發出登陸請求,以前的post數據內容加入驗證碼這一項,從新請求一次,若是請求成功,則會返回 下一步咱們須要的 J_HToken,若是驗證碼輸入錯誤,則會返回驗證碼輸入錯誤的選項。好,下面,我已經寫到了獲取J_HToken的進度,代碼以下,如今運行程序,會 蹦出瀏覽器,而後提示你輸入驗證碼,用戶手動輸入以後,則會返回一個頁面,咱們提取出 J_Htoken便可。

注意,到如今爲止,你尚未登陸成功,只是獲取到了J_HToken的值。

目前寫到的代碼以下

如今的運行結果是這樣的,咱們已經能夠獲得 J_HToken 了,離成功又邁進了一步。

QQ截圖20150225200329

好,到如今爲止,咱們應該能夠獲取到J_HToken的值啦。

利用J_HToken獲取st

st也是一個經計算獲得的code,能夠這麼理解,st是淘寶後臺利用J_HToken以及其餘數據通過計算以後獲得的,能夠利用st和用戶名直接 用get方式登陸,因此st能夠理解爲一個祕鑰。這個st值只會使用一次,若是第二次用get方式登陸則會失效。因此它是一次性使用的。

下面J_HToken計算st的方法以下

直接利用st登陸

獲得st以後,基本上就大功告成啦,一段辛苦終於沒有白費,你能夠直接構建get方式請求的URL,直接訪問這個URL即可以實現登陸。

好比

直接訪問該連接便可實現登陸,不過我這個應該已經失效了吧~

代碼在這先不貼了,剩下的一塊兒貼了~

獲取已買到的寶貝頁面

已買到的寶貝的頁面地址是

另外還有頁碼的參數。

從新構建一個帶有cookie的opener,將上面的帶有st的URL打開,保存它的cookie,而後再利用這個opener打開已買到的寶貝的頁面,你就會獲得已買到的寶貝頁面詳情了。

正則表達式提取信息

這是個人已買到的寶貝界面,審查元素能夠看到,每個寶貝都是tbody標籤包圍着。

QQ截圖20150225223302咱們如今想獲取訂單時間,訂單號,賣家店鋪名稱,寶貝名稱,原價,購買數量,最後付款多少,交易狀態這幾個量,具體就再也不分析啦,正則表達式還不熟悉的同窗請參考前面所說的正則表達式的用法,在這裏,正則表達式匹配的代碼是

最終代碼整理

恩,你懂得,最重要的東西來了,通過博主2天多的奮戰,代碼基本就構建完成。寫了兩個類,其中提取頁面信息的方法我單獨放到了一個類中,叫 tool.py,類名爲 Tool。

先看一下運行結果吧~

QQ截圖20150225234414

最終代碼以下

相關文章
相關標籤/搜索