競合店の値段、仕入れ先の在庫、よく見るニュースの一覧。
こういうページを毎朝ブラウザで開いて、目で見て確認していませんか。

5分で終わる作業でも、毎日となると地味に効きます。
しかも「変わっていないことを確認するだけ」の日がほとんどです。

私は、この「変わってないか見に行く」をやめました。
Pythonで小さな見張り役を作って、値が変わったときだけスマホに通知が来るようにしたからです。

作ったツールはGitHubで公開しています。そのまま使えます。

🔗 コードはこちら:mamagotolab/price-watcher

この記事では、何を考えて作ったか(要件定義)と、実際に動かして分かった注意点まで、隠さず書きます。

先に結論:こういう仕組みです

新しいサーバーも、月額のサービスも要りません。
パソコン1台と、無料のPythonだけで動きます。

なぜ「手で見る」が辛いのか

競合の価格チェックは、3つの理由でじわじわ時間を奪います。

  1. 件数が増える:見るサイトが5つ、10と増えるほど、毎日の確認が重くなる
  2. ほとんど変化がない:9割の日は「変わってませんでした」で終わる。確認のための確認になる
  3. 肝心なときに見落とす:忙しい日に限って、競合が値下げしている

つまり、人間がやると「毎日コストがかかるのに、成果が出るのはたまにだけ」という、いちばん自動化に向いた作業です。

何を作るか、先に決めた(要件定義)

いきなりコードは書きません。
私はいつも、作る前に「何を・どこに・いつ」をはっきりさせます。面倒を減らすには、まず段取りを決めるのが近道だからです。

今回はこう整理しました。

この「相手への配慮を、あとから足すのではなく最初の要件に入れる」のが、業務で長く使えるツールと、その場しのぎのスクリプトの分かれ目だと考えています。

使い方は「設定ファイルを書くだけ」

プログラム本体(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:ネットにつながないとテストできない、を避ける

スクレイピングのツールは「動かすたびに本物のサイトへアクセス」しがちです。
これだとテストのたびに相手へ負荷をかけますし、相手のページが変わると勝手にテストが壊れます。

そこで、差分の判定(前回と違うか)や通知文の組み立てといった頭脳の部分は、ネットにつながずにテストできるように切り分けました。
偽のページデータを渡して動きを確かめる形です。おかげで、相手に一切アクセスせず、一瞬でテストが終わります。

⚠️ スクレイピングを使う前に必ず読んでください

便利な道具ですが、相手のサーバーへアクセスする行為だということは忘れてはいけません。
そもそも、スクレイピング自体を利用規約で禁止しているサイトもあります。その場合は使わないでください。
そのうえで、最低限、次のことを守ってください。

なお、何がどこまで許されるかはサイトごとに違い、状況によっても変わります。
判断に迷う場合は、取得先サイトに問い合わせるか、専門家に相談してください。ここでの説明は法律上の断定ではなく、参考程度に読んでいただければと思います。

どれくらい時間が浮くのか(試算)

実際の削減効果は使い方しだいなので、ここでは試算として示します。

たとえば、競合10サイトを毎朝1サイト30秒で確認しているとします。

あくまで試算ですが、月に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

その業務、自動化できるかもしれません

「毎回手でやっている作業」を、要件定義から見直してツールにします。GAS・Python・VBAでの自動化のご相談を承っています。

ココナラで相談する →
ブログ一覧に戻る