不會玩爬蟲寫代碼,小白是如何爬天貓店抓數據的

Photo of author
Written By CMO

爬天貓商舖?就這麼簡單
爬天貓商舖?就這麼簡單

在數據行銷中,有效、及時地掌握第一手數據往往是基本中的基本。在電子商務中更是這樣,了解競爭對手的動態可以讓你更好地對自身產品、定價和表現形式進行優化。本篇我們將直奔主題提供一種簡單的抓取天貓店數據的方法。

這或許是最簡單的爬蟲方法
這或許是最簡單的爬蟲方法

準備工作

我們將用到的是谷歌Chrome瀏覽器的桌面版,還有Chrome的瀏覽器插件Web Scraper。該插件可以在webscraper.io下載到,完全免費

安裝完Web Scraper可以在Chrome右上角找到圖標
安裝完Web Scraper可以在Chrome右上角找到圖標

我們假設在Windows平台上,按F12 。 Chrome開發者工具會彈出。我們在菜單中選擇最右邊的Web Scraper先放在一邊。至此準備工作已完成。

天貓店鋪鏈接

我們打開天貓店鋪總能看到全部商品分類的選項。我們選中後會帶我們去和下面URL相似的地址。

https://sony.tmall.com/category.htm? spm=a1z10.5-bs.w17695525-15102841353.2.1be86b1ednN0aS& search=y

上面URL中標紅的參數spm並沒有用,有用的是search還有未在上面出現的pageNo 。前者永遠為y,後者為頁數。那麼索尼官方旗艦店的第二頁商品列表的URL就是

https://sony.tmall.com/category.htm?search= y &pageNo= 2

而索尼官方旗艦店產品只有5頁。所以我們先把這個URL規律和總商品頁數記下來。

新建一個爬蟲項目

我們回到Web Scraper。點擊Create new sitemap 。依次填入Sitemap name: sony-tmall和Start URL: https://sony.tmall.com/category.htm?search=y&pageNo=2 。點擊Create Sitemap按鈕。

我們先嘗試抓取第二頁上的所有商品
我們先嘗試抓取第二頁上的所有商品

新建後我們會在有一個Add new selector藍色按鈕的界面。此處我們的位置為_root

這裡的selector的意思是CSS Selector即CSS選擇器。我們在之前文章中詳細介紹過。

建立選擇器圈定商品

CSS選擇器的作用是在HTML中定位。我們現在瀏覽器的地址欄中打開我們要爬的頁面。然後點擊剛才提到的藍色按鈕Add new selector

我們首先要選的是頁面元素,每個元素就是一個商品的長方形表示區域。在Id中填入item ,在Type中選擇Element後,我們點擊Selector中的Select按鈕。

鼠標慢慢移動,直到整個元素不多不少高亮
鼠標慢慢移動,直到整個元素不多不少高亮

當你的鼠標此時放到商品區域邊緣時,該區域會高亮,點擊後再按下面的藍色按鈕Done selecting!你會發現Data preview旁邊已經自動輸入了選擇器。

如果此時你跟著行銷長的節奏,你的選擇器看上去會是這個樣子:div.item5line1:nth-of-type(1) dl.item:nth-of-type(2)

啟用Element preview按鈕時,該塊區域會再次高亮,先關閉它。接下去我們點上Multiple這個選框,沒什麼變化,這是因為我們的選擇器只選擇了一件商品。因此我們要手動進行修改,去掉一些過濾條件把它簡化為div dl.item

當我們再次啟用Element preview時,就能看到所有商品區域都高亮了。

Checkpoint,看下是不是做對了
Checkpoint,看下是不是做對了

點擊藍色按鈕Save selector保存。我們的第一個選擇器就完成了。

抓取各商品的屬性

