ホームページ  >  記事  >  バックエンド開発  >  ZenRows Web Scraper を使用して無限スクロール Web サイト用の Product Scraper を構築する方法

ZenRows Web Scraper を使用して無限スクロール Web サイト用の Product Scraper を構築する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-22 15:17:19740ブラウズ

How to Build a Product Scraper for Infinite Scroll Websites using ZenRows Web Scraper

Web スクレイピングの領域では、無限スクロールを使用する Web ページにアクセスしてデータを抽出することは、開発者にとって課題となる場合があります。多くの Web サイトでは、この手法を使用してより多くのコンテンツを動的に読み込むため、利用可能なすべてのデータを一度に収集することが困難になります。良い解決策には、[さらに読み込む] ボタンをクリックして追加のコンテンツを表示するなど、ユーザーのアクションをシミュレートすることが含まれます。
このチュートリアルでは、Zenrows オープンソース Web スクレーパーを利用して、無限スクロールでページから商品データをスクレイピングする方法について詳しく説明します。Web ページのコンテンツにアクセスするスクレイパー ボットを構築し、Zenrows を使用してさらに多くの商品を生成します。 [さらに読み込む] ボタンをクリックしてページを開き、無限スクロールをシミュレートします。

前提条件

このチュートリアルに従うには、以下が必要です:

  • Python: マシン上に Python がセットアップされている必要があります。そうでない場合は、ここでインストールできます。
  • Web スクレイピングの基礎: Web スクレイピングがどのように機能するかをしっかりと理解する必要があります。
  • ZenRows SDK: ZenRows サービスを使用して、スクレイピング対策対策をバイパスし、動的コンテンツのスクレイピングを簡素化します。ここから無料の ZenRows アカウントにサインアップできます。

コンテンツへのアクセスの取得

Zenrows アカウントにサインアップし、前提条件を満たしたら、次のステップは Web ページからコンテンツにアクセスすることです。このチュートリアルでは、このページ https://www.scrapingcourse.com/button-click を使用します。

また、ZenRows SDK を使用して動的ページをスクレイピングし、さまざまなレンダリングやボット対策も処理します。始めましょう:

必要なライブラリをインストールします:
任意の IDE のターミナルを開き、コードを実行して ZenRows Python SDK をインストールします。

pip install zenrows python-dotenv

API のセットアップ

ダッシュボードに移動し、下の画像のように画面の右上隅にある API キーをコピーします。

次に、ページ app.py と .env を作成し、以下のコードを app.py ファイルに追加します。そして、API キーを .env ファイルの変数 API_KEY に追加します。

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

上記のコードは、API キーを使用して Zenrow SDK を開始します。スクレイピングするWebページのURL変数を設定し、必要なパラメータのbase_params変数を確立します。次のコマンドを使用してスクレイパーを実行できます:

python app.py

これにより、現在のページの商品のみを含むページの HTML 表現が提供されます。
.

いつでもこれをさらに一歩進めることができます。

さらに製品を読み込む

スクレイパーを強化するには、追加パラメータを実装して、Web ページの下部にある [さらに読み込む] ボタンを操作して、より多くの製品を読み込むことができます。

まずインポートを変更して必要なパッケージを含め、製品の応答をフィルターする parse_products 関数を追加します。

pip install zenrows python-dotenv

次に、指定された制限 (max_products) まで複数のページから製品情報を継続的に収集する while ループを作成します。このチュートリアルでは制限を 50 に設定します:

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

このループは、指定された制限に達するまで、[さらに読み込む] ボタンのクリックをシミュレートすることによって製品を廃棄し続けます。
製品情報を解析中
最後に、前のステップで収集した製品情報を解析できます。各製品について、製品名、画像リンク、価格、製品ページの URL を抽出します。次のように、すべての製品の合計価格を計算し、結果を印刷することもできます。

python app.py

CSV ファイルへの解析

回答を解析して CSV ファイルにエクスポートしたい場合は、次のいくつかの手順で、収集した製品情報を取得し、それを CSV ファイルにエクスポートする方法を学習します。

データを保存するためのスクリプトの変更

まず、Python の組み込み CSV モジュールを使用して製品データを保存する必要があります。 この場合、各製品には、name、image_link、price、product_url の 4 つの主要な属性があります。

これらを CSV のヘッダーとして使用し、スクレイピングされた製品のリストをループして、各製品を CSV ファイルの行として書き込むことができます。

import re
import json
import time

