コンテンツにスキップ

Python を使用して Amazon をスクレイピングするための究極ガイド (2023)

最大の電子商取引プラットフォームの XNUMX つである Amazon からデータをスクレイピングすると、貴重な洞察が得られます。 価格の比較、顧客レビューの分析、製品の在庫状況の追跡など、Web スクレイピングは便利なツールです。 このガイドでは、Amazon をスクレイピングするための詳細な手順と Python コードの例を説明します。

ウェブスクレイピングの倫理

本題に入る前に、Web サイトのサーバーへの要求を最小限に抑えるために、スクレイピングは責任を持って実行する必要があることに注意することが重要です。 これを行う XNUMX つの方法は、名前、価格、画像 URL、評価、レビュー数などの基本的な商品データを抽出できる Amazon 検索ページに焦点を当てることです。 このアプローチにより、Amazon に対して行う必要のあるリクエストの数が大幅に減り、スクレーパーの実行が高速化され、コストが安くなります。.

Python Webスクレイピング ライブラリ

Python には Web スクレイピング用のライブラリが多数用意されており、適切なライブラリを選択するのは、特定のニーズと Python の快適さのレベルによって異なります。 最も一般的に使用されるライブラリのいくつかを次に示します。

  1. つながり申請: HTTP リクエストを作成するための人気のある Python ライブラリ。 シンプルな API の背後でリクエストを行う複雑さを抽象化し、GET、POST などのさまざまなメソッドを使用して HTTP/1.1 リクエストを送信できるようにします。
  2. 美しいスープ: HTML および XML ドキュメントを解析し、データを抽出するために使用されます。 ページのソース コードから解析ツリーを作成し、階層的で読みやすい方法でデータを抽出するために使用できます。
  3. スクラップ: Web スクレイピング専用に設計されたオープンソースの Python フレームワーク。 これは、幅広いスクレイピング タスクを処理でき、大規模なデータ セットをスクレイピングできる多用途のフレームワークです。
  4. Selenium : プログラムを通じて Web ブラウザを制御するための強力なツール。 JavaScript で生成されたコンテンツを含むあらゆる種類の Web サイト コンテンツを処理できるため、Web スクレイピングに非常に便利です。 また、クリックやスクロールなどのユーザー操作も可能になります。
  5. 小包: XPath および CSS セレクターを使用して HTML および XML からデータを抽出するために使用されます。 lxml ライブラリの上に構築されているため、柔軟で使いやすくなっています。

Amazon 検索ページからの商品データのスクレイピング

Amazon をスクレイピングする最初のステップは、検索ページからデータを抽出することです。 このタスクには、Python リクエストおよびパーセル ライブラリを使用できます。 以下は、特定のキーワード (例: 「iPad」) に対して利用可能なすべての Amazon 検索ページから商品データをスクレイピングするスクリプトの例です。

parsel からリクエストをインポート urllib.parse からセレクターをインポート import urljoin keyword_list = ['ipad'] product_overview_data = [] キーワードリストのキーワード: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] for url_list: try: response =requests.get(url) if response.status_code == 200: sel = Selector(text=response.text) # 製品ページの抽出 search_products = sel.css("div search_products の製品の .s-result-item[data-component-type=s-search-result]"):relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 else なし product_url = urljoin('https://www.amazon.com/',relative_url).split( "?")[0] product_overview_data.append( { "keyword": キーワード、"asin": asin、"url": product_url、"ad": product_url に "/slredirect/" がある場合は True、それ以外の場合は False、"title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": 製品。 css(".a-price[data-a-size=b] .a-offscreen::text").get(), "評価": (product.css("span[aria-label~=stars]: :attr "評価数": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # URL に "&page=1" がある場合、すべてのページを取得: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() av​​ailable_pages のページ: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) e: print("Error", e) としての例外を除く

