天天看點

python爬取淘寶商品資訊并加入購物車

先說一下最終要達到的效果:谷歌浏覽器登陸淘寶後,運作python項目,将任意任意淘寶商品的連結傳入,并手動選擇商品屬性,輸出其價格與剩餘庫存,然後選擇購買數,自動加入購物車。

在開始爬取淘寶連結之前,咱麼要先做一些準備工作,我項目中使用的是 python2.7 ,開發與運作環境都是win10,浏覽器是64位chrome 59.0.3。由于淘寶的模拟登陸涉及到一些複雜的ua碼算法以及滑塊登陸驗證,能力有限,為了圖省事就使用浏覽器手動登入淘寶然後python擷取生成的cookie的方式來爬取登入後的資料。

要擷取登入成功後的cookie,一種辦法是浏覽器打開開發者工具,手動複制cookie,但是這樣比較麻煩,因為淘寶裡面的請求很多不是同一個域,是以發送給伺服器的cookie也不一樣,如果換一個位址就手動複制一次也太low了,咱們為了有big一些,直接讀取chrome存儲在本地的cookie,然後拼出來。

網上查了一下,chrome的中的cookie以sqlite的方式存儲在 %localappdata%googlechromeuser datadefaultcookies 目錄下,cookie的value也經過了cryptunprotectdata加密。知道了這些,我們就可以往下走了。

這裡要用到sqlite3子產品:

def set_proxy():

本來是想使用多線程來驗證代理可用性,當有一個測試通過後想關閉其他線程,結束驗證請求,但是沒找到解決辦法,就暫時先用循環一個一個來驗證了,有其他思路想法的小夥伴可以在留言區指教。

接下來,我們需要擷取商品每個sku所對應的價格和庫存,先說一下我的分析過程,有更好的分析方法可以留言或私信交流。打開 chrome web developer tools ,輸入某個淘寶商品的位址,将工具切換到network标簽,然後在标簽内容中右鍵 - > save as har with content,将目前所有請求和響應的文本内容儲存到本地,用編輯器打開,然後通過關鍵字搜尋想要的東西然後分析猜測。

經過推測,淘寶中每個商品屬性有一個id儲存在data-value中,

python爬取淘寶商品資訊并加入購物車

通過不同的屬性值可以組合成不同的“sku_key”,然後通關頁面中的skumap來擷取該sku_key對應的sku資訊

python爬取淘寶商品資訊并加入購物車

這裡有三步比較關鍵

通過正則來擷取頁面中的skumap資料,然後轉化為python的字典對象;

對不同的屬性值進行排列組合,尋找是否有sku_key(通過itertools子產品的permutations函數實作)

将中文的屬性名和屬性值對應起來,以便于後續通過輸入屬性來擷取sku資料

def get_sale_info(sib_url):

ps:不久前才發現還有限購數量的限制,不過并不影響後續加入購物車的操作,就暫時先加入todo,以後再更新

最後通過終端輸入位址和屬性擷取商品資訊,看看能不能成功。

如果以上輸出沒毛病,就可以正式進入下一步了,加入購物車,試着自己在浏覽器上加入購物車,然後觀察請求,發現請求是通過cart.taobao.com/add_cart_item.htm這個位址發送的,分析了一下關鍵的發送參數:

item_id —— 商品id(頁面的g_config中)

outer_id —— skuid(skumap中)

outer_id_type —— outer_id類型,2表示outer_id傳遞的是skuid

quantity —— 需要加入購物車的數量

opp —— 單價

tb_token —— 可以從cookie中擷取

ct —— (g_config.vdata.viewer中)

deliverycitycode —— 發貨城市 (sib.htm中,暫時取預設或者不填)

nekot —— 目前時間戳

既然需要的東西都找到了,那就好辦了:

這裡需要注意http_code=200時不一定是加入成功,如果沒有登入也會傳回200,後續研究後會完善。