競合店の値段、仕入れ先の在庫、よく見るニュースの一覧。
こういうページを毎朝ブラウザで開いて、目で見て確認していませんか。
5分で終わる作業でも、毎日となると地味に効きます。
しかも「変わっていないことを確認するだけ」の日がほとんどです。
私は、この「変わってないか見に行く」をやめました。
Pythonで小さな見張り役を作って、値が変わったときだけスマホに通知が来るようにしたからです。
作ったツールはGitHubで公開しています。そのまま使えます。
🔗 コードはこちら:mamagotolab/price-watcher
この記事では、何を考えて作ったか(要件定義)と、実際に動かして分かった注意点まで、隠さず書きます。
先に結論:こういう仕組みです
- 見張りたいページのURLと「ページのどの部分か」を、設定ファイルに書くだけ
- プログラムが1日1回(好きな頻度で)そのページを見に行く
- 前回の値と比べて、変わっていたら通知(SlackやDiscordに届く)
- 変化のあるなしに関わらず、結果はCSVに記録(あとで履歴をたどれる)
新しいサーバーも、月額のサービスも要りません。
パソコン1台と、無料のPythonだけで動きます。
なぜ「手で見る」が辛いのか
競合の価格チェックは、3つの理由でじわじわ時間を奪います。
- 件数が増える:見るサイトが5つ、10と増えるほど、毎日の確認が重くなる
- ほとんど変化がない:9割の日は「変わってませんでした」で終わる。確認のための確認になる
- 肝心なときに見落とす:忙しい日に限って、競合が値下げしている
つまり、人間がやると「毎日コストがかかるのに、成果が出るのはたまにだけ」という、いちばん自動化に向いた作業です。
何を作るか、先に決めた(要件定義)
いきなりコードは書きません。
私はいつも、作る前に「何を・どこに・いつ」をはっきりさせます。面倒を減らすには、まず段取りを決めるのが近道だからです。
今回はこう整理しました。
- 何を見るか:ページ全体ではなく「価格の部分」だけ。だから「ページのどこを見るか」を指定できる形にする
- どこに残すか:履歴はCSVに追記。表計算ソフトでそのまま開けて、非エンジニアでも中身が分かる
- いつ知らせるか:毎回ではなく「前回と違ったときだけ」。通知が多すぎると、人は見なくなる
- 相手への配慮:これがいちばん大事。後述しますが、相手のサイトに迷惑をかけない作りを最初から組み込む
この「相手への配慮を、あとから足すのではなく最初の要件に入れる」のが、業務で長く使えるツールと、その場しのぎのスクリプトの分かれ目だと考えています。
使い方は「設定ファイルを書くだけ」
プログラム本体(watch.py)は触りません。
config.yaml という設定ファイルに、見張りたいページを書き足すだけです。
yaml
targets:
- name: "競合A店の商品X" # 自分が分かる名前
url: "https://example.com/item" # 見張るページ
selector: ".price" # ページのどの部分を見るか
selector(セレクタ)は「ページのどの部分か」を表す住所のようなものです。
ブラウザで対象ページを開き、価格の上で右クリック →「検証」を選ぶと確認できます。専門知識がなくても、コピーして貼るだけで動きます。
あとは決まった時間に自動実行させるだけ。
Windowsならタスクスケジューラ、Mac/Linuxならcronで「毎朝9時に1回」と設定すれば、もう見に行く必要はありません。
実際に動かして分かった、3つの落とし穴
ここからが、公式ドキュメントには載っていない「実際にやってみたら」の話です。
落とし穴1:価格が「£」じゃなく「£」と化けた
動作確認で取得した価格が £51.77 と表示されました。本当は £51.77 です。
これは、ページの文字コードをPythonが取り違えたために起きる、典型的な文字化けです。
サイトが「この文字コードですよ」と明記していない場合、取得ライブラリ(requests)が古い欧文向けの文字コードと勝手に推測してしまうのが原因でした。
「文字コードの指定が無い」と判断したときだけ、実際のバイト列から推定し直すようにして解決しました。
python
if (res.encoding or "").lower() in ("iso-8859-1", "ascii"):
res.encoding = res.apparent_encoding or res.encoding
ポイントは「いつも上書きする」のではなく「誤って推測したときだけ直す」ところです。
こうしないと、Shift_JISなど文字コードを正しく宣言している日本語サイトを、逆に壊してしまいます。地味ですが、価格を扱うツールで数字や記号が化けるのは致命的です。こういう一行は、踏んでみないと気づけません。
落とし穴2:相手のサイトの「立ち入り禁止」を尊重する
多くのサイトには robots.txt というファイルがあります。
これは「プログラムでアクセスしていい範囲・ダメな範囲」を、サイト運営者が示したものです。
このツールは、取得の前に必ず robots.txt を確認し、禁止されているページは自動でスキップします。
「取れるから取る」ではなく「相手が許可した範囲だけ取る」を、仕組みとして守る設計にしました。
落とし穴3:ネットにつながないとテストできない、を避ける
スクレイピングのツールは「動かすたびに本物のサイトへアクセス」しがちです。
これだとテストのたびに相手へ負荷をかけますし、相手のページが変わると勝手にテストが壊れます。
そこで、差分の判定(前回と違うか)や通知文の組み立てといった頭脳の部分は、ネットにつながずにテストできるように切り分けました。
偽のページデータを渡して動きを確かめる形です。おかげで、相手に一切アクセスせず、一瞬でテストが終わります。
⚠️ スクレイピングを使う前に必ず読んでください
便利な道具ですが、相手のサーバーへアクセスする行為だということは忘れてはいけません。
そもそも、スクレイピング自体を利用規約で禁止しているサイトもあります。その場合は使わないでください。
そのうえで、最低限、次のことを守ってください。
- まず取得先サイトの 利用規約 を確認し、スクレイピングが禁止されていないかを見る
- 取得先サイトの robots.txt を確認する(このツールも自動で確認します)
- 公開されている情報だけを対象にする(ログインや会員登録が必要なページは取らない)
- 短い間隔で何度もアクセスしない(このツールはアクセス間隔を秒単位で設定できます)
- 取得したデータは、自分の比較・分析に留める(無断で転載・再配布しない)
なお、何がどこまで許されるかはサイトごとに違い、状況によっても変わります。
判断に迷う場合は、取得先サイトに問い合わせるか、専門家に相談してください。ここでの説明は法律上の断定ではなく、参考程度に読んでいただければと思います。
どれくらい時間が浮くのか(試算)
実際の削減効果は使い方しだいなので、ここでは試算として示します。
たとえば、競合10サイトを毎朝1サイト30秒で確認しているとします。
- 1日:30秒 × 10サイト = 5分
- 1か月(20営業日):5分 × 20 = 約100分
あくまで試算ですが、月に1時間半ほどの「変わってないことを確認するだけの時間」が、通知を待つだけに変わります。
そして人間より、見落としがありません。
よくある質問
Q:プログラミングの知識がなくても使えますか?
A:設定ファイルにURLと見たい場所を書くだけなので、コードを書く必要はありません。GitHubのREADMEに、画面操作の手順まで日本語で書いています。
Q:robots.txt とは何ですか?
A:サイト運営者が「プログラムでアクセスしていい範囲」を示したファイルです。このツールは自動で確認し、禁止されたページには行きません。
Q:通知はLINEに送れますか?
A:今のところSlackとDiscordに対応しています(Webhookという仕組みを使います)。設定欄を空にすれば、通知せずCSV記録だけにもできます。
Q:価格がうまく取れないときは?
A:見ている場所の指定(セレクタ)がずれている可能性が高いです。ブラウザの「検証」で、価格が入っている部分を確認して直してください。READMEに手順があります。
Q:何件まで見張れますか?
A:設定ファイルに書くだけ増やせます。ただし1つのサイトに集中させず、アクセス間隔を空けることをおすすめします。
おわりに
この仕組みの肝は、コードの難しさではありません。
「変わってないか見に行く」という、人間がやると地味に消耗する作業を、相手にも配慮した形でまるごと肩代わりさせたところにあります。
何を見て、どこに残し、いつ知らせ、どこまでなら相手に許されるか。
この段取りを先に決めておくと、ツールは長く安心して使えます。
「自社の業務に合わせたい」「うちの場合はこう監視したい」というご相談を承っています。
業務の流れを整理する“要件定義”から、運用後の保守まで対応します。
- ホームページ:https://mamagotolab.com
- ご依頼(クラウドワークス):https://crowdworks.jp/public/employees/6942778
- 🔗 コード:mamagotolab/price-watcher
ママゴトラボは、業務の自動化ツールを要件定義から設計してつくる開発ラボです。
「この作業、自動化できないかな?」がありましたら、お気軽にご相談ください。
👉 https://mamagotolab.com