Eコマースウェブサイトのスクレイピングガイド

このステップガイドでは、PlaywrightとBright DataのScraping Browserを使ってEコマースサイトをスクレイピングする方法を説明します。
5 分読
How to scrape ecommerce websites

目まぐるしく変化するEコマースの世界では、時代の最先端を走り続けるということは、常に競合に目を配り続けることを意味します。その方法の1つが、ウェブサイトからデータを抽出する技術であるウェブスクレイピングです。この記事は、経験豊富な開発者にも、データ抽出の世界に足を踏み入れたばかりの初心者にも、Eコマースウェブサイトのウェブスクレイピングを詳しく理解するのに役立つように構成されています。

競合分析、市場調査、価格監視、リードジェネレーション、データ主導の意思決定など、Eコマースウェブサイトのスクレイピングに興味を持つ理由はさまざまです。

このチュートリアルでは、Eコマースウェブサイトをスクレイピングする際に直面する一般的な課題と、PythonライブラリであるPlaywrightおよびBright DataのScraping Browserを使用してスクレイピングする方法について説明します。

ローカルブラウザーを使ったウェブスクレイピングの問題点


膨大な量のデータを抽出するスクレイパーを記述できるとしたらそれは素晴らしいことですが、初めてそれを行うプロセスは簡単とは言い難いものです。たとえば、ローカルブラウザを使用する場合、開発者は効率と有効性を妨げる可能性のあるさまざまな問題に直面することがよくあります。最も一般的な問題には、次のようなものがあります。

  1. IPブロッキング:ウェブサイトは多くの場合、リクエストを行うIPアドレスを追跡します。単一のIPからの異常な数のリクエストが検出された場合(ウェブスクレイピングやブルートフォースにおいて典型的)、そのIPがブロックされる可能性があります。ローカルブラウザを使用する場合、すべてのリクエストは単一のIPから送信されるため、これは重大な問題となります。
  2. レート制限:多くのウェブサイトはレート制限を実装しており、特定の期間内にIPアドレスから一定数のリクエストのみを許可します。この制限を超えると、それ以上のリクエストはブロックされるか、速度が低下し、スクレイピングプロセスが妨げられる可能性があります。
  3. プロキシの欠如:プロキシのプールがない場合、スクレイピング操作のリクエストすべては同じIPアドレスから送信されます。これにより、ウェブサイトはスクレイピング行為を検知し、ブロックしやすくなります。対照的に、プロキシのプールを使うことで、リクエストが異なるIPアドレスから送信されるようになり、検知されるリスクを軽減できます。
  4. CAPTCHAチャレンジ:ウェブサイトは、ユーザーがボットではなく人間であることを確認するためにCAPTCHAチャレンジを使用することがあります。ローカルブラウザには、これらのチャレンジを自動的に解決する機能がないことが多く、スクレイピング作業の大きな障害となっています。
  5. 動的なウェブサイトコンテンツ:最新のウェブサイトの多くは、JavaScriptを使ってコンテンツを動的に読み込みます。ローカルブラウザでは、これらのウェブサイトを正確にスクレイピングするのに苦労する可能性があります。スクレイピングを開始する前にコンテンツが完全に読み込まれていない可能性があるためです。

ローカルブラウザを使用したスクレイピングでは、これらの問題が複雑に絡み合い、ウェブスクレイピングを困難なものにしています。IPローテーションや自動CAPTCHA解決などの高度な機能がないため、スクレイピングプロセスが遅くなり、収集されるデータの質と量が低下する可能性があります。開発者がこれらの一般的な問題を認識し、効果的に回避するためのツールとテクニックを見い出すことが極めて重要です。

次のセクションでは、Bright Data Scraping Browserがどのようにこれらの問題を解決し、ウェブスクレイピングをよりスムーズで生産的なものにするかを説明します。

Bright Data Scraping Browserを使ってスクレイピングする方法


ウェブスクレイピングの世界では、Bright Dataは最先端のプロバイダーとして際立っています。Bright Dataの提供するサービスの中心には、データ抽出で直面する課題に対処するために特別に設計されたツールであるWeb Scraping Browserがあります。

Scraping Browserは、広大なレジデンシャルおよびモバイルIPプールにアクセスできるため、IPブロッキングの問題に簡単に対処できます。つまり、IPをローテーションし、オーガニックユーザーの行動をエミュレートすることで、ブロックされるリスクを大幅に減らすことができます。

