Wildberriesを定期的にパースしたり、Ozonで競合の価格を監視したり、データ収集を自動化したりしている場合、プロキシのコストが予算に大きな影響を与えることを知っているでしょう。同じページへのリクエスト、静的データの再読み込み、変更されていない情報の更新は、すべてトラフィックとお金を消費します。解決策は簡単です:適切に設定されたデータキャッシュは、情報の関連性を失うことなく、プロキシの負荷を50-70%削減できます。
このガイドでは、マーケットプレイスのパースから競合の監視まで、さまざまなタスクに対する実用的なキャッシング方法を説明します。安全にキャッシュできるデータ、保存期間の設定方法、プログラミングスキルなしで使用できるツールについて学びます。
なぜキャッシュがプロキシ作業にとって重要なのか
例えば、あなたがWildberriesで500商品の価格を毎時監視しているとします。キャッシュがない場合、あなたのパーサーは毎時500のリクエストをプロキシを通じて行います。これは1日で12,000リクエストになります。平均的なレジデンシャルプロキシのコストを考えると、これは大きな出費になります。特に、データの大部分がまったく変わらない場合はなおさらです。
統計によると、マーケットプレイスのパース時には60-70%のリクエストが同一のデータを返します:商品の説明は変わらず、仕様はそのままで、画像は静的です。変わるのは価格、在庫、検索結果の順位だけです。静的データをキャッシュし、動的データのみを更新することで、トラフィックの節約は50-70%に達します。
実例:あるオンラインストアは、キャッシュなしでOzonで1200商品の価格を監視していました。1日のリクエスト数は28,800でした。静的データ(説明、仕様)のキャッシュを導入し、7日ごとに更新、価格のキャッシュを1時間ごとに設定した結果、リクエスト数は9,600に減少しました。プロキシのトラフィック節約は67%に達しました。
キャッシュは3つの重要な問題を解決します:
- プロキシトラフィックのコスト削減 — リクエストが少ない = ギガバイトの支払いが少ない
- ブロックのリスクを減少させる — 目的のサイトへのリクエストが少ない = 頻度による禁止の可能性が低くなる
- パーサーの作業を迅速化 — キャッシュからのデータは即座に提供され、ネットワークリクエストによる遅延がない
パース時にキャッシュできるデータは何か
すべてのデータが同じようにキャッシュに適しているわけではありません。情報を静的(あまり変わらない)と動的(頻繁に更新される)に分けることが重要です。誤ったキャッシング戦略は、古いデータをもたらすか、コスト削減を実現できなくなります。
| データの種類 | 更新頻度 | キャッシュの時間 | トラフィックの節約 |
|---|---|---|---|
| 商品の説明 | 月に1回 | 7-14日 | 最大80% |
| 仕様とパラメータ | 月に1回 | 7-14日 | 最大75% |
| 商品の画像 | 2-4週間に1回 | 14-30日 | 最大90% |
| 顧客のレビュー | 毎日 | 12-24時間 | 最大50% |
| 商品の価格 | 1日に数回 | 1-3時間 | 最大40% |
| 在庫 | 毎時 | 30-60分 | 最大30% |
| 検索結果の順位 | 常に | キャッシュしない | 0% |
ゴールデンルール:データが変更される頻度が低いほど、キャッシュに保存できる期間が長くなります。WildberriesやOzonの商品の説明は非常にまれにしか更新されないため、1-2週間キャッシュすることができます。価格はより頻繁に変わりますが、リアルタイムの監視が不要であれば、1-3時間のキャッシュでも大きな節約が得られます。
さまざまなタスクに対するキャッシング戦略
効果的なキャッシングは、単に「データを1日保存する」ことではありません。各タスクには、データの関連性とトラフィックの節約のバランスを考慮した独自の戦略が必要です。一般的なシナリオに対する確立されたアプローチを見てみましょう。
多層キャッシュ
最も効果的な戦略は、異なる保存期間を持つ複数のレベルにデータを分けることです。これにより、重要なデータの関連性を維持しながら、プロキシへの負荷を最大限に軽減できます。
Wildberriesのパース用の多層キャッシュの例:
- レベル1(30日): 商品の画像、ブランド、カテゴリ
- レベル2(7日): 説明、仕様、成分
- レベル3(24時間): 評価、レビュー数
- レベル4(2時間): 価格、割引、プロモーション
- キャッシュなし: 在庫、検索結果の順位
この戦略を使用すると、1000商品の場合、2時間ごとに1000リクエストを行う代わりに、約300-350リクエストを行います:データの大部分はキャッシュから取得され、プロキシを通じて新しい価格と在庫のリクエストのみが行われます。
変更確認付きキャッシング
より進んだアプローチは、条件付きリクエストを使用することです。ページ全体を再読み込みする代わりに、データが前回から変更されたかどうかを確認するための軽いリクエストを送信します。変更がなければキャッシュを使用し、変更があれば更新を読み込みます。
多くのサイトは、条件付きリクエスト用のHTTPヘッダーをサポートしています:If-Modified-SinceやETag。ページが変更されていない場合、サーバーは304(Not Modified)コードを返し、レスポンスボディはありません。このリクエストで95%のトラフィックを節約できます。
インテリジェントなキャッシュ更新
すべてのデータをスケジュールに従って更新するのではなく、高い確率で変更されたデータのみを更新します。例えば、商品がプロモーションに参加している場合は、毎時価格を確認します。通常の商品が過去2週間変更されていない場合は、1日1回確認します。
アドバイス: 変更履歴を追跡します。商品価格が毎日変わる場合は、キャッシュの時間を1時間に短縮します。価格が1ヶ月安定している場合は、6-12時間に延長します。適応型キャッシングは、追加の20-30%の節約をもたらす可能性があります。
プログラミングなしでのキャッシングツール
キャッシングを設定するためにプログラマーである必要はありません。現代のパースおよび自動化ツールには、グラフィカルインターフェースを介して設定できるキャッシュ機能が組み込まれています。
Octoparse — ビジュアルビルダーを持つパーサー
Octoparseは、コードなしでウェブサイトをパースするための人気のあるツールです。タスクの設定には、「Advanced Settings」→「Cache Management」セクションがあり、以下を指定できます:
- キャッシュするページ要素(画像、テキストブロック、テーブル)
- キャッシュの保存時間(1時間から30日まで)
- 更新条件(スケジュールに従うか、特定のフィールドが変更された場合)
Ozonのパース用の設定例:商品の説明ブロックを7日間キャッシュし、価格ブロックを2時間キャッシュします。Octoparseは、説明がすでにキャッシュにある場合、リクエストをスキップし、価格のみをプロキシを通じて更新します。
ParseHub — 複雑なサイトのためのキャッシング
ParseHubは、動的コンテンツ(JavaScript、AJAX)を持つサイトのパースに特化しています。「Project Settings」セクションには「Data Caching」オプションがあります:
- Smart Cache — 自動的に静的要素を特定してキャッシュします
- Custom Cache Rules — 手動でキャッシュする要素のCSSセレクターを指定します
- Cache Duration — キャッシュの有効期間を30分から90日まで設定します
ParseHubは、JavaScriptが多いマーケットプレイス(Wildberries、AliExpress、Yandex.Market)でうまく機能します。このツールは、動的に読み込まれるデータを自動的に特定し、繰り返しのリクエストをキャッシュします。
Screaming Frog — SEO専門家向け
競合サイトの分析や順位監視にScreaming Frogを使用している場合、組み込まれたキャッシング機能は大量のトラフィックを節約します。「Configuration」→「Spider」→「Advanced」設定で以下を有効にします:
- Cache Pages — HTMLページをローカルに保存します
- Cache Images & CSS — 静的リソースを再度読み込まない
- Use Cached Data — 再スキャン時に保存されたデータを使用します
特に同じサイトを定期的に監視する場合に便利です:最初のスキャンはすべてをプロキシを通じて読み込み、次回は変更されたページのみを取得します。
マーケットプレイスのパース時のキャッシュ
マーケットプレイスは、eコマースビジネスにおけるパースの最も人気のあるタスクです。Wildberries、Ozon、Yandex.Marketは、データ構造が似ているため、汎用的なキャッシング戦略を適用できます。
トラフィックを最小限に抑えたWildberriesのパース
典型的なタスク:競合の500商品の監視。キャッシュがない場合は、2時間ごとに500リクエスト = 1日で6000リクエスト。適切なキャッシュを使用すると、1日あたり1500-2000リクエストに抑えることができます。
Wildberriesのキャッシュ設定手順:
- 商品の最初のリクエスト:完全なカード(説明、仕様、画像)をローカルデータベースまたはJSONファイルに保存します
- 商品コードを抽出して別に保存します — これはユニークな識別子です
- 次のリクエスト時:キャッシュに商品コードがあるか、保存期限が切れていないかを確認します
- キャッシュが有効な場合:キャッシュから説明と仕様を取得し、プロキシを通じて価格と在庫のブロックのみをリクエストします(これはWildberriesの別のAPIエンドポイントです)
- キャッシュされたデータと新しい価格を統合し、完全な最新情報を取得します
Wildberriesは、別の軽量APIリクエストを通じて価格と在庫を提供します(約2-5 KB対200-500 KBの完全なページ)。重い部分をキャッシュし、価格のみをリクエストすることで、トラフィックの節約は90-95%に達します。
Ozonのパース最適化
Ozonは、パースに対するより攻撃的な保護を持っているため、余分なリクエストはブロックのリスクを高めます。キャッシュはお金を節約するだけでなく、禁止の可能性を減少させます。
Ozonの特徴:商品カードには同じブロック(ブランドの説明、カテゴリの標準仕様)が含まれていることが多いです。100商品の同じブランドをパースする場合、ブランドの説明は同一になります。これらの繰り返しブロックを別々にキャッシュします:
- ブランドの説明 → 30日間キャッシュ
- カテゴリの標準仕様(例えば、衣服の「成分」) → 14日間キャッシュ
- 特定の商品に対するユニークな説明 → 7日間キャッシュ
- 価格と在庫 → 2-4時間ごとにリクエスト
Avito:広告のキャッシュ
Avitoをパースする際(競合の監視、新しい広告の追跡)には、広告が頻繁に削除されることを考慮することが重要です。削除された広告のデータをキャッシュするのは無意味です。
戦略:アクティブな広告のみをキャッシュし、軽いリクエストでそのステータスを定期的に確認します。広告が削除された場合は、キャッシュをクリアします。これにより、データベースの混雑を防ぎ、パーサーの作業を迅速化します。
競合の価格監視の最適化
価格の監視は、キャッシュが最大の効果を発揮するタスクです。価格は毎分変わるわけではありませんが、定期的に確認する必要があります。適切なキャッシュ設定により、余分なリクエストなしで変更を追跡できます。
適応型の確認頻度
すべての商品が同じ頻度で監視される必要はありません。価格が動的な商品(電子機器、セール品)は、より頻繁に確認する必要があります。価格が安定している商品(建材、家具)は、より少なくて済みます。
適応型価格キャッシングの例:
- 過去7日間に価格が変わった商品 → 2時間ごとに確認、キャッシュ2時間
- 7-30日間変更なしの商品 → 6時間ごとに確認、キャッシュ6時間
- 30日以上変更なしの商品 → 1日1回確認、キャッシュ24時間
このアプローチにより、固定された確認頻度と比較してリクエスト数が40-60%削減されます。1000商品の監視では、1日あたり12,000リクエスト(2時間ごと)ではなく、5,000-7,000リクエストになります。
変更通知付きキャッシング
すべての価格を常に更新するのではなく、システムを設定します:スケジュールに従って価格を確認しますが、変更があった場合にのみキャッシュを更新します。価格が変更されていない場合は、新しいリクエストなしで現在のキャッシュの有効期限を延長します。
多くのパーサー(Octoparse、ParseHub)は、「変更があった場合のみ更新」モードをサポートしています。このツールはリクエストを行い、新しいデータをキャッシュと比較し、違いがなければキャッシュを上書きせず、最後の確認時間を更新します。
キャッシュ設定時の一般的な間違い
不適切なキャッシングは、古いデータや重要な情報の喪失、または逆にコスト削減の欠如を引き起こす可能性があります。よくある間違いとそれを避ける方法を見てみましょう。
間違い1:動的データに対するキャッシュが長すぎる
競合の監視時に価格を24時間キャッシュするのは悪いアイデアです。1日で価格は3-5回変わる可能性があり、特に競争の激しいニッチではそうです。トラフィックの節約は得られますが、データの関連性を失います。
解決策: データの実際の変更頻度を特定します。テストを行い、50-100商品の価格を毎時監視し、価格がどのくらいの頻度で変わるかを確認します。これに基づいて最適なキャッシュ時間を選択します。
間違い2:バージョン管理なしのキャッシング
更新のたびにキャッシュを単に上書きするだけでは、変更履歴を失います。これは価格の動向分析にとって致命的です:古いデータが消去されると、1ヶ月の価格変動をグラフ化することができません。
解決策: タイムスタンプ付きのキャッシュのバージョンを保存します。例えば、ファイルproduct_12345.jsonの代わりにproduct_12345_2024-01-15.jsonを作成します。これにより、履歴を分析し、必要に応じて以前のデータバージョンに戻ることができます。
間違い3:キャッシュサイズの無視
完全なHTMLページで数千商品のキャッシングは、すぐにディスクを埋めてしまいます。10,000商品のキャッシュは、画像やスクリプトを含む完全なページを保存すると5-10 GBを占める可能性があります。
解決策: 必要なデータのみをキャッシュします。全HTMLページを保存するのではなく、特定のフィールド(名前、価格、説明)を抽出し、構造化された形式(JSON、CSV)で保存します。これにより、キャッシュサイズが10-20倍に削減されます。
アドバイス: 古いキャッシュの自動クリーニングを設定します。30-90日以上古いデータは、通常、現在の作業には不要です — 別にアーカイブするか、削除します。これにより、パーサーの作業が迅速化され、ディスクスペースが解放されます。
間違い4:キャッシュエラーの処理がない
キャッシュが破損している場合(書き込みエラー、ディスクエラー)、パーサーは不正確なデータを使用するか、完全にクラッシュする可能性があります。特に自動監視の場合、数日間古いデータを取得し続けることになります。
解決策: キャッシュの整合性をチェックします。キャッシュと一緒にデータのハッシュを保存します。読み込み時に確認し、ハッシュが一致しない場合はキャッシュが破損しているため、新しいリクエストをプロキシを通じて行います。
結論
正しく設定されたキャッシュは、データの品質を損なうことなく、プロキシのコストを50-70%削減する簡単な方法です。重要な原則:データを静的と動的に分け、異なる保存時間を持つ多層キャッシュを使用し、実際の変更動向に応じて更新頻度を調整します。
マーケットプレイスのパースや価格監視のほとんどのタスクには、複雑な技術的解決策は必要ありません — OctoparseやParseHubのような現代のツールには、10-15分でグラフィカルインターフェースを介して設定できるキャッシング機能が組み込まれています。
簡単なことから始めましょう:商品の説明を1週間キャッシュし、価格を2-3時間キャッシュします。1週間の結果を追跡し、実際の変更統計に基づいて設定を調整します。基本的なキャッシングでも30-40%のトラフィックを節約でき、最適化されたキャッシングでは70%に達することがあります。
マーケットプレイスのパースや競合の価格監視を行っている場合は、キャッシングと組み合わせてレジデンシャルプロキシを使用することをお勧めします — これにより、ブロックなしで安定した作業と最小限のトラフィックコストが確保されます。速度が重要で、大量のデータが必要なタスクには、適切なローテーションとキャッシュ設定でデータセンタープロキシが適しています — これらはより速く、安価です。