def parse_products(response_json):
    try:
        data = json.loads(response_json)
        md_content = data.get('md', '')
        pattern = r'\[!\[([^\]]+)\]\(([^\)]+)\)\*\n([^\\n]+)\*\n\*\n$(\d+)\]\(([^\)]+)\)'
        matches = re.findall(pattern, md_content)

        products = []
        for match in matches:
            product = {
                'name': match[0],
                'image_link': match[1],
                'price': int(match[3]),
                'product_url': match[4]
            }
            products.append(product)

        return products
    except json.JSONDecodeError:
        print("Error: Unable to parse JSON response")
        print("Response content:", response_json[:500])
        return []
    except Exception as e:
        print(f"Error parsing products: {str(e)}")
        return []

# Zenrow SDK code here

データをスクレイピングした後、save_to_csv(all_products) 関数を呼び出して、products.csv という名前の CSV ファイルにデータを保存します。

スクレイピングプロセスが完了したら、コマンドを実行してデータを CSV ファイルに自動的に保存します。

# Zenrow SDK code goes here

max_products = 50
all_products = []
page = 1

while len(all_products) < max_products:
    print(f"Scraping page {page}...")

    # Update parameters for each request
    params = base_params.copy()
    js_instructions = [{"click": "#load-more-btn"} for _ in range(page)]
    js_instructions.append({"wait": 5000})
    params["js_instructions"] = json.dumps(js_instructions)

    try:
        # Send the GET request to ZenRows
        response = client.get(url, params=params)

        # Parse the response JSON
        new_products = parse_products(response.text)

        if not new_products:
            print("No more products found. Stopping.")
            break

        all_products.extend(new_products)
        print(f"Found {len(new_products)} products on this page.")
        print(f"Total products so far: {len(all_products)}")

        page += 1

        # Add a delay to avoid overwhelming the server
        time.sleep(2)

    except Exception as e:
        print(f"Error occurred: {str(e)}")
        break

最も価格の高い 5 つの製品を特定する

すべての製品が構造化された形式になったので、さらに一歩進んで、最も価格の高い 5 つの製品を特定できます。各製品ページにアクセスして、製品の説明や SKU などの追加の詳細を抽出する必要があります。コード。

価格による製品の並べ替え: Python のsorted() 関数を使用すると、製品リストを価格の降順で並べ替え、上位 5 つの製品を取得できます。

requests.get() 関数を使用して各ページにアクセスし、それぞれの商品データを取得する必要があります。応答から、製品の説明と SKU コードを抽出できます。
最後のステップの CSV ファイルを更新して、追加の詳細を含めることもできます。

これを実現するコードは次のとおりです。

# Updated Params and while loop code goes here
# Calculate the total price of all products
total_sum = sum(product['price'] for product in all_products)

print("\nAll products:")
for product in all_products:
    print(product)

# Print the total sum of the product prices
print(f"\nTotal number of products: {len(all_products)}")
print(f"Total sum of product prices: ${total_sum}")

スクレイピング後、最高価格の製品を特定できるようになりました。

pip install zenrows python-dotenv

追加情報を取得した後、CSV ファイルを変更するか、これらの詳細を含めて新しいファイルを作成できます。

完全なコード

完全な app.py ファイルは次のようになります。

# Import ZenRows SDK
from zenrows import ZenRowsClient
from dotenv import load_dotenv
import os

# Load environment variables
load_dotenv()

# Initialize ZenRows client with your API key
client = ZenRowsClient(os.getenv("API_KEY"))

# URL of the page you want to scrape
url = "https://www.scrapingcourse.com/button-click"

# Set up initial parameters for JavaScript rendering and interaction
base_params = {
    "js_render": "true",
    "json_response": "true",
    "premium_proxy": "true",
    "markdown_response": "true"
}

成功した応答は次のようになります。

python app.py

GitHub で完全なコードベースを確認してください。

結論

このチュートリアルでは、[さらに読み込む] ボタンを使用して無限スクロールする Web ページから商品をスクレイピングする方法を学びました。概要を示した手順に従うことで、貴重な製品情報を抽出し、ZenRows を使用したスクレイピング技術を強化できます。
Zenrow Web スクレイピング ツールの使用方法について詳しくは、ブログの次の記事をご覧ください。

  • PHP で HTML を解析する方法
  • Web スクレイピングに Hrequests を使用する方法
  • Ruby で Playwright を使用する方法 こちらは、Zenrows Web スクレイピング ツールを使用するノーコード アプローチに関する簡単なビデオです。

以上がZenRows Web Scraper を使用して無限スクロール Web サイト用の Product Scraper を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。