Python爬蟲實戰五之模擬登錄淘寶並獲取所有訂單

Python爬蟲實戰五之模擬登錄淘寶並獲取所有訂單

經過多次嘗試,模擬登錄淘寶終於成功了,實在是不容易,淘寶的登錄加密和驗證太複雜了,煞費苦心,在此寫出來和大家一起分享,希望大家支持。

溫馨提示

更新時間,2016-02-01,現在淘寶換成了滑塊驗證了,比較難解決這個問題,以下的代碼沒法用了,僅作學習參考研究之用吧。

本篇內容

1. python模擬登錄淘寶網頁

2. 獲取登錄用戶的所有訂單詳情

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

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

探索部分成果

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

2. 淘寶在登錄時必須要輸入驗證碼,在經過幾次嘗試失敗後最終獲取了驗證碼圖片讓用戶手動輸入來驗證。

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

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

整體思路梳理

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

最終代碼如下

好啦,運行結果就是上面貼的圖片,可以成功獲取到自己的商品列表,前提是把你們的 用戶名,ua,password2這三個設置好。

以上均爲博主親身所敲,代碼寫的不好,謹在此貼出和大家一起分享經驗~

小夥伴們試一下吧,希望對大家有幫助~

轉載請註明:靜覓 » Python爬蟲實戰五之模擬登錄淘寶並獲取所有訂單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章