同様に、Bright Dataの広範なIPプールを活用することで、Scraping Browserは複数のIPにリクエストを分散させることができ、レート制限の問題を効果的に軽減できます。さらに、Scraping Browserを使用すると、自動プロキシ管理が可能になります。これは、スクレイピングブラウザがプロキシのローテーションを処理し、手動による介入なしでスクレイピングアクティビティを継続できることを意味します。

Scraping Browserは、高度なブラウザフィンガープリント保護も提供するため、実際のユーザーを模倣できます。これにより、ウェブサイトがスクレイピング作業を検出してブロックすることが困難になります。

Scraping Browser CP

これらの機能を念頭に置いてチュートリアルに進み、Bright Data Scraping Browserを使用してEコマースウェブサイトをスクレイピングする方法を学びましょう。ここでは、プログラミング言語としてPythonを使用します。

ステップ1:新しいPythonプロジェクトをセットアップする


このチュートリアルの最初のステップは、新しいPythonプロジェクトをセットアップすることです。これがスクレイピングタスクのワークスペースとなります。お好みのテキストエディターまたは統合開発環境(IDE)をお使いください。

さらに、お使いのマシンにPythonがインストールされていることを確認してください。これを確認するには、ターミナルにpython -- versionと入力します。Pythonがインストールされていれば、このコマンドでそのバージョンが表示されます。そうでない場合は、インストールする必要があります。

Pythonがインストールされていることを確認したら、プロジェクトディレクトリを作成します。ターミナルを開き、プロジェクトを配置する場所に移動します。次に、以下のコマンドを入力します。

mkdir ecommerce-scraping   # This command creates a new directory named ecommerce-scraping.
cd ecommerce-scraping      # This command navigates into the newly created directory.
python -m venv env         # This command creates a new virtual environment in your project directory.
source env/bin/activate    # This command activates the virtual environment.

仮想環境を作成するのは良い方法です。プロジェクトとその依存関係を他のPythonプロジェクトから分離し、異なるバージョンのライブラリ間の競合を防ぐことができるからです。

ステップ2:プロジェクトにPlaywrightをインストールする


Playwrightは、ウェブブラウザの自動化とテストを実行するためのPythonライブラリです。これを使用してScraping Browserを制御します。

Playwrightをインストールするには、Pythonのパッケージインストーラであるpipを使用します。

pip install playwright

Playwrightのインストール後に、playwright installコマンドを実行する必要があります。これにより、Playwrightがブラウザを自動化するために必要なブラウザバイナリがダウンロードされます。

playwright install

ステップ3:新しいBright Dataアカウントを設定する


次に、Bright Dataアカウントが必要です。お持ちでない場合は、Bright Dataのウェブサイトにアクセスして登録してください。アカウントを取得すると、Scraping Browserインスタンスを作成および管理し、固有の認証情報にアクセスできるようになります。

ステップ4:新しいScraping Browserインスタンスを作成する

Bright Dataアカウントにアクセスできるようになったら、ログインし、Scraping Browserセクションに移動して新しいScraping Browserインスタンスを作成します。

Scraping Browserに接続する際に必要になるため、ホストIDをメモしておきます。

ステップ5:Scraping Browserインスタンスに接続する

次に、PlaywrightをScraping Browserインスタンスに接続します。Bright Dataのドキュメントには、出発点として使用できるサンプルスクリプトが掲載されています。YOUR_ZONE_USERNAMEYOUR_ZONE_PASSWORDYOUR_ZONE_HOSTは、実際のBright Data認証情報と、作成したScraping BrowserインスタンスのIDに置き換えてください:

import asyncio
from playwright.async_api import async_playwright

auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'

async def main():
    async with async_playwright() as pw:
        print('connecting');
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected');
        page = await browser.new_page()
        print('goto')
        await page.goto('https://example.com', timeout=120000)
        print('done, evaluating')
        print(await page.evaluate('()=>document.documentElement.outerHTML'))
        await browser.close()

asyncio.run(main())

このファイルをmain.pyとしてプロジェクトディレクトリに保存します。次に、以下のようにスクリプトを実行します。

python main.py

このスクリプトは、Chromiumブラウザの新しいインスタンスを開始し、指定したURLに移動します。次に、ウェブページのコンテンツを出力して、ブラウザを閉じます。

