商品與價格監控系統:打造自動化預警與通知流程

在電商平台如 Taobao 上經營或進行市場分析,即時掌握商品價格與庫存波動對於促銷策略、價格競爭與決策支持至關重要。價格的些微波動可能代表供應鏈異常、競品動態變化或促銷活動的啟動,因此建立一套完善的監控系統,可以為商業決策提供有力支撐。

本文將深入介紹如何構建一套自動化的商品與價格監控系統,透過定時爬取、資料比對與閾值設定,實現異動預警與即時通知,協助您掌握先機、提升營運效率,並提供後續擴展與優化的建議。

一、系統架構概覽

整體系統可分為五大模組,各自擔任關鍵角色,共同實現全自動化的監控流程:

  1. 爬取引擎(Scrapy):定時抓取商品頁面資訊,取得價格、庫存、商品名稱等關鍵欄位。

  2. 資料存儲(MongoDB):以時間序列形式儲存商品歷史資料,支援查詢與比對。

  3. 變更偵測邏輯:根據設定的規則自動比對新舊資料,辨識價格或庫存異常變化。

  4. 通知模組(Email/Slack/Webhook):當異常事件發生時,推送即時預警訊息至指定管道。

  5. 設定與閾值配置中心:使用者可自訂每項商品的監控規則,如價格浮動比例、最低庫存警戒線等。

此架構具備高度模組化與可擴展性,便於後續整合新功能或擴展監控範圍。

二、資料模型設計

我們以 JSON 文件儲存每次爬取的商品資料,確保結構一致且便於查詢與比較。每筆資料包含時間戳與唯一商品識別碼 sku_id

{

"sku_id": "1234567890",

"title": "2024 夏季新款純棉短袖",

"price": 59.9,

"stock": 48,

"shop_name": "天貓旗艦店",

"timestamp": "2025-05-05T12:00:00"

}

資料每次更新都保留新紀錄,藉此建立商品的完整歷史變化紀錄,可用於趨勢分析或異常回溯。

三、爬取引擎設計(Scrapy)

Scrapy 是一款強大的網頁爬蟲框架,支援定時抓取與資料提取。以下是一個簡化的商品爬蟲範例:

import scrapy

from datetime import datetime

class TaobaoPriceSpider(scrapy.Spider):

name = 'price_monitor'

start_urls = [

'https://detail.tmall.com/item.htm?id=1234567890',

]

def parse(self, response):

yield {

'sku_id': '1234567890',

'title': response.css('h1::text').get().strip(),

'price': float(response.css('.tm-price::text').get()),

'stock': int(response.css('#J_SpanStock::text').get()),

'shop_name': response.css('.slogo-shopname strong::text').get(),

'timestamp': datetime.utcnow().isoformat()

}

爬蟲可搭配 CrontabAirflowAPScheduler 進行定時排程,例如每 10 分鐘或每小時執行一次。

若需支援多商品頁面,只需擴展 start_urls 並加入額外處理即可。

四、變化比對與預警邏輯

設定預警規則

透過設定可調整的規則,系統將根據歷史資料與最新資料進行比較。例如:

  • 價格下降超過 10% 時發送通知

  • 庫存量低於 5 件時發出警報

  • 價格上漲或斷貨也可加入自訂規則中

比對邏輯範例

def compare_and_alert(latest, previous):

price_change = (previous['price'] - latest['price']) / previous['price']

if price_change >= 0.1:

send_alert(

f"價格下降警告:{latest['title']}",

f"價格從 {previous['price']} 元降至 {latest['price']} 元"

)

if latest['stock'] <= 5:

send_alert(

f"庫存告警:{latest['title']}",

f"目前庫存僅剩 {latest['stock']} 件"

)

此邏輯可視情況擴充,亦可結合商品分類設定不同閾值,提高預警準確性。

五、通知與整合:自動化推播

當監測到異常情況,系統可自動發送通知訊息,目前支援多種方式:

1. Email 通知

可使用 SMTP 發送郵件,適合正式通知或內部營運使用。

import smtplib

from email.mime.text import MIMEText

def send_email(subject, content):

msg = MIMEText(content, 'plain', 'utf-8')

msg['Subject'] = subject

msg['From'] = 'bot@example.com'

msg['To'] = 'user@example.com'

smtp = smtplib.SMTP_SSL('smtp.example.com', 465)

smtp.login('bot@example.com', 'yourpassword')

smtp.sendmail('bot@example.com', ['user@example.com'], msg.as_string())

smtp.quit()

2. Slack / Discord Webhook 通知

適合即時團隊通報,可整合至行動裝置與桌面應用:

import requests

def send_webhook(message, webhook_url):

payload = {"text": message}

requests.post(webhook_url, json=payload)

未來亦可加入 Telegram、LINE Bot 等更多通知方式。

六、增量儲存與查詢優化

為處理大量歷史資料並保持查詢效率,我們建議進行以下優化:

MongoDB 設計

  • 建立複合索引:sku_id + timestamp,加速查詢特定商品的歷史資料。

  • 使用 capped collection 或 TTL(Time-To-Live)機制,自動清除過舊資料,控制儲存空間。

歷史價格趨勢查詢

透過 Aggregation Pipeline 抽取近十筆價格資料進行分析或視覺化:

db.price_records.aggregate([

{ "$match": { "sku_id": "1234567890" } },

{ "$sort": { "timestamp": -1 } },

{ "$limit": 10 },

{ "$project": { "price": 1, "timestamp": 1 } }

])

此設計也可應用於統計分析,如平均價格、波動範圍等。

七、可擴展性設計建議

本系統基礎架構穩固,可進一步擴展功能以應對更複雜的商業需求:

  • 設定中心模組化:將監控規則與商品資料分離,支援 UI 圖形介面配置。

  • 監控 Dashboard:整合如 Grafana 或 Kibana,提供即時數據視覺化看板。

  • 行為學習與預測:引入機器學習模型,預測未來價格變動趨勢,實現智慧決策。

  • 通知歷史表:記錄每次預警訊息,避免短時間內重複發送造成干擾。

  • API 接入:支援 RESTful API 供第三方平台整合與查詢。

結語

本文介紹了一套完整的商品與價格監控系統,涵蓋從資料抓取、變動偵測、到預警通知與查詢優化的全流程設計。藉由此系統,電商經營者與市場分析師可即時掌握價格異動與庫存狀況,提升經營敏捷度與決策效率。未來透過擴展模組與智慧化功能,更能打造高度自動化、準確且具預測能力的商業監控解決方案。

Articles related to APIs :

如您需要 Taobao API 可聯係我們:support@luckdata.com