Web スクレイピングの領域では、無限スクロールを使用する Web ページにアクセスしてデータを抽出することは、開発者にとって課題となる場合があります。多くの Web サイトでは、この手法を使用してより多くのコンテンツを動的に読み込むため、利用可能なすべてのデータを一度に収集することが困難になります。良い解決策には、[さらに読み込む] ボタンをクリックして追加のコンテンツを表示するなど、ユーザーのアクションをシミュレートすることが含まれます。
このチュートリアルでは、Zenrows オープンソース Web スクレーパーを利用して、無限スクロールでページから商品データをスクレイピングする方法について詳しく説明します。Web ページのコンテンツにアクセスするスクレイパー ボットを構築し、Zenrows を使用してさらに多くの商品を生成します。 [さらに読み込む] ボタンをクリックしてページを開き、無限スクロールをシミュレートします。
このチュートリアルに従うには、以下が必要です:
Zenrows アカウントにサインアップし、前提条件を満たしたら、次のステップは Web ページからコンテンツにアクセスすることです。このチュートリアルでは、このページ https://www.scrapingcourse.com/button-click を使用します。
また、ZenRows SDK を使用して動的ページをスクレイピングし、さまざまなレンダリングやボット対策も処理します。始めましょう:
必要なライブラリをインストールします:
任意の IDE のターミナルを開き、コードを実行して ZenRows Python SDK をインストールします。
pip install zenrows python-dotenv
ダッシュボードに移動し、下の画像のように画面の右上隅にある 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 ファイルにエクスポートする方法を学習します。
まず、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 つの製品を特定できます。各製品ページにアクセスして、製品の説明や 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 スクレイピング ツールの使用方法について詳しくは、ブログの次の記事をご覧ください。
以上がZenRows Web Scraper を使用して無限スクロール Web サイト用の Product Scraper を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。