これで、Scraping Browserインスタンスに接続できることを確認できました。これは基本スクリプトなので、コードをすばやく確認しておきましょう。

  • import asyncio, async_playwrightはこのスクリプトに必要なインポートです。asyncioはコルーチンを使用してシングルスレッド同時実行コードを記述するためのライブラリで、async_playwrightはPlaywrightライブラリの非同期APIです。
  • auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'は、ゾーンのユーザー名とパスワードを利用して、Bright Data Scraping Browserの認証を設定します。
  • browser_url = f'wss ://{auth}@YOUR_ZONE_HOSTは、Bright Data Scraping Browserに接続するWebSocket URLを構築します。
  • browser = await pw.chromium.connect_over_cdp(browser_url)は、Chromiumブラウザを使用してBright Data Scraping Browserに接続します。awaitキーワードは、接続が確立されるまで関数の実行を一時停止します。
  • await page.goto('https://example.com', timeout=120000)は、指定されたURLにページを移動します。timeoutパラメータは、エラーをスローする前にナビゲーションが完了するまでの待機時間を指定します。
  • print(await page.evaluate('()=>document.documentElement.outerHTML'))は、ページのコンテキストでJavaScriptコードを評価し、結果を出力します。この場合、JavaScriptコードはページ全体のHTMLコンテンツを返します。

ステップ6:Eコマースウェブサイトをスクレイピングする

Scraping Browserインスタンスに接続し、スクレイピングを開始する準備が整いました。このチュートリアルでは、スクレイピングが許可されているサンドボックスのEコマースウェブサイトである、Books to Scrapeをスクレイピングします。

main.pyファイルを開き、内容を以下のコードに置き換えてから、ターミナルでこのスクリプトを実行します。

import asyncio
from playwright.async_api import async_playwright

auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'

async def main():
    async with async_playwright() as pw:
        print('connecting');
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected');
        page = await browser.new_page()
        print('goto')
        await page.goto('https://books.toscrape.com', timeout=120000)
        print('done, evaluating')
        print(await page.evaluate('()=>document.documentElement.outerHTML'))
        await browser.close()

asyncio.run(main())

Books to Scrapeのホームページの内容が出力されます。この時点では、スクリプトを実行しても、ターゲットウェブサイトのHTMLコンテンツ全体を取得できるだけで、役に立つものは何も返されません。

ステップ7:構造化された情報を抽出する


このチュートリアルをもう少し役立つものにするために、構造化データをいくつか抽出してみましょう。このプロセスは、どんなデータに関心があるかによって異なりますが、この例ではホームページ上の書籍名と価格を抽出します。

まず、books.toscrape.comのホームページを調べ、書籍名と価格を含むHTML要素を特定します。書籍名は<article class= "product_pod">内の<h3>タグの中にあり、価格は同じ<article>タグ内の<p class= "price_color">タグの中にあります。

この情報を抽出するためにスクリプトを変更する方法を以下に示します。

from playwright import sync_playwright

auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'

async def main():
    async with async_playwright() as pw:
        print('connecting')
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('goto')
        await page.goto('https://books.toscrape.com', timeout=120000)
        print('done, evaluating')
        
        # Find all the books in the article elements
        books = await page.query_selector_all('article.product_pod')

        # Extract and print each book details in a loop
        async def get_book_details(book):
            # Extract and print book name and price
            book_name_element = await book.query_selector('h3 > a')
            book_name = await book_name_element.get_attribute('title')
            book_price_element = await book.query_selector('div.product_price > p.price_color')
            book_price = await book_price_element.inner_text()
            print(f'{book_name}: {book_price}')

        # Use asyncio.gather() to execute all async calls concurrently
        await asyncio.gather(*(get_book_details(book) for book in books))

        await browser.close()

asyncio.run(main())

このスクリプトを実行すると、書籍名とその価格のリストがターミナルに表示されます。以下のようになります。

スクリプト実行後のコード

これは非常に単純な例ですが、PlaywrightとBright Dataを使用して、ウェブサイトから構造化データを抽出する方法を示しています。このスクリプトを応用して、他のページやウェブサイトからさまざまな種類のデータをスクレイピングできます。

次に、さらに一歩進んで、スクレイピングされたデータを含むCSVファイルを生成しましょう。

ステップ8:スクレイピングしたデータをCSVファイルに保存する


スクレイピングしたデータをCSVファイルに保存するには、csvモジュールをインポートし、main()関数内で新しいCSVファイルを作成する必要があります。その後、get_book_details()関数でスクレイピングしたデータをCSVファイルに書き込むことができます。

main.pyファイルを開き、以下のコードを追加します。

import asyncio
import csv
from playwright.async_api import async_playwright

auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'

