賣場上的價格每天在變。很多老闆或小編的固定工作,是每天打開幾個競品頁面,看價格有沒有調,再抄進表格裡。商品一多、通路一多,這件事每天要花掉不少時間,而且常常因為忙就跳過,等發現時對手已經降價一週了。
Google 試算表有一個內建函式 IMPORTXML,可以直接抓網頁上的資料。這篇教你用它做一張會自己更新的價格表,再加一小段程式,每天自動留下紀錄。
先講結論:IMPORTXML 適合抓一般的網頁,但很多大型購物平台用它抓不到。哪些抓得到、哪些抓不到,文章後半段會說明。
步驟一:找到價格在網頁上的位置
IMPORTXML 需要兩樣東西:網址,和價格在網頁裡的「位置」(XPath)。找位置的方法:
- 用 Chrome 打開競品的商品頁。
- 在價格上按右鍵,選「檢查」。右邊會打開開發者工具,價格那一行程式碼會被反白。
- 在反白那一行按右鍵,選「Copy」→「Copy XPath」。
複製下來會是一串像 //*[@id="price"]/span 的文字,這就是價格的位置。
步驟二:用 IMPORTXML 抓價格
開一個 Google 試算表,第一個分頁命名為「價格」,排成這樣:
| A:商品 | B:競品網址 | C:抓到的價格 | D:我的價格 | E:價差 |
|---|
在 C2 輸入:
=IMPORTXML(B2, "//*[@id='price']/span")
把第二段換成你在步驟一複製的 XPath。注意:XPath 裡如果有雙引號,要改成單引號,不然公式會出錯。
先確認抓得到東西。抓下來的價格常常帶著「NT$」或逗號,沒辦法直接計算,所以確認可以之後,把 C2 改成這個版本,直接轉成純數字:
=VALUE(REGEXREPLACE(TO_TEXT(INDEX(IMPORTXML(B2, "//*[@id='price']/span"), 1)), "[^0-9.]", ""))
INDEX 是用來只取第一個結果,避免同一個位置抓到好幾個數字。
步驟三:算價差,超過就標色
在 E2 輸入 =D2-C2,算出你比對手貴多少,再往下拉到每個商品。
選取 E 欄,設定條件式格式,選「大於」,填一個你在意的金額,例如 50,設定紅底。之後只要哪個商品比對手貴超過 50 元,打開表就看得到。
步驟四:每天自動存一筆紀錄
IMPORTXML 只會顯示「現在」的價格,看不到昨天是多少。要追蹤價格變化,需要每天把價格複製一份存起來。
新增一個分頁叫「紀錄」,然後點「擴充功能」→「Apps Script」,貼上:
function snapshot() {
const ss = SpreadsheetApp.getActive();
const src = ss.getSheetByName('價格');
const log = ss.getSheetByName('紀錄');
const last = src.getLastRow();
if (last < 2) return;
const rows = src.getRange(2, 1, last - 1, 3).getValues();
const now = new Date();
rows.forEach(r => log.appendRow([now, r[0], r[2]]));
}
儲存後,在左側「觸發條件」新增一個:函式選 snapshot,活動來源選「時間驅動」,類型選「日計時器」,挑一個時段。之後每天會自動在「紀錄」分頁留下每個商品當天的價格,想看趨勢時拉一張折線圖就好。
IMPORTXML 抓不到的情況
這是最多人做不出來的地方,先講清楚:
- 用 JavaScript 載入價格的網頁抓不到。 IMPORTXML 只讀網頁原始的 HTML,不會執行 JavaScript。很多大型購物平台和網路商店的價格是頁面打開後才載入的,這類網頁會回傳空白或錯誤。
- 網站改版,XPath 就失效。 對手的網頁一改版,價格的位置跟著變,公式就抓不到了,需要重新找一次。
- 有更新頻率和數量的限制。 依 Google 官方說明,這類函式在試算表開著時大約每小時檢查一次;同時用太多 IMPORTXML,會出現「載入資料可能需要一些時間」的錯誤,要減少函式數量。
- 部分網站會擋這類請求。 有些網站會判斷不是一般瀏覽器在看,直接拒絕。
另外,抓資料時只抓公開可見的價格,頻率也不要太高,避免造成對方網站負擔,也要留意對方網站的使用條款。
什麼時候該改用爬蟲
如果你的情況是這樣,IMPORTXML 大概不夠用:
- 要追蹤的競品在大型購物平台上,IMPORTXML 抓不到。
- 商品數量多,一張表放了幾十、上百個函式,常常跑不出來。
- 要同時比好幾個通路的價格。
- 希望價差超過時直接通知到 LINE 或 Email,不用自己打開表看。
這時候需要的是爬蟲:用程式模擬瀏覽器打開頁面,等價格載入後再抓,每天固定時間跑,整理好寫進表格,價差超標就通知。
我們做過一個實體零售的案子,數十項商品、多個通路的售價每天自動抓取,價差超過設定值就通知。原本是每週人工整理一次,導入之後變成每天更新。
如果你已經用 IMPORTXML 試過、發現抓不到,或是商品太多管不過來,可以先預約 30 分鐘免費診斷。我們會看你要追蹤哪些網站,先判斷技術上抓不抓得到,再談要不要做。
常見問題
Q:IMPORTXML 顯示「匯入的內容空白」是什麼意思?
通常代表 XPath 對應不到東西。最常見的原因是那個網頁的價格是用 JavaScript 載入的,IMPORTXML 讀不到;其次是 XPath 複製錯,或網站已經改版。
Q:抓競品價格會不會有法律問題?
只抓公開可見的價格,一般風險比較低,但還是要看對方網站的使用條款,也不要用過高的頻率造成對方網站負擔。需要登入才看得到的資料、個人資料,都不應該抓。如果是商業上大量使用,建議先問過法律顧問。
Q:一定要寫程式嗎?
只要即時價格的話,步驟一到三只用公式,不用寫程式。要每天自動留紀錄,才需要步驟四那一小段程式,複製貼上即可。