天天看點

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

點選上方[Python與人工智能社群]→右上角[...]→[設為星标⭐]

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

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

溫馨提示

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

本篇内容

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 或者浏覽器右鍵審查元素。

在這裡我用的是火狐浏覽器,首先記得在浏覽器中設定一下顯示持續日志,要不然頁面跳轉了你就看不到之前抓取的資訊了。在這裡截圖如下:

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

好,那麼接下來我們就從浏覽器中擷取 ua 和 aes 密碼

點選網絡頁籤,這時都是空的,什麼資料也沒有截取。這時你就在網頁上登入一下試試吧,輸入使用者名啊,密碼啊,有必要時需要輸入驗證碼,點選登入。

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

等跳轉成功後,你就可以看到好多日志記錄了,點選圖中的那一行 login.taobo.com,然後檢視參數,你就會發現表單資料了,其中就包括 ua 還有下面的 password2,把這倆複制下來,我們之後要用到的。這就是我們需要的 ua 還有 aes 加密後的密碼。

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

恩,讀到這裡,你應該擷取到了屬于自己的 ua 和 password2 兩個内容。

輸入驗證碼并擷取J_HToken

經過部落客本人親自驗證,有時候,在模拟登入時你并不需要輸入驗證碼,它直接傳回的結果就是前面所說的下一步用到的 J_Token,而有時候你則會需要輸入驗證碼,等你手動輸入驗證碼之後,重新請求登入一次。

部落客是邊寫程式邊更新文章的,現在寫完了是否有必要輸入驗證碼的檢驗以及在浏覽器中呈現驗證碼。

代碼如下

'CQC'
           

恩,請把裡面的 ua 和 password2 還有使用者名換成自己的進行嘗試,用我的可能會産生錯誤的。

運作結果

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

然後會蹦出浏覽器,顯示了驗證碼的内容,這個需要你來手動輸入。

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

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

經過查證,竟然是版本問題,部落客本人用的是 2.7.7,而小夥伴用的是 2.7.9。後來換成 2.7.7 就好了…,我也是醉了,希望有相同錯誤的小夥伴,可以嘗試換一下版本…

好啦,運作時會彈出浏覽器,如圖

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

那麼,我們現在需要手動輸入驗證碼,重新向登入界面發出登入請求,之前的post資料内容加入驗證碼這一項,重新請求一次,如果請求成功,則會傳回下一步我們需要的 J_HToken,如果驗證碼輸入錯誤,則會傳回驗證碼輸入錯誤的選項。好,下面,我已經寫到了擷取J_HToken的進度,代碼如下,現在運作程式,會蹦出浏覽器,然後提示你輸入驗證碼,使用者手動輸入之後,則會傳回一個頁面,我們提取出 J_Htoken即可。

注意,到現在為止,你還沒有登入成功,隻是擷取到了J_HToken的值。

目前寫到的代碼如下

現在的運作結果是這樣的,我們已經可以得到 J_HToken 了,離成功又邁進了一步。

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

好,到現在為止,我們應該可以擷取到J_HToken的值啦。

利用J_HToken擷取st

st也是一個經計算得到的code,可以這麼了解,st是淘寶背景利用J_HToken以及其他資料經過計算之後得到的,可以利用st和使用者名直接用get方式登入,是以st可以了解為一個秘鑰。這個st值隻會使用一次,如果第二次用get方式登入則會失效。是以它是一次性使用的。

下面J_HToken計算st的方法如下

#通過token獲得st
           

 直接利用st登入

得到st之後,基本上就大功告成啦,一段辛苦終于沒有白費,你可以直接建構get方式請求的URL,直接通路這個URL便可以實作登入。

'https://login.taobao.com/member/vst.htm?st=%s&TPL_username=%s' % (st,username)
           

比如

https:
           

另外還有頁碼的參數。

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

#獲得已買到的寶貝頁面
           

正規表達式提取資訊

這是我的已買到的寶貝界面,審查元素可以看到,每一個寶貝都是tbody标簽包圍着。

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

我們現在想擷取訂單時間,訂單号,賣家店鋪名稱,寶貝名稱,原價,購買數量,最後付款多少,交易狀态這幾個量,具體就不再分析啦,正規表達式還不熟悉的同學請參考前面所說的正規表達式的用法,在這裡,正規表達式比對的代碼是

#u'\u8ba2\u5355\u53f7'是訂單号的編碼
           

最終運作結果

看一下運作結果吧~

python fastapi 擷取所有header資訊_Python爬蟲實戰五之模拟登入淘寶并擷取所有訂單...

好啦,運作結果就是上面貼的圖檔,可以成功擷取到自己的商品清單,前提是把你們的 使用者名,ua,password2這三個設定好。

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

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

崔慶才,Python社群專欄作者

部落格:https://zhuanlan.zhihu.com/pythoncoder

覺得本文對你有幫助?請分享給更多人

關注「Python爬蟲與人工智能社群」加星标,提升全棧技能

本公衆号會不定期給大家發福利,包括送書、學習資源等,敬請期待吧!

如果感覺推送内容不錯,不妨右下角點個在看轉發朋友圈或收藏,感謝支援。

好文章,我在看❤️