コンテンツにスキップ

Python で Walmart.com をスクレイピングする方法 (ステップバイステップガイド)

Walmart.com をスクレイピングすると、さまざまな目的で貴重なデータを提供できます。 このガイドでは、Walmart.com を効率的かつ効果的にスクレイピングするプロセスについて説明します。

Python を使用して Walmart.com を Web スクレイピングする場合、プロセスを容易にする利用可能なライブラリがいくつかあります。 Walmart.com からデータをスクレイピングするために使用できる、人気のある Python Web スクレイピング ライブラリをいくつか紹介します。

  • 美しいスープ: Beautiful Soup は、Python での Web スクレイピングに広く使用されているライブラリです。 HTML および XML ドキュメントを解析するための便利な方法を提供し、Web ページからデータを簡単に抽出できるようにします。 Beautiful Soup を他のライブラリと組み合わせて使用​​し、Walmart.com からデータを収集できます。
  • つながり申請: Requests ライブラリは、Python で HTTP リクエストを作成するためによく使用されます。 これにより、HTTP リクエストを Walmart.com に送信し、Web ページの HTML コンテンツを取得できます。 リクエストを使用すると、必要な Web ページを取得し、Beautiful Soup などの他のライブラリを使用してデータを解析できます。
  • Selenium : Selenium は、ブラウザーの自動化を可能にする強力な Web スクレイピング ライブラリです。 これを使用すると、Web ページを動的に操作できるため、JavaScript ベースの機能を使用して Web サイトをスクレイピングするのに役立ちます。 Selenium を使用すると、ボタンのクリック、フォームへの入力、ページ間の移動などのタスクを自動化でき、Walmart.com のスクレイピングに役立ちます。
  • スクラップ: Scrapy は、Python の堅牢な Web スクレイピング フレームワークです。 Web サイトからデータをスクレイピングするための、高レベルで効率的かつ拡張可能なプラットフォームを提供します。 Scrapy は Web クローラーの構築プロセスを簡素化し、Walmart.com から大規模にデータをスクレイピングできるようにします。
  • LXML: LXML は、XML ドキュメントと HTML ドキュメントを解析するための高速で使いやすいインターフェイスを提供する Python ライブラリです。 Web サイトからデータを収集するために、Requests および Beautiful Soup と組み合わせてよく使用されます。 LXML は、Walmart.com の HTML 構造から特定の要素を抽出できる XPath サポートを提供します。

これらのライブラリはさまざまな機能と柔軟性のレベルを提供するため、Walmart.com の特定のスクレイピング ニーズに最適なものを選択できます。 スクレイピング プロジェクトにそれらを効果的に利用する方法を理解するために、ドキュメントと例を調べることを検討してください。

Walmart.comをスクレイピングする方法

ステップ 1: Walmart 製品 URL のリストを作成する

Walmart.com をスクレイピングする場合、最初のステップは製品 URL のリストを作成することです。 これは、ページごとに最大 40 個の製品を返す Walmart Search ページを利用することで実行できます。 製品 URL のリストを生成するには、次の手順に従います。

Walmart.com をスクレイピングする最初のステップは、スクレイピングする製品 URL のリストを生成する Web クローラーを設計することです。 これを行う最も簡単な方法は、40 ページあたり最大 XNUMX 個の製品を返す Walmart 検索ページを使用することです。 検索ページの URL には、カスタマイズできるいくつかのパラメーターが含まれています。

  • q は、次のような検索クエリです。 ipad.
  • sort クエリの並べ替え順序です。たとえば、 best_seller.
  • page はページ番号です。例: 1.

Walmart が返すのは最大 25 ページのみであることに注意してください。 クエリに対してさらに多くの結果が必要な場合は、検索用語をより具体的にするか、並べ替えパラメータを変更します。

応答で返された製品のリストは、ページ上の非表示の JSON データとして利用できます。 JSON BLOB を抽出するだけです。 <script id="__NEXT_DATA__" type="application/json"> タグを付けて JSON に解析します。 この JSON 応答には、探しているデータが含まれています。

以下は、25 ページすべてから指定されたキーワードのすべての製品を取得する Python スクリプトの例です。