async def main():
    async with async_playwright() as pw:
        print('connecting')
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('goto')
        await page.goto('https://books.toscrape.com', timeout=120000)
        print('done, evaluating')

        # Find all the books in the article elements
        books = await page.query_selector_all('article.product_pod')

        async def get_book_details(book):
            # Extract book name and price
            book_name_element = await book.query_selector('h3 > a')
            book_name = await book_name_element.get_attribute('title')
            book_price_element = await book.query_selector('div.product_price > p.price_color')
            book_price = await book_price_element.inner_text()

            return book_name, book_price

        # Use asyncio.gather() to execute all async calls concurrently
        book_details = await asyncio.gather(*(get_book_details(book) for book in books))

        # Write book details to a CSV file
        with open('books.csv', 'w', newline='') as f:
            writer = csv.writer(f)
            writer.writerow(['Book Name', 'Price'])  # Write header
            writer.writerows(book_details)  # Write book details

        await browser.close()

asyncio.run(main())

このスクリプトを実行すると、プロジェクトディレクトリにbooks.csvという新しいファイルができます。このファイルを開くと、以下のようにスクレイピングされたデータをCSV形式で見ることができます。

まとめ

このチュートリアルでは、PlaywrightとBright Dataを使用して、Eコマースウェブサイトからデータをスクレイピングする方法を説明しました。このチュートリアルは、PlaywrightとBright Data Scraping Browserでできることのほんの一部を紹介したに過ぎません。Bright Data Scraping Browserは、高度なボット対策検出技術を使用するウェブサイトからのデータ収集をロック解除することに焦点を当てたプロキシブラウザソリューションです。この記事で取り上げた基本事項を組み合わせてより高度なワークフローを作り上げることで、プライスマッチ、市場分析、リードジェネレーションなどを自動化できます。

バックグラウンドで、Bright Dataは完全なプロキシインフラストラクチャを使用して、何百万ものIPプールを経由してリクエストをルーティングします。これにより、ブロックされたり禁止されたりすることなく、ウェブサイトからデータをスクレイピングできます。無料トライアルにサインアップし、今すぐScraping Browserをお試しください!

Eコマースウェブサイトのスクレイピングは省略して、データだけを取得したいですか?Eコマースデータセットをご購入ください

あなたは下記にもご興味がおありかもしれません

web scraping with claude blog image
ウェブデータ

2025年のクロードによるウェブスクレイピング

Pythonを使ってWebスクレイピングを自動化し、構造化データを楽に抽出するClaude AIの使い方を学ぶ。
18 分読
Building AI-Ready Vector Datasets for LLMs blog image
AI

LLMのためのAI対応ベクトルデータセット構築:Bright Data、Google Gemini、Pineconeを使ったガイド

