毎朝、決まったWebサイトを開く。
必要な情報を探す。
Excelへコピペする。
条件に合うものだけ残す。
これを毎日やっているなら、Pythonでかなり減らせる可能性があります。
ただし、ここで先に言っておきます。
「Webにある情報なら何でも自動取得できます」
ではありません。
できる仕事と、やらないほうがいい仕事があります。
僕自身、Pythonで複数サイトの情報収集、価格比較、画像取得、条件判定、通知まで組み合わせた仕組みを作ってきました。
その中で、普通に失敗もしています。
今日はそこも含めて書きます。
■ スクレイピングは「取得」で終わらせない
スクレイピングというと、
「Webサイトからデータを取る技術」
という説明になりがちです。
もちろん間違ってはいません。
でも実務で欲しいのは、HTMLを取ることではないんですよね。
たとえば、
・商品名を取得する
・価格を取得する
・URLを保存する
・重複を除外する
・条件に合う商品だけ残す
・ExcelやCSVへ出力する
・新着だけ通知する
ここまでやって、ようやく仕事が減ります。
ある案件では、フリマ系サイトとAmazon側の情報を比較し、利益条件に合う候補を抽出する仕組みを作りました。
別の仕組みでは、全国47都道府県を対象に情報を収集し、同じ商品を何度も再処理しないように重複判定を入れています。
情報が変わっていなければ、もう一度ChatGPT分析や通知をしない。
価格だけ変わった場合は、必要な部分だけ再計算する。
こういう設計を入れないと、動くけど無駄が多いツールになります。
■ 一番難しいのは「同じ商品か」の判断だったりする
価格比較の案件でハマったのが、商品名です。
片方のサイトには、
「Panasonic ○○ 新品」
と書いてある。
もう片方には型番だけ載っている。
人間なら写真や説明を見て「たぶん同じ」と判断できます。
でもプログラムは、文字が少し違うだけで別物として扱います。
実際、取得自体はできたのに、フリマ側とAmazon側で型番がほとんど一致せず、期待した比較結果にならないことがありました。
取れた。
でも使えない。
これ、スクレイピング案件では普通にあります。
だから僕は、取得件数だけを成功条件にしません。
「そのデータで次の判断ができるか」
まで見ます。
■ 20分以上待っても終わらないこともある
別のテストでは、Amazon側の情報取得が20分以上終わらないこともありました。
サイト側の構造、通信、アクセス制御、検索条件。
原因候補はいくつもあります。
さらに、CSVを出力できたと思ったらExcelで文字化け。
はい。
地味ですけど、実務ではこっちのほうが困ります。
利用者からしたら、
「Pythonが動いたか」
より、
「明日の朝も普通に使えるか」
のほうが大事です。
そのため、実運用ではタイムアウト、再試行、エラー時のログ、取得件数の上限、実行間隔なども設計します。
データ量が増えた仕組みでは、SQLiteのロック競合で画面が500エラーになる問題も出ました。
最終的には処理用のキューを別DBへ分けて対応しています。
クッッッソ地味です。
でも、この地味な部分が止まらないツールを作ります。
■ Pythonで自動化しやすい仕事
僕が相談を受けたときは、まず「判断基準を固定できるか」を見ます。
たとえば、
・特定キーワードを含む商品だけ欲しい
・価格が一定以下なら保存したい
・新着だけ通知したい
・毎日同じサイトを確認したい
・複数サイトの情報を1つのCSVにまとめたい
・取得後に決まった計算をしたい
・同じURLや商品IDは除外したい
このあたりは設計しやすいです。
人が毎回同じルールで判断しているなら、そのルールをプログラムへ移せる可能性があります。
逆に、
「なんとなく良さそうな商品」
「見た感じで競合が弱そう」
「写真の雰囲気で判断」
のように、人の感覚が大きい部分はそのままPythonへ置き換えにくいです。
ChatGPTを組み合わせて補助することはできます。
ただし、最終判断まで全部任せるのが正解とは限りません。
■ 自動化しないほうがいいケースもある
スクレイピングは技術的に取得できるかだけで決めません。
サイトの利用規約やrobots.txt、ログインの有無、アクセス頻度、個人情報、データの利用目的なども確認が必要です。
また、サイトの画面構造が頻繁に変わる場合、作った後の保守コストも上がります。
「一度作れば永久に動くツール」
ではありません。
ここは最初に伝えるようにしています。
取れるかどうかより、
「継続して使う価値があるか」
のほうが大事だからです。
■ 毎朝の確認作業なら、まず手順を書き出してみる
自動化できるか知りたい場合、難しい仕様書はいりません。
たとえば、
1. このWebサイトを開く
2. 「東京」で検索する
3. 価格が10,000円以下のものを見る
4. 商品名とURLをExcelへ入れる
5. 前日と同じ商品は除外する
6. 新しいものがあれば通知する
このくらいで十分です。
ここまで手順が決まっていれば、
Pythonだけで作るのか。
Googleスプレッドシートへ出すのか。
Discordやメールで通知するのか。
ローカルPCで実行するのか。
VPSで定期実行するのか。
必要な構成を考えられます。
■ 「取れるか」より「仕事が減るか」
スクレイピングの相談で、僕が一番気にするのはここです。
1000件取れるツールを作っても、最後に人が1000件確認するなら、仕事はあまり減っていません。
逆に50件しか取らなくても、
重複を消す。
条件で絞る。
必要な5件だけ通知する。
ここまでできれば、毎朝の確認はかなり軽くなります。
だから、最初に「何件取りたいですか?」だけではなく、
「取った後に何をしていますか?」
を聞きます。
毎朝Webサイトを開いて、同じ条件で確認して、Excelへ貼っている。
その作業があるなら、一度その手順をそのまま送ってください。
Python、GAS、Excelのどれが合うかも含めて整理できます。
スクレイピングを作ることが目的ではなく、毎日の手作業を減らすことが目的です。