import json bs4 からリクエストをインポート urllib.parse から BeautifulSoup をインポート import urlencode def create_walmart_product_url(product): return 'https://www.walmart.com' + product.get('canonicalUrl', '').split('?' )[0] headers={"User-Agent": "Mozilla/5.0 (iPad; Mac OS X のような CPU OS 12_2) AppleWebKit/605.1.15 (Gecko のような KHTML) Mobile/15E148"} product_url_list = [] キーワード = range(1, 26) のページの 'ipad': try: payload = {'q': キーワード、'sort': 'best_seller'、'page': ページ、'affinityOverride': 'default'} walmart_search_url = 'https ://www.walmart.com/search?」 + urlencode(ペイロード) 応答 =requests.get(walmart_search_url, headers=headers) if response.status_code == 200: html_response = response.text スープ = BeautifulSoup(html_response, "html.parser") script_tag =Soup.find("script ", {"id": "__NEXT_DATA__"}) script_tag が None でない場合: json_blob = json.loads(script_tag.get_text()) product_list = json_blob["props"]["pageProps"]["initialData"][" searchResult"]["itemStacks"][0]["items"] product_urls = [product_list 内の製品の create_walmart_product_url(product)] product_url_list.extend(product_urls) if len(product_urls) == 0: e: print として例外を除いてブレーク('エラー', e) print(product_url_list)

出力は製品 URL のリストになります。

ステップ 2: ウォルマートの商品データをスクレイピングする

Walmart Search リクエストは、製品の URL だけでなく、さらに多くの情報も返します。 製品名、価格、画像 URL、評価、レビュー数も JSON BLOB から取得できます。 必要なデータによっては、検索結果からデータを取得できるため、各商品ページをリクエストする必要がない場合があります。

リストから製品データを抽出するには、次のような関数を使用できます。

