スーパーマーケットの価格を追跡する
- 2022年12月、ギリシャの主要な3つのスーパーマーケットの価格変動を追跡するためにWebサイトを構築した。
- この過程でさまざまな問題を解決する必要があり、多くの教訓を得た。
JSサイトのスクレイピング
- 主な問題は、JavaScriptでレンダリングされるWebサイトだった。
- Playwrightを使ってWebブラウザをプログラムから制御した。
- PlaywrightはChromium、Safari、Firefoxブラウザをサポートし、Node、Java、.NET、Pythonと一緒に利用できる。
- 無限スクロールを処理し、製品情報を抽出するコードを書いた。
自動化
- M1 MacBook Proでスーパーマーケット全体をスクレイピングするのに50分から2時間30分かかった。
- 開発とテストには良かったが、より恒久的なソリューションが必要だった。
古いノートPCを使う?
- 2013年製の古いノートPCを使ってみたが、性能は非常に期待外れだった。
クラウドを使う?
- AWSは高すぎ、Hetznerはずっと安かった。
- Hetznerのサーバーを使うことに決めた。
古いノートPCとクラウドを使う!
- クラウドサーバーでスクレイピングを自動化し、古いノートPCはCIサーバーとして使った。
- Concourseを使ってパイプラインを設定し、毎日スクレイピングジョブを実行した。
IP制限の回避
- Akamaiのファイアウォールルールにより、居住地以外のIPアドレスからのリクエストはブロックされた。
- Tailscaleを使って、リクエストが自宅のIPアドレスから来ているように見せた。
失敗の原因と時期
- スクレイピングプロジェクトはWebサイト開発者の変更による影響を受ける。
- 失敗には2つの種類がある: breaking change と non-breaking change。
- フィードバックを早く得ることが重要だ。
最適化
- メール通知、ヒステリシス、タイムアウト、リトライ設定など、さまざまな最適化を行った。
- より大きなサーバーの使用とデータフェッチの削減で性能を改善した。
コスト
- Hetznerでのサーバー利用コストは非常に安い。
- CloudflareのR2無料ティアを使ってデータ保存コストを削減した。
結論
- スーパーマーケットの価格変動を追跡するために構築したスクレイピングパイプラインの主要な構成要素を説明している。
GN⁺のまとめ
- この記事は、スーパーマーケットの価格変動を追跡するためにPlaywrightとクラウドサービスを活用した経験を共有している。
- JavaScriptでレンダリングされるWebサイトをスクレイピングする方法と、自動化および最適化の方法を扱っている。
- HetznerとTailscaleを使ってコストを抑え、IP制限を回避する方法を説明している。
- この記事は、Webスクレイピングと自動化に関心のある人に役立つかもしれない。
1件のコメント
Hacker Newsの意見
類似した問題を経験したという共有
ニュージーランドで類似プロジェクトを進行中
類似のWebサイトを作って大きな関心を集めた
オーストラリアの2大スーパーマーケットは、価格分析AIアルゴリズムを通じて独占的な状態になり得る
スウェーデン市場で8年以上活動中
価格の透明性があれば追跡はもっと容易になるはず
スクレイパーが失敗しないように変更を検知する方法
新しい地域に引っ越したときの価格追跡経験の共有
スクレイピングそのものより、ますます高度化するブロッカーを回避する方が難しい
クライアント側JavaScriptでレンダリングされる問題