Case Study 2023年10月28日
競合価格調査スクレイピングツール
毎朝自動で競合サイトを巡回し、価格変動をSlackに通知するシステム。
高
高橋 健太
受講生
Tech Stack
Python Cursor Slack API
開発期間
1週間
導入効果
手動調査 30分/日 → 完全自動
背景
ECサイトを運営する中で、競合他社の価格動向を把握することは非常に重要です。しかし、毎日手動で10社以上のサイトをチェックするのは大変な作業でした。
- 毎朝30分以上かかる
- 漏れやミスが発生する
- 価格変動への対応が遅れる
開発したシステム
毎朝6時に自動で競合サイトを巡回し、価格情報を収集。変動があった場合はSlackに通知するシステムを開発しました。
機能一覧
-
自動巡回
- 設定した競合サイトを毎朝自動チェック
- 商品ページの価格を抽出
-
価格履歴管理
- Google スプレッドシートに自動記録
- 過去との比較が可能
-
アラート通知
- 価格変動時にSlackへ通知
- 変動幅に応じたアラートレベル
-
レポート生成
- 週次で価格動向レポートを自動生成
- グラフ付きで視覚化
技術構成
# メインの処理フロー
def main():
# 1. 競合サイトリストを取得
competitors = get_competitor_list()
# 2. 各サイトをスクレイピング
for site in competitors:
prices = scrape_prices(site)
# 3. 前日との比較
changes = compare_with_yesterday(prices)
# 4. 変動があれば通知
if changes:
send_slack_notification(changes)
# 5. スプレッドシートに記録
save_to_spreadsheet(all_prices)
使用技術
| 技術 | 用途 |
|---|---|
| Python | メイン言語 |
| BeautifulSoup | HTMLパース |
| Selenium | 動的サイト対応 |
| Google Sheets API | データ保存 |
| Slack API | 通知 |
| GitHub Actions | 定期実行 |
開発の流れ
Day 1-2: 基本機能
- Cursorでスクレイピングの基本コードを生成
- 1サイトでの動作確認
Day 3-4: 複数サイト対応
- サイトごとの設定ファイル作成
- 共通処理の抽象化
Day 5-6: 通知・保存機能
- Slack連携
- スプレッドシートへの保存
Day 7: 自動化
- GitHub Actionsで毎朝実行
- エラー時のリトライ処理
Cursorの活用
Cursorが特に役立ったポイント:
-
サイトごとのセレクタ特定
「このHTMLから価格情報を抽出するPythonコードを書いて」 → 適切なCSSセレクタを提案してくれる -
エラーハンドリング
「サイトがダウンしている場合のリトライ処理を追加して」 → 堅牢なコードに改善 -
Slack通知のフォーマット
「価格変動を見やすい表形式でSlackに送信するコードを書いて」 → Block Kit形式のメッセージを生成
導入効果
| 項目 | Before | After |
|---|---|---|
| 調査時間 | 30分/日 | 0分(完全自動) |
| 対象サイト数 | 5社程度 | 15社 |
| 更新頻度 | 不定期 | 毎日確実に |
| データ蓄積 | なし | 履歴として保存 |
月間で15時間以上の工数削減を実現しました。
注意点
スクレイピングを行う際は、以下の点に注意が必要です:
- 対象サイトの利用規約を確認
- サーバーへの負荷を考慮(適切な間隔を設定)
- 個人情報は収集しない
今後の展開
- 価格予測モデルの構築(機械学習)
- 自動価格改定機能との連携
- 競合の新商品検知機能
1週間でここまで作れるとは思っていませんでした。Cursorのおかげで、アイデアをすぐに形にできるようになりました。
高橋 健太