def extract_product_data(product): return { 'url': create_walmart_url(product), 'name':私が見つけた情報に基づいて、Walmart.com から製品情報を収集する Python スクリプトを次に示します。 スクリプトは製品 URL のリストを生成し、各 URL から製品データを抽出します。 Walmart の制限により、このスクリプトはクエリごとに最大 25 ページの検索結果に対してのみ機能することに注意してください。 さらに多くのデータを収集する必要がある場合は、クエリを変更するか、並べ替えパラメーターを変更する必要があります。 Python スクリプトは次のとおりです。 ```python import json importrequests from bs4 import BeautifulSoup from urllib.parse import urlencode def create_walmart_product_url(product): return 'https://www.walmart.com' + product.get('canonicalUrl', '').split('?')[0] def extract_product_data(product): return { 'url': create_walmart_product_url(product), 'name': product.get('name', ''), 'description': product.get('description', ''), 'image_url': product.get('image', ''), 'average_rated': product['評価'].get('averageRating'), 'number_reviews': product['評価'].get('numberOfReviews'), } headers={"User-Agent": "Mozilla/5.0 (iPad; Mac OS X のような CPU OS 12_2) AppleWebKit/605.1.15 (Gecko のような KHTML) Mobile/15E148"} product_url_list = [] product_data_list = [] # ウォルマート検索キーワード キーワード = 'ipad' # range(1, 5) 内のページの製品がなくなるまでウォルマート ページをループします: try: payload = {'q':キーワード、'sort': 'best_seller'、'page': ページ、'affinityOverride': 'default'} walmart_search_url = 'https://www.walmart.com/search?' + urlencode(ペイロード) 応答 =requests.get(walmart_search_url, headers=headers) if response.status_code == 200: html_response = response.text スープ = BeautifulSoup(html_response, "html.parser") script_tag =Soup.find("script ", {"id": "__NEXT_DATA__"}) script_tag が None でない場合: json_blob = json.loads(script_tag.get_text()) product_list = json_blob["props"]["pageProps"]["initialData"][" searchResult"]["itemStacks"][0]["items"] product_urls = [product_listの製品のcreate_walmart_product_url(product)] product_url_list.extend(product_urls) product_data = [product_listの製品のextract_product_data(product)] product_data_list.extend( product_data) if len(product_urls) == 0: eとして例外を除きブレーク: print('Error', e) print(product_url_list) print(product_data_list)

このスクリプトは XNUMX つのリストを出力します。 product_url_list 各製品の URL が含まれます。 product_data_list 各製品の製品データ (名前、説明、画像 URL、平均評価、レビュー数) を含む辞書が含まれます。

ウォルマートのアンチボット保護

Walmart.com をスクレイピングする場合は、ボット対策の保護対策を考慮することが不可欠です。 Walmart は、自動スクレイピングを防ぐために、CAPTCHA、レート制限、セッションベースの追跡などのさまざまな技術を採用しています。 これらの課題を克服するには、次のような戦略を採用できます。

よくある質問:よくある質問

Walmart.com のような Web サイトをスクレイピングすると、法的な懸念が生じます。 一般に公開されているデータをスクレイピングすることは一般に許容されますが、適用される法律を確実に遵守するために、ウォルマートの利用規約を確認し、法律の専門家に相談することが重要です。

Q2. Walmart.com をどのくらいの頻度でスクレイピングする必要がありますか?

スクレイピングの頻度は、プロジェクトの性質とウォルマートのポリシーによって決定する必要があります。 過剰なスクレイピングは、Walmart のサーバーに負担をかけ、サービス利用規約に違反する可能性があります。 中断やペナルティの可能性を避けるために、スクレイピング セッション間に適切な間隔を設けることを検討してください。

Q3. Walmart.com から製品レビューを収集できますか?

製品レビューをスクレイピングすると、貴重な洞察が得られます。 ただし、ユーザーのプライバシーと知的財産権を尊重し、ウォルマートのポリシーに従うことが重要です。 ウォルマートの利用規約を確認し、製品レビューをスクレイピングする際のコンプライアンスを確保するために法律の専門家に相談してください。

Q4. Walmart の Web サイト構造の変更にはどのように対処すればよいですか?

Walmart.com では、Web ページの構造に影響を与える可能性がある更新や再設計が時々行われます。 これらの変更に対処するには、スクレイピング コードを定期的に監視して適応させます。 Web サイト構造の変更に対処するためのいくつかの戦略を次に示します。

  • 堅牢なスクレイピング フレームワークを維持する: 変更に簡単に対応できる、モジュール式で柔軟なスクレイピング フレームワークを構築します。 スクレイピング ロジックを Web サイト固有のコードから分離すると、必要なときに簡単に更新できるようになります。
  • 変更を監視する: ウォルマートの Web サイトを定期的にチェックして、製品情報に使用される HTML 構造または CSS クラスに目立った変更がないかどうかを確認します。 これは手動で行うことも、変更を警告する自動監視スクリプトを実装することによって行うこともできます。
  • CSS セレクターと XPath を使用する: 特定の HTML 要素 ID またはクラスに依存する代わりに、CSS セレクターまたは XPath 式を利用してデータを抽出します。 これらの方法は、Web サイトの基礎となる構造の変更に対する復元力が高くなります。
  • エラーを適切に処理する: Web サイトの構造における予期しない変更を処理するエラー処理メカニズムを実装します。 これには、発生した問題の特定と対処に役立つフォールバック オプション、再試行ロジック、またはエラー ログが含まれる場合があります。
  • API を常に最新の状態に保つ: 利用可能な場合は、商品データにアクセスするためにウォルマートの公式 API を使用することを検討してください。 API は、開発者が使用するように特別に設計されており、頻繁に変更される傾向が少ないため、情報を取得するためのより安定した構造化された方法を提供します。

Web サイトのスクレイピングは進化するプロセスであり、時間の経過による変化に適応する必要があることに注意してください。 定期的なメンテナンスと監視は、スクレイピング コードの有効性と正確性を維持するのに役立ちます。


まとめ

Walmart.com をスクレイピングすると、さまざまな目的で貴重なデータが提供されますが、法的考慮事項と Walmart のポリシーに留意することが重要です。 このガイドで概説されている手順に従い、変更に注意を払うことで、Walmart.com を正常にスクレイピングし、プロジェクトに必要な製品データを取得できます。

会話に加わります

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *