Walmartは、Amazonに次ぐ米国で2番目に大きなオンラインストアであり、そのデータはeコマースビジネスにとって非常に重要です: 競合の価格監視、在庫の追跡、品揃えの分析。しかし、Walmartは、パーサーからの90%のリクエストを最初のページでブロックする高度なボット保護システムであるPerimeterXを使用しています。
このガイドでは、Walmartのパースに実際に機能するプロキシの種類、IPアドレスのローテーションの設定、ブラウザのフィンガープリンティングを回避する方法、そして1時間の作業でシステムがダウンしない安定したデータ収集システムを構築する方法を解説します。
なぜWalmartはパーサーをブロックするのか: PerimeterXの保護メカニズム
WalmartはPerimeterX(現在はHUMAN Securityと呼ばれる)というボット保護システムを使用しています。これは市場で最も攻撃的なアンチボットシステムの1つです。リクエストは数十のパラメータで分析され、疑わしいトラフィックは、パーサーがページのHTMLコードを取得する前にブロックされます。
Walmartの主な保護メカニズム:
1. IPレピュテーションの分析
PerimeterXは、既知のプロキシサーバー、データセンター、VPNのデータベースに基づいて各IPアドレスをチェックします。あなたのIPがこのデータベースにある場合、ブロックまたはCAPTCHAが表示されます。Walmartは特に人気のあるクラウドプロバイダー(AWS、Google Cloud、DigitalOcean)からのIPを厳しくフィルタリングします。
2. 行動分析
システムは、ユーザーがページとどのように対話しているかを追跡します: マウスの動き、スクロール速度、クリック。SeleniumやPuppeteerを使用したパーサーは、ここでしばしば検出されます — 彼らは自然な間隔なしにページをあまりにも早く開き、マウスを動かしません。
3. TLSおよびHTTPフィンガープリンティング
PerimeterXは、接続のTLSフィンガープリント(暗号の順序、拡張)とHTTPリクエストのヘッダーを分析します。標準のPythonライブラリ(requests、urllib)は、簡単に認識されるユニークなフィンガープリントを持っています。User-Agentを変更しても、システムはヘッダーと実際のブラウザとの不一致を検出します。
4. JavaScriptチャレンジ
疑わしいリクエストがあると、PerimeterXはJavaScriptコードを送信し、ブラウザでのチェックを実行します: Canvas API、WebGL、画面のパラメータ、インストールされたフォントの可用性。シンプルなHTTPパーサー(ブラウザエンジンなし)はこれらのチェックを通過できず、ブロックされます。
ブロック時に起こること:
- HTTP 403 Forbidden — 最も一般的な応答で、あなたのIPまたはフィンガープリントがブラックリストに載っています
- CAPTCHAのあるページへのリダイレクト — システムは確信が持てず、人間であることを証明するチャンスを与えます
- 空のページまたはエラーのあるJSON — サーバーはコンテンツを全く返しません
- IPの一時的なバン — 1つのアドレスからの攻撃的なパース時に15-60分
重要な結論: Walmartを成功裏にパースするには、プロキシだけが要素の1つである包括的な戦略が必要です。正しいブラウザエンジン、人間の行動の模倣、IPアドレスの適切なローテーションも必要です。
Walmartのパースに適したプロキシ: 種類の比較
すべてのプロキシがWalmartの保護を回避するのに同じように効果的ではありません。ここでは、4つの主要なタイプとそれらのパースタスクへの適用可能性を見てみましょう。
| プロキシの種類 | Walmartへの効果 | 速度 | コスト | 推奨 |
|---|---|---|---|---|
| 住宅用プロキシ | ⭐⭐⭐⭐⭐ 素晴らしい — 実際のユーザーのIP、最小限のブロック |
中程度 (200-800 ms) |
高い ($7-15/GBから) |
プロダクションに最適 |
| モバイルプロキシ | ⭐⭐⭐⭐⭐ 素晴らしい — 高い信頼スコア、稀なブロック |
低い (500-1500 ms) |
非常に高い ($50-100/月/ IPから) |
複雑なケース用 |
| データセンターのプロキシ | ⭐⭐ 悪い — 高いブロックの可能性 (70-90%) |
高い (50-150 ms) |
低い ($1-3/IPから) |
推奨しません |
| ISPプロキシ | ⭐⭐⭐⭐ 良好 — 静的な住宅用IP |
高い (80-200 ms) |
中程度 ($30-80/月/ IPから) |
長期的なタスク用 |
各タイプの詳細:
住宅用プロキシ — Walmartのゴールドスタンダード
これは、実際の家庭用インターネットプロバイダー(米国のComcast、AT&T、Verizon)のIPアドレスです。Walmartはこれらを通常の顧客として認識するため、ブロック率は最小限 — 適切に設定すれば約5-10%です。主な利点は、巨大なアドレスプール(数百万のIP)があり、効果的なローテーションを設定できることです。
使用するタイミング: 数千の商品に対する価格監視、データの毎日の収集、長期プロジェクト。Walmartのパースには、住宅用プロキシが効率とコストのバランスで最適な選択です。
モバイルプロキシ — 最大の信頼性
モバイルプロバイダーのIP(T-Mobile、Verizon Wireless)は、アンチボットシステムで最も高い信頼スコアを持っています。その理由は、1つのIPが数千の実際のユーザーによって使用されるため(プロバイダーのNATを介して)、それをブロックすることは数千の顧客をブロックすることになります。WalmartはモバイルIPをほとんどブロックしません。
使用するタイミング: 住宅用プロキシが機能しない場合、特に保護されたセクション(特定の地域の価格など)をパースする必要がある場合、予算が許す場合。モバイルプロキシは、ほぼ100%の成功率を提供しますが、コストは高くなります。
データセンターのプロキシ — Walmartには不向き
データセンターのサーバーのIPアドレス(AWS、OVH、Hetzner)は、PerimeterXによって瞬時に認識されます。たとえパースに以前使用されていない「クリーン」IPを購入しても、システムはそれがデータセンターであることを認識します。ブロック率は70-90%です。
唯一の使用シナリオ: 小規模データ(10-50ページ)のパーサーのテスト。プロダクションには全く適していません。
ISPプロキシ(静的住宅用)はハイブリッドです: 住宅プロバイダーのIPですが、データセンターに配置され、長期間(1ヶ月以上)あなたに提供されます。通常の住宅用プロキシよりも速いですが、高価で、アドレスプールが制限されています。同じカテゴリの商品を長期的にパースするための安定したIPが必要な場合に適しています。
住宅用プロキシ vs データセンターのプロキシ: あなたのタスクに最適な選択は?
住宅用プロキシが効果的であることがわかったにもかかわらず、各タイプが正当化される状況を詳しく見て、実際の所有コストを計算してみましょう。
シナリオ1: 10,000商品の毎日の監視
住宅用プロキシを使用した場合:
- Walmartの商品ページの平均サイズ: ~500 KB
- 10,000商品 × 500 KB = 5 GBのトラフィック/日
- 月間トラフィック: 150 GB
- コストは$10/GBの場合: $1,500/月
- 成功したリクエストの割合: 90-95%
- リピートを考慮した実際のコスト: ~$1,650/月
データセンターのプロキシを使用した場合(理論的に):
- 100 IPのコスト: ~$200/月
- 成功したリクエストの割合: 10-30%(残りはブロック)
- 各商品に対して3-10回の試行が必要
- 実際のトラフィック: 15-50 GB(リピートによる)
- 結論: タスクは実行不可能 — IPはすぐにバンされ、各ステップでCAPTCHAが表示される
シナリオ2: 500商品のデータを一度だけ収集
市場分析や研究のためにデータを一度だけ収集する必要がある場合、組み合わせたアプローチを試すことができます:
- 最初に商品URLを収集するためにデータセンターのプロキシを使用(カテゴリページ)
- 商品の詳細情報を取得するために住宅用プロキシに切り替え
- コスト: ~$50-100の一回限りのタスク
- 実行時間: データセンターを使用した場合の10-20時間ではなく、2-4時間
選択の重要な要因:
| 基準 | 住宅用 | データセンター |
|---|---|---|
| データ量 | 任意 — 100から数百万ページまで | 小規模な量のみ(最大1000ページ) |
| 定期性 | 毎日/毎週のパース | 一回限りのタスクのみ |
| 実行速度 | 安定 — リピートによる遅延なし | 予測不可能 — リピートが多い |
| 信頼性 | 高い — 90-95%の成功率 | 低い — 10-30%の成功率 |
| エラーのコスト | 低い — 成功したトラフィックに対してのみ支払う | 高い — バンに対して時間とお金を失う |
結論: Walmartのパースに関する真剣なタスクには、住宅用またはモバイルプロキシを使用してください。データセンターのプロキシは、10-50ページでパーサーのロジックをテストするためにのみ考慮されるべきですが、プロダクションには適していません。プロキシの節約は、時間や神経を失う結果となり、最終的には高くつくことになります。
IPのローテーション戦略: 変更頻度とアドレスプール
住宅用プロキシを使用しても、IPアドレスのローテーションを正しく設定しないとブロックされることがあります。PerimeterXは行動パターンを追跡します: 1つのIPが1分間に100ページの商品をリクエストすると、明らかにボットです。正しいローテーション戦略は、ブロックなしで安定したパースを実現する鍵です。
3つの主要なローテーション戦略:
1. リクエストごとのローテーション (Rotating Proxies)
各HTTPリクエストは新しいIPアドレスを通過します。これは、ほとんどの住宅用プロキシプロバイダーの標準的な動作モードです。
利点:
- ブロックのリスクが最小限 — 各IPが1-2リクエストを行う
- 設定が簡単 — プロバイダーがプールを管理します
- 攻撃的にパース可能 — 1分間に数百のリクエスト
欠点:
- セッションの問題 — サイトがクッキーを使用している場合、各リクエストは新しいセッションになります
- 遅くなる — 新しい接続の確立に200-500 msかかります
使用するタイミング: 認証やセッションが必要ないWalmartの商品ページをパースする場合。これは、ほとんどの価格監視タスクに最適な戦略です。
2. スティッキーセッション (Sticky Sessions)
1つのIPアドレスが一定の時間(通常5-30分)にわたって一連のリクエストに使用され、その後新しいIPに切り替わります。
利点:
- セッションとクッキーの保持 — カートや認証と連携可能
- 速い — TCP接続が再利用されます
- アンチボットシステムに対してより「自然な」行動
欠点:
- ブロックのリスクが高い — 1つのIPが10-50リクエストを行う
- 制限を監視する必要がある — 1つのIPから30-50リクエスト以上は行わない
使用するタイミング: 認証が必要なデータをパースする場合(たとえば、登録ユーザー向けの価格)や、実際の購入者の行動を模倣する場合(カテゴリの閲覧 → 商品 → カートへの追加)。
3. 手動ローテーションの静的IPプール
50-100の静的住宅用IP(ISPプロキシ)を取得し、それらの間でリクエストを分配します。
利点:
- 完全な制御 — どのIPがどれだけリクエストを行ったかを把握できます
- 最大の速度 — 静的IPはローテーションよりも速い
- IPを「ウォームアップ」可能 — 評判を高めるために合法的なリクエストを行う
欠点:
- 設定が複雑 — リクエストの分配ロジックを書く必要があります
- 高価 — ISPプロキシは月に$30-80かかります
- IPの喪失リスク — 1つがバンされると、交換が必要になります
使用するタイミング: 1日あたり100,000以上のリクエストを必要とする高負荷システムで、速度と安定性が重要です。パーサーの開発に経験が必要です。
Walmartに推奨される設定:
価格監視用(商品ページの簡単なパース):
- タイプ: リクエストごとのローテーションプロキシ
- リクエスト間の遅延: 2-5秒
- 並行性: 10-20スレッド
- ジオロケーション: 米国(できればWalmartの実店舗がある州)
複雑なパース用(認証、カートを含む):
- タイプ: スティッキーセッション(10-15分の持続時間)
- IPあたりのリクエスト制限: 最大30-40
- リクエスト間の遅延: 3-7秒(人間の模倣)
- 並行性: 5-10スレッド(攻撃性を抑える)
重要: 多くの住宅用プロキシプロバイダーは、接続パラメータを介してセッションの持続時間を設定することを許可しています。たとえば、ユーザー名にsession-15minを追加すると、15分間のスティッキーセッションが得られます。この機能については、プロバイダーに確認してください。
フィンガープリンティングの回避: User-Agent、ヘッダー、TLSフィンガープリント
プロキシは問題の半分しか解決しません — 彼らはあなたにクリーンなIPを提供します。しかし、PerimeterXはIPだけでなく、あなたのブラウザやパーサーの「フィンガープリント」も分析します。住宅用IPを使用していても、HTTPクライアントがボットのように見えるとブロックされます。
PerimeterXがチェックするもの:
1. User-AgentとHTTPヘッダー
標準のライブラリ(Python requests、Node.js axios)は、ボットを瞬時に特定するヘッダーを送信します。たとえば、User-Agent: python-requests/2.28.1 — これは100%のブロックです。
変更が必要なもの:
User-Agent— 新しいバージョンのChrome/Firefoxを使用Accept— コンテンツのタイプに一致する必要がありますAccept-Language— Walmart米国のためにen-USAccept-Encoding— gzip、deflate、brReferer— 前のページ(カテゴリまたはホーム)Sec-Fetch-*— CSRF保護のためのChromeヘッダー
2. TLSフィンガープリント (JA3)
各HTTPクライアントはユニークなTLSフィンガープリントを持っています — 暗号の順序、TLSの拡張、プロトコルのバージョン。PerimeterXはこのフィンガープリントをUser-Agentと比較します: もし「Chrome 120」と書いていて、TLSフィンガープリントがPythonからのものであれば、あなたはブロックされます。
解決策:
- カスタムTLSをサポートするライブラリを使用:
curl-impersonate(Python)、tls-client(Go) - または、Selenium/Puppeteerを介して実際のブラウザを使用 — 彼らは本物のTLSフィンガープリントを持っています
3. JavaScriptチャレンジとCanvasフィンガープリンティング
PerimeterXは、Canvas API、WebGL、インストールされたフォント、画面サイズ、タイムゾーンが利用可能かどうかを確認するJavaScriptコードを送信することがあります。シンプルなHTTPパーサーはこのコードを実行できません。
解決策:
- ヘッドレスブラウザを使用: Puppeteer、Playwright、Selenium
- 検出回避モードを必ず有効にする:
puppeteer-extra-plugin-stealth - パラメータをランダム化: ウィンドウサイズ、タイムゾーン、ブラウザの言語
Walmartのパース用の正しいヘッダーの例:
GET /ip/Product-Name/12345678 HTTP/1.1
Host: www.walmart.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Referer: https://www.walmart.com/browse/electronics/tv-video/3944_1060825
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
Connection: keep-alive
重要な詳細:
- ヘッダーの順序が重要 — 実際のブラウザは特定の順序で送信します。この順序を守るライブラリを使用してください。
- クッキー — PerimeterXが
_px3または_pxvidのクッキーを設定した場合、次のリクエストで必ずそれを送信してください。これはあなたのセッショントークンです。 - HTTP/2 — WalmartはHTTP/2を使用しており、このプロトコルのサポートがないとボットのシグナルとなる可能性があります。クライアントがHTTP/2をサポートしていることを確認してください。
- すべてのリクエストで同じヘッダーを使用しないでください — User-Agentを変え、10-20の異なるブラウザのバージョンのプールを使用してください。
レート制限と遅延: リクエストの制限を超えない方法
完璧なプロキシとヘッダーを使用しても、あまりにも攻撃的にパースするとブロックされます。Walmartはリクエストの頻度と行動パターンを追跡します。実際のユーザーは1分間に100ページの商品を開くことはできません — アンチボットシステムはこれを理解しています。
Walmartに推奨される制限:
| リクエストの種類 | リクエスト間の遅延 | 1つのIPからの最大リクエスト数 | 並行性 |
|---|---|---|---|
| 商品ページ | 2-5秒 | 30-50ページ(ローテーションあり) | 10-20スレッド |
| カテゴリページ | 3-7秒 | 20-30ページ | 5-10スレッド |
| 検索 | 5-10秒 | 10-15リクエスト | 3-5スレッド |
| APIエンドポイント | 1-3秒 | 50-100リクエスト | 20-30スレッド |
なぜ遅延のランダム化が重要か:
もしあなたが正確に3秒ごとにリクエストを行う(3.000、6.000、9.000...)と、アンチボットシステムはパターンを認識します。実際の人間はそんなに正確ではありません — 彼には変動があります: 2.8秒、3.4秒、2.9秒。
遅延の正しい実装(Python):
import random
import time
# 不正 — 固定遅延
time.sleep(3)
# 正しい — ランダム化された遅延
delay = random.uniform(2.0, 5.0) # 2秒から5秒
time.sleep(delay)
負荷管理の戦略:
1. 適応型レート制限
成功したリクエストの割合を追跡します。403やCAPTCHAを受け取り始めたら、自動的に遅延を増やし、並行性を減らします。
success_rate = successful_requests / total_requests
if success_rate < 0.8: # 成功率が80%未満
delay_multiplier *= 1.5 # 遅延を増やす
parallel_workers -= 2 # スレッドを減らす
elif success_rate > 0.95: # 成功率が95%以上
delay_multiplier *= 0.9 # 速度を上げることができる
2. 一日の時間帯による分配
実際のユーザーのピークアクティビティの時間帯(米国の夕方、18:00-22:00 EST)にパースします。この時間帯にあなたのトラフィックは合法的なものと混ざり、アンチボットシステムはあまり攻撃的ではありません。夜間(2:00-6:00 EST)は、実際のユーザーが少ないため、保護が厳しくなる可能性があります。
3. IPアドレスのウォームアップ
大規模なパースを開始する前に、合法的なリクエストでIPアドレスを「ウォームアップ」します: ホームページを開き、いくつかのカテゴリを見て、検索を行います。これにより、アクティビティの履歴が作成され、IPの信頼スコアが向上します。
# 新しいIPのウォームアップシーケンス
1. GET https://www.walmart.com/ # ホーム
2. 遅延 3-5秒
3. GET https://www.walmart.com/browse/electronics # カテゴリ
4. 遅延 4-7秒
5. GET https://www.walmart.com/search?q=laptop # 検索
6. 遅延 3-6秒
# これでターゲット商品をパースできます
重大なエラー: すべてのリクエストで同じRefererを使用しないでください。1000商品をパースして、すべてのヘッダーに同じRefererがある場合 — これは明らかなボットのパターンです。変動を持たせてください。