このスクリプトは、製品データの配列を収集します。各製品データは、次のキーを持つ辞書として表されます。

  • keyword: 使用した検索キーワード (例: 「iPad」)
  • asin: 製品固有の Amazon 標準識別番号
  • url:商品のURL
  • ad: 商品が広告であるかどうかを示すブール値
  • title:商品のタイトル
  • price:商品の価格
  • real_price: 割引前の製品の元の価格
  • rating:商品の評価
  • rating_count:商品が受けた評価の数
  • thumbnail_url:商品のサムネイル画像のURL

また、スクリプトは、検索キーワードで利用可能なすべてのページを識別し、それらを url_list スクレイピング用【9†出典】。

Amazonの商品ページから商品データをスクレイピングする

Amazon 製品 URL のリストを取得したら、個々の Amazon 製品ページからすべての製品データをスクレイピングできます。 これを行うために Python リクエストと Parsel ライブラリを使用するスクリプトの例を次に示します。

import re import request from parsel import Selector from urllib.parse import urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] product_urls の product_url の場合: try: response = request.get(product_url) if response.status_code == 200: sel = Selector(text=response.text) image_data = json.loads(re.findall) (r"colorImages':.*'initial':\s*(\[.+?\])},\n",response.text)[0])variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() sel.css("#feature-bullets li ::text").getall( )] 価格 = sel.css('.a-price scan[aria-hidden="true"] ::text').get("") 価格でない場合:price = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price":価格, "星": sel.css("i[data-hook=平均星評価] ::text").get("").strip(), "評価数": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data":variant_data, }) e としての例外を除く: print("エラー",e)

このスクリプトは、各製品が次のキーを持つ辞書として表される製品データの配列を収集します。

  • name:商品名
  • price:商品の価格
  • stars: 製品の星評価
  • rating_count:商品に寄せられたレビューの総数
  • feature_bullets: 製品の機能箇条書きのリスト
  • images:商品の高解像度画像一覧
  • variant_data: 製品のバリエーションに関するデータ (例: 利用可能なさまざまな色やサイズ)

このスクリプトは、特定のレイアウトの製品ページからデータを抽出するように設計されていることは注目に値します。 Amazon が商品ページのレイアウトを変更した場合、スクリプトの更新が必要になる場合があります【11†出典】。

その他の考慮事項

上記のスクリプトは Amazon をスクレイピングするための開始点を提供しますが、完全で堅牢なスクレイピング ソリューションを実現するには追加の考慮事項があります。

1. 動的コンテンツの処理

一部の Amazon 商品ページでは動的コンテンツが使用されており、JavaScript を読み込む必要があります。 上記の方法でこれらのページをスクレイピングしようとすると、必要なデータの一部が欠落していることが判明する可能性があります。 このような場合、Selenium や Puppeteer など、JavaScript をレンダリングできるツールを使用する必要があります。

2. ロボットの尊重.txt

Amazonの robots.txt このファイルは、Web クローラーにどのページへのアクセスを許可するかを伝えます。 このファイルには法的拘束力はありませんが、無視すると IP アドレスが禁止される可能性があります。 尊重するのが最善です robots.txt ファイルを削除して、潜在的な問題を回避します。

3.レート制限

Amazon は、一定期間内に実行できるリクエストの数を制限する場合があります。 あまりにも多くのリクエストをあまりに早く行うと、Amazon があなたの IP アドレスを禁止する可能性があります。 Amazonのプロキシ。 これを回避するには、リクエストを調整するなどのテクニックを使用できます。 IP アドレスのローテーション.

4。 倫理的配慮

Web スクレイピングは Web サイトのサーバーに大きな負荷をかける可能性があるため、責任を持ってスクレイピングを行うことが重要です。 より少ないページから必要なデータを取得できるのであれば、そうするほうがより倫理的です。 たとえば、基本的な商品データ (名前、価格、画像 URL、評価、レビュー数など) のみが必要な場合は、商品ページではなく検索ページからこのデータを取得し、必要なリクエストの数を減らすことができます。 20倍にします。


結論として、Web スクレイピングは Amazon などの Web サイトからデータを抽出するための強力なツールとなり得ますが、Web サイトの利用規約とサーバーに課す要求を考慮して、これらのテクニックを責任を持って使用することが重要です。

タグ:

参加する

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