大規模言語モデル(LLM)は、私たちが情報にアクセスし、インテリジェントなアプリケーションを構築する方法を変革しています。LLMの可能性を最大限に引き出すには、特にドメイン固有の知識や独自のデータを使用する場合、高品質で構造化されたベクトルデータセットを作成することが重要です。LLMの性能と精度は、入力データの品質に直接結びついています。準備不足のデータセットは劣悪な結果をもたらす可能性があり、一方、十分にキュレーションされたデータセットはLLMを真のドメイン・エキスパートに変えることができます。 このガイドでは、AIに対応したベクターデータセットを生成するための自動パイプラインの構築方法を順を追って説明する。 課題:LLMのためのデータ収集と準備 LLMは膨大な汎用テキストコーパスで学習されますが、商品関連のクエリへの回答、業界ニュースの分析、顧客フィードバックの解釈など、特定のタスクやドメインに適用すると、不足することがよくあります。LLMを真に役立てるには、ユースケースに合わせた高品質のデータが必要です。 このデータは通常、ウェブ上に分散していたり、複雑なサイト構造の背後に隠されていたり、ボット対策によって保護されていたりする。 当社の自動ワークフローは、データセット作成の最も困難な部分を処理する合理化されたパイプラインでこれを解決します: コア技術の概要 パイプラインを構築する前に、関連するコアテクノロジーと、それぞれがワークフローをどのようにサポートしているかを簡単に見ておこう。 ブライトデータスケーラブルなウェブデータ収集 AIに対応したベクターデータセットを作成するための最初のステップは、関連性のある高品質なソースデータを収集することです。ナレッジベースやドキュメンテーションのような内部システムから得られるものもあるが、大部分は公共のウェブから得られることが多い。 しかし、最近のウェブサイトは、CAPTCHA、IPレート制限、ブラウザフィンガープリントなどの高度なボット対策メカニズムを使用しているため、大規模なスクレイピングは困難である。 Bright Dataは、データ収集の複雑さを抽象化するWeb Unlocker APIでこの課題を解決します。プロキシのローテーション、CAPTCHAの解決、ブラウザのエミュレーションを自動的に処理するため、データへのアクセス方法ではなく、データに集中することができます。 Google Gemini: インテリジェント・コンテンツ・トランスフォーメーション Geminiは、Googleによって開発された強力なマルチモーダルAIモデルのファミリーであり、様々なタイプのコンテンツを理解し処理することに優れている。私たちのデータ抽出パイプラインにおいて、Geminiは3つの重要な機能を果たします: このAIを活用したアプローチは、特に以下のような使用例において、脆弱なCSSセレクタや壊れやすい正規表現に依存する従来の方法よりも大きな利点をもたらす: AIがデータ抽出プロセスにどのような変化をもたらしているかについては、Using AI for Web Scrapingをご覧ください。スクレイピングのワークフローにGeminiを実装するための実践的なチュートリアルをお探しの場合は、包括的なガイドをご覧ください:GeminiによるWebスクレイピングをご覧ください。 文の変形意味埋め込み文の生成 エンベッディングは、高次元空間におけるテキスト(または他のデータタイプ)の密なベクトル表現である。これらのベクトルは意味的な意味を捉え、コサイン類似度やユークリッド距離のようなメトリクスを用いて測定される、類似したテキスト片を近接したベクトルで表現することを可能にする。この特性は、セマンティック検索、クラスタリング、検索拡張生成(RAG)のようなアプリケーションで重要である。 Sentence Transformersライブラリは、高品質の文や段落の埋め込みを生成するための使いやすいインターフェースを提供する。Hugging Face Transformersの上に構築され、意味タスクのために微調整された幅広い事前学習済みモデルをサポートしています。 このエコシステムで最も人気があり、効果的なモデルの1つがオールMiniLM-L6-v2である: より大きなモデルはより微妙なエンベディングを提供するかもしれないが、all-MiniLM-L6-v2は性能、効率、コストの間で非常に優れたバランスを提供する。その384次元ベクトルは ほとんどの実用的なユースケース、特に初期段階の開発やリソースに制約のある環境では、このモデルで十分すぎる。エッジケースにおける精度のわずかな低下は、通常、スピードとスケーラビリティの大幅な向上によって相殺されます。そのため、AIアプリケーションの最初のイテレーションを構築する場合や、控えめなインフラストラクチャでパフォーマンスを最適化する場合は、all-MiniLM-L6-v2を使用することをお勧めします。 Pineconeベクトル埋め込み画像の保存と検索 テキストがベクトル埋め込みデータに変換されると、それを効率的に保存、管理、照会するための専用のデータベースが必要になります。従来のデータベースはこのために設計されていません。ベクトル・データベースは、埋め込みデータの高次元の性質を扱うために特別に設計されており、RAGパイプライン、セマンティック検索、パーソナライゼーション、その他のAI駆動型アプリケーションに不可欠なリアルタイムの類似性検索を可能にします。 Pineconeは、開発者フレンドリーなインターフェイス、低レイテンシの検索パフォーマンス、完全に管理されたインフラストラクチャで知られる人気のベクトルデータベースです。ベクトル検索インフラストラクチャの複雑さを抽象化することで、複雑なベクトルインデックスと検索を効率的に管理します。主なコンポーネントは以下の通りです: Pineconeは2つのデプロイメントアーキテクチャを提供する:ServerlessとPod-Based です。ほとんどのユースケース、特に開始時や動的な負荷に対処する場合は、シンプルさとコスト効率からサーバーレスが推奨されます。 セットアップと前提条件 パイプラインを構築する前に、以下のコンポーネントが適切に設定されていることを確認する。 前提条件 各APIキーの生成方法については、以下のツール固有の設定セクションを参照してください。 必要なライブラリのインストール このプロジェクトのコアとなるPythonライブラリをインストールする: これらのライブラリーは提供している: 環境変数の設定 プロジェクトのルート・ディレクトリに.envファイルを作成し、APIキーを追加する: ブライトデータ設定 Bright DataのWeb Unlockerを使用するには: 実装例と統合コードについては、Web Unlocker GitHub […]
6 分読
AI

LLMにおけるスーパーバイズド・ファインチューニングとは?

このPythonガイドでは、概念、ツール、ワークフロー、そしてAIプロジェクトを向上させる実践的な例を取り上げています。
7 分読