上面我們只是對一個個商品單元做了定位,它們相當於你的數據表中的每一行。接下來每一列就是我們要在商品單元中真正抓取的數據了。我們大概需要抓取商品名稱( title )、價格( price )、銷量( sale )、評價( comment )這些數據。於是我們點入剛剛我們新建的選擇器開始新建這些列。此時我們的位置在_root / item

上述4個數據元素的選擇器建立方法和我們上面的方法基本一致,為了節省篇幅我們只說一些區別。

  1. 類型(Type)不再選擇Element而是Text
  2. 由於每個單元中只有一個唯一數據源,因此不勾選Multiple。
  3. Parent Selectors記得選擇item不是_root
  4. 評論的選擇器中添加Regex: [0-9]+這是為了去掉“評價: ”而只保留純數字。

最後我們要建一個產品ID欄—— product_id 。選擇器為_parent_

注意Type和Attribute name
注意Type和Attribute name:data-id

保存完最後這個屬性後,我們可以看到界面中有這些選擇器,上面略過的所有選擇器都在下圖中列出,可直接使用:

這就是我們要抓取的每個商品的5個屬性
這就是我們要抓取的每個商品的5個屬性

點擊_root回到上一層,然後點擊藍色按鈕Data preview ,我們就可以預覽這個頁面上我們要抓取的內容。

檢視是否數據已被正確抓取識別
檢視是否數據已被正確抓取識別

是不是感覺漸入佳境了?你會發現有幾個商品的評論數為null,這是因為那些是頁面底部的促銷樣式,我們可以在導出後在Excel中過濾掉。現在先不用處理。

多頁面抓取和導出

你是否注意到我們只抓了第二頁?別急,我們現在就來補完。你應該注意到頁碼2/5了。沒錯一共有5頁。我們可以點擊菜單中的Edit metadata來更改Sitemap的設定。

更改抓取頁面範圍
更改抓取頁面範圍

我們只要將Start URL改為https://sony.tmall.com/category.htm?search=y&pageNo= [1-5]就可以連續抓5個頁面了,請放心食用。改完保存後就可以點選上圖菜單中的Scrape,然後開始一路抓取。這裡請注意,由於防爬蟲機制如果你未登錄天貓,那麼過不了多久馬爸爸會請你輸入驗證碼。因此建議你保持登錄狀態。 (至於登錄後是不是會封號,請後果自負……)

爬完了點擊refresh就可以看到抓取完的數據了。是不是滿意呢?再次點擊上圖菜單中的Export data as CSV即可導出數據到Excel進行後續的分析處理,這裡不再贅述。

導出後的數據長這樣,記得刪去評論為null的記錄
導出後的數據長這樣,記得刪去評論為null的記錄

最後,你可以點擊Export Sitemap導出你新建的項目,便於備份分享。

總結+完整代碼

我們的教程就到此為止了,天貓商舖、淘寶店、各種搜索結果都可以用這種方式來爬,只是選擇器不盡相同,讀者可以自己練習摸索。但是登錄後的搜索結果千人千面是否有參考價值也有待商榷。

最後我們分享一下本次使用的實例。你可以通過Import Sitemap直接使用。但是HubSpot One還是建議你對不同的天貓店進行更改,因為店的域名是不同的。

{"_id":"sony-tmall","startUrl":["https://sony.tmall.com/category.htm?search=y&pageNo=[1-5]"],"selectors":[{"id":"item","type":"SelectorElement","selector":"div dl.item","parentSelectors":["_root"],"multiple":true,"delay":0},{"id":"title","type":"SelectorText","selector":"a.item-name","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"price","type":"SelectorText","selector":"span.c-price","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"sale","type":"SelectorText","selector":"span.sale-num","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"comment","type":"SelectorText","selector":"h4 span","parentSelectors":["item"],"multiple":false,"regex":"[0-9]+","delay":0},{"id":"product_id","type":"SelectorElementAttribute","selector":"_parent_","parentSelectors":["item"],"multiple":false,"extractAttribute":"data-id","delay":0}]}