如何取得商品的市場訂價?實作懶人爬蟲,不會寫 code 也能行!
作為一個平台商業模式,某些情境下,商品價格會是驅動使用者下單的重大要素。
舉例來說,同一間旅館房間的價格,若不同 OTA (Online Travel Agency e.g. Agoda, Booking.com, Expedia, etc. ) 價格有落差,無論是使用比價網站,或是精明地在不同訂房平台比價,使用者都會傾向在最便宜的平台下訂(哪有買貴的道理!)。
所以對平台方來說,搜集同樣商品的訂價資訊、盡可能減低與其他平台價格落差,就成了重要之務。
優化訂價競爭力的目標與策略
通常 developer resource 非常有限且緊繃,PM 就得想辦法用無痛懶人的方式,取得上述資料。一方面是能夠簡單驗證專案與問題重要性,一方面是不需勞煩開發者,動用他們的資源以快速得到結果。
那時候設定目標是
1. 提供業務端「需進行重新訂價的旅宿清單」
2. 提供管理階層「現行線上旅宿與其他 OTA 的訂價狀況」
所以產出必須達成以下條件:
1. 能取得旅宿的訂房服務提供者、物件名稱、與其對應價格
2. 上述 task 可以自動化定期產出,減少人工作業成本
綜上所述,符合簡單快速原則解法是:
其實只要把比價網站的資料爬過來就好了嘛!
懶人爬蟲的實作
以 Google Spreadsheet 函式,取得網頁資料
剛好平常沒事會去玩 Google Spreadsheet 的函式,知道 importxml
能透過在函式中定義 xpath 路徑,把網頁的資料 load 到 Google 的試算表中。
執行作法這篇文章《無痛爬梳自己來,用 Google Spreadsheet 爬取網頁資料》講得非常清楚,這裡就按下不表。
這裡主要想分享,因為有些網頁參數都直接帶在網址裡面,所以可以透過 Google Spreadsheet 來實作帶特定參數網址的任務,相對應 importxml
輸出的資料也會對應變化(因為就等於不同網址了)。這在想要爬取特定日期入住區間的房價,是很有幫助的小方法。
大量批次執行 Google Spreadsheet 函式
基本上會用 importxml
跟簡單的 excel/ Google Spreadsheet 函式,就可以達到小量資料爬取目的。但實測過一個試算表通常只要超過 50 個 importxml
同時執行,就會出現 error(應該是 Google 的避免濫用機制),所以下一步就是去解「大量批次執行」的問題,畢竟超過 50 筆資料的應用場景,蠻多的 XD。
我自己有試過:
- 同一個試算表,不同 tab 平行執行數個
importxml
函式 - 不同試算表,平行執行數個
importxml
函式,再匯入一 master sheet - 不同 account,平行執行數個
importxml
函式
只能說「通。通。不。堪。用」
要嘛是一樣會出現大量執行被 block 的狀況,要嘛是想要修改函數寫法或一些邏輯運算的時候,速度會變非常地慢。
十分崩潰。
複製貼上的 Script,讚!
其實 Google Spreadsheet 有 Google App Script 支援,類似 Excel 的 VBA。無論是讀取、修改試算表內容、進行排序與邏輯判斷,或是將重複的任務交由 script 執行,甚至可以串一些 Google Service,都是 Google App Script 的守備範圍。之前有做過地址清理的 project,就可以把 Google Geocoding API 的一些功能放到 Script 裡面使用(準確度不怎麼樣就是了)。
我寫了一支 Script 來執行重複的工作,概念是這樣的:
1. 一張試算表,只有一個
importxml
函式
2. 將網址交由該importxml
執行,並將執行後的結果送到指定儲存格
3. 重複執行以上迴圈,直到所有的網址都被執行完畢、取得資料
附上範例試算表本人,有興趣的話可以複製一份去玩玩看。要看原始腳本的可以從試算表的 Menu → “Tools” → “Script Editor” 中查看。
針對產出結果,進行訂價分析
有了資料的下一步,就是進行分析,並得出後續 action items 或是商業上的 insight。
前面有說到這個專案,想要達到兩個目標:
1. 提供業務端「需進行重新訂價的旅宿清單」
2. 提供管理階層「現行線上旅宿與其他 OTA 的比價狀況」
所以這邊對應做兩件事:
1. 對資料做邏輯判斷,取出「比價後貴的旅宿」
2. 分析價差的分佈
對資料做邏輯判斷,取出「比價後貴」的旅宿
這部分很簡單,其實就是針對 output 的資料結果,去查找「價格提供者提供」是 AsiaYo,以及其對應價格跟物件名稱。
如果資料輸出的結果順序邏輯很單純,只要拉出最便宜的價格,去做邏輯判斷與排序即可。
因為這個專案的資料表設計,是可以定時批次跑更新與判斷,所以理想上能夠自動化產出有優化價格潛力的旅宿清單給業務單位,進行後續的談價動作。
分析價差的分佈
只要有價格差異的資料,就可以計算價差百分比,並用樞紐分析表,去畫出一個價差分佈的表格,如下圖(數字都有調亂過)。
有了價差分佈表,一方面可以幫助管理團隊去了解現行平台訂價的狀況(問題重要性),一方面對於優惠/ 折扣活動的計畫,也多少會有些參考價值。
可能會踩到的雷
技術實作面
importxml
這個函式,只能處理匯入靜態網頁的資料。javascript triggered rendering content 網頁內容,就會抓不到資料。- 如果遇到需要登入的網頁,或是有確認頁之後才 redirect 到主頁的網頁內容,輸出結果也會是
N/A
。
資料面
- 爬取的資料來源可能會有偏誤,好比說競爭者傳送給比價網站的資料有經過刻意減價;或是競爭對手在做優惠活動,爬到的資料比較基準不同,價差分佈表的可參考性會變低。
小結
本篇主要分享使用 Google Spreadsheet 的函式 importxml
與 Google App Script 去實作懶人爬蟲的做法,能夠在有限的範圍內取代人工拉取資料,節省作業成本。
另外資料分析,必須能結合商業需求,並確保最後能產出 action items 之後進行實作。
像是本篇的案例中,應還要多去驗證使用者是否有比價行為、業務端在進行商品談價是否有實作上的困難、比價專案營收成長最大的瓶頸是流量 or 轉換率等問題。
參考資料
如果你喜歡本篇分享,歡迎拍手/ 分享給我鼓勵。同時也推薦 AsiaYo Engineering Blog 裡面有許多好文分享!