ホームページ > バックエンド開発 > Python チュートリアル > &#もっと読み込む&# ボタンを使用して無限スクロール ページをスクレイピングする: ステップバイステップ ガイド

&#もっと読み込む&# ボタンを使用して無限スクロール ページをスクレイピングする: ステップバイステップ ガイド

Patricia Arquette
リリース: 2025-01-13 18:09:43
オリジナル
828 人が閲覧しました

動的 Web ページからデータをロードしようとすると、スクレイパーがスタックしていませんか?無限スクロールや煩わしい「さらに読み込む」ボタンにイライラしていませんか?

あなたは一人ではありません。現在、多くの Web サイトがユーザー エクスペリエンスを向上させるためにこれらのデザインを実装していますが、Web スクレーパーにとっては困難な場合があります。

このチュートリアルでは、もっと読み込む ボタンを使用してデモ ページをスクレイピングするための初心者向けのチュートリアルを説明します。ターゲット Web ページは次のようになります:

Demo web page for scraping

最後までに、次の方法を学びます:

  • Web スクレイピング用に Selenium をセットアップします。
  • 「さらに読み込む」ボタンの操作を自動化します。
  • 名前、価格、リンクなどの製品データを抽出します。

飛び込んでみましょう!

ステップ 1: 前提条件

実際に始める前に、次の前提条件を確認してください:

  • Python がインストールされました: セットアップ中の pip を含め、最新の Python バージョンを python.org からダウンロードしてインストールします。
  • 基礎知識: Web スクレイピングの概念、Python プログラミング、リクエスト、BeautifulSoup、Selenium などのライブラリの操作に精通していること。

必要なライブラリ:

  • リクエスト: HTTP リクエストの送信用。
  • BeautifulSoup: HTML コンテンツを解析します。
  • Selenium: ブラウザーでのボタンのクリックなどのユーザー操作をシミュレートします。

ターミナルで次のコマンドを使用して、これらのライブラリをインストールできます:

pip install requests beautifulsoup4 selenium
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Selenium を使用する前に、ブラウザに一致する Web ドライバーをインストールする必要があります。このチュートリアルでは、Google Chrome と ChromeDriver を使用します。ただし、Firefox や Edge などの他のブラウザでも同様の手順に従うことができます。

Web ドライバーをインストールします

  1. ブラウザのバージョンを確認してください:
  2. Google Chrome を開き、ヘルプ > に移動します。 Chrome のバージョンを確認するには、3 点メニューから Google Chrome について を選択してください。

  3. ChromeDriver をダウンロード:

  4. ChromeDriver のダウンロード ページにアクセスします。

  5. Chrome のバージョンと一致するドライバーのバージョンをダウンロードします。

  6. ChromeDriver をシステムのパスに追加します:
    ダウンロードしたファイルを解凍し、/usr/local/bin (Mac/Linux) または C:WindowsSystem32 (Windows) などのディレクトリに配置します。

インストールの確認

プロジェクト ディレクトリ内の Python ファイル scraper.py を初期化し、次のコード スニペットを実行してすべてが正しく設定されていることをテストします。

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ターミナルで次のコマンドを実行すると、上記のファイル コードを実行できます。

pip install requests beautifulsoup4 selenium
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードがエラーなく実行されると、ブラウザ インターフェイスが起動し、以下に示すデモ ページの URL が開きます。

Demo Page in Selenium Browser Instance

Selenium は HTML を抽出し、ページ タイトルを出力します。次のような出力が表示されます -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これにより、Selenium を使用できることが確認されます。すべての要件がインストールされ、使用できる状態になったら、デモ ページのコンテンツへのアクセスを開始できます。

ステップ 2: コンテンツへのアクセスを取得する

最初のステップは、ページの初期コンテンツを取得することです。これにより、ページの HTML のベースライン スナップショットが得られます。これは、接続を確認し、スクレイピング プロセスの有効な開始点を確保するのに役立ちます。

Python の Requests ライブラリを使用して GET リクエストを送信することで、ページ URL の HTML コンテンツを取得します。コードは次のとおりです:

python scraper.py
ログイン後にコピー
ログイン後にコピー

上記のコードは、最初の 12 個の商品のデータを含む生の HTML を出力します。

この HTML のクイック プレビューにより、リクエストが成功し、有効なデータを操作していることが確認されます。

ステップ 3: さらに製品をロードする

残りの製品にアクセスするには、利用可能な製品がなくなるまで、ページ上の [さらに読み込む] ボタンをプログラム的にクリックする必要があります。この操作には JavaScript が含まれるため、Selenium を使用してボタンのクリックをシミュレートします。

コードを記述する前に、ページを調べて以下を見つけてみましょう。

  • 「さらに読み込む」 ボタン セレクター (load-more-btn)。
  • 製品の詳細を保持する div (product-item)。

さらに多くの製品を読み込むことですべての製品を取得し、次のコードを実行することでより大きなデータセットを取得できます。

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com
ログイン後にコピー
ログイン後にコピー

このコードはブラウザを開き、ページに移動し、「さらに読み込む」ボタンと対話します。更新された HTML には、より多くの商品データが含まれており、抽出されます。

このコードを実行するたびに Selenium でブラウザを開いたくない場合は、ヘッドレス ブラウザ機能も提供されます。ヘッドレス ブラウザには、実際の Web ブラウザのすべての機能が備わっていますが、グラフィカル ユーザー インターフェイス (GUI) はありません。

Selenium で Chrome のヘッドレス モードを有効にするには、次のように ChromeOptions オブジェクトを定義し、それを WebDriver Chrome コンストラクターに渡します。

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")
ログイン後にコピー
ログイン後にコピー

上記のコードを実行すると、Selenium はヘッドレス Chrome インスタンスを起動するため、Chrome ウィンドウは表示されなくなります。これは、サーバー上でスクレイピング スクリプトを実行するときに GUI でリソースを無駄にしたくない運用環境に最適です。

これで、完全な HTML コンテンツが取得され、各製品に関する特定の詳細が抽出されます。

ステップ 4: 製品情報を解析する

このステップでは、BeautifulSoup を使用して HTML を解析し、製品要素を識別します。次に、各製品の名前、価格、リンクなどの主要な詳細を抽出します。

pip install requests beautifulsoup4 selenium
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

出力には、次のように、名前、画像 URL、価格、製品ページのリンクを含む製品詳細の構造化されたリストが表示されます。

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記のコードは、生の HTML データを構造化された形式に編成して、作業を容易にし、さらなる処理のために出力データを準備します。

ステップ 5: 製品情報を CSV にエクスポートする

抽出したデータを CSV ファイルに整理できるようになりました。これにより、分析や共有が容易になります。 Python の CSV モジュールはこれに役立ちます。

python scraper.py
ログイン後にコピー
ログイン後にコピー

上記のコードは、必要なすべての製品詳細を含む新しい CSV ファイルを作成します。

概要の完全なコードは次のとおりです:

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com
ログイン後にコピー
ログイン後にコピー

上記のコードは、次のような products.csv を作成します。

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")
ログイン後にコピー
ログイン後にコピー

ステップ 6: トップ製品の追加データを取得する

ここで、最も価格の高い製品の上位 5 つを特定し、それらの個別のページから追加データ (製品の説明や SKU コードなど) を抽出するとします。次のコードを使用してこれを行うことができます:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Set up the WebDriver (make sure you have the appropriate driver installed, e.g., ChromeDriver)
driver = webdriver.Chrome()
# Open the page
driver.get("https://www.scrapingcourse.com/button-click")
# Loop to click the "Load More" button until there are no more products
while True:
    try:
        # Find the "Load more" button by its ID and click it
        load_more_button = driver.find_element(By.ID, "load-more-btn")
        load_more_button.click()
        # Wait for the content to load (adjust time as necessary)
        time.sleep(2)
    except Exception as e:
        # If no "Load More" button is found (end of products), break out of the loop
        print("No more products to load.")
        break
# Get the updated page content after all products are loaded
html_content = driver.page_source
# Close the browser window
driver.quit()
ログイン後にコピー

概要の完全なコードは次のとおりです:

from selenium import webdriver
from selenium.webdriver.common.by import By

import time

# instantiate a Chrome options object
options = webdriver.ChromeOptions()

# set the options to use Chrome in headless mode
options.add_argument("--headless=new")

# initialize an instance of the Chrome driver (browser) in headless mode
driver = webdriver.Chrome(options=options)

...
ログイン後にコピー

このコードは、製品を価格の降順に並べ替えます。次に、価格の最も高い上位 5 つの製品について、スクリプトは製品ページを開き、BeautifulSoup を使用して製品の説明と SKU を抽出します。

上記のコードの出力は次のようになります:

from bs4 import BeautifulSoup
# Parse the page content with BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Extract product details
products = []
# Find all product items in the grid
product_items = soup.find_all('div', class_='product-item')
for product in product_items:
    # Extract the product name
    name = product.find('span', class_='product-name').get_text(strip=True)

    # Extract the product price
    price = product.find('span', class_='product-price').get_text(strip=True)

    # Extract the product link
    link = product.find('a')['href']

    # Extract the image URL
    image_url = product.find('img')['src']

    # Create a dictionary with the product details
    products.append({
        'name': name,
        'price': price,
        'link': link,
        'image_url': image_url
})
# Print the extracted product details
for product in products[:2]:
    print(f"Name: {product['name']}")
    print(f"Price: {product['price']}")
    print(f"Link: {product['link']}")
    print(f"Image URL: {product['image_url']}")
    print('-' * 30)
ログイン後にコピー

上記のコードは products.csv を更新し、次のような情報が含まれるようになります:

Name: Chaz Kangeroo Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/chaz-kangeroo-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh01-gray_main.jpg
------------------------------
Name: Teton Pullover Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/teton-pullover-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh02-black_main.jpg
------------------------------
…
ログイン後にコピー

結論

無限スクロールや「さらに読み込む」ボタンを使用してページをスクレイピングするのは難しいように思えるかもしれませんが、Requests、Selenium、BeautifulSoup などのツールを使用するとプロセスが簡素化されます。

このチュートリアルでは、デモ ページから製品データを取得して処理し、迅速かつ簡単にアクセスできるように構造化された形式で保存する方法を説明しました。

すべてのコード スニペットはここでご覧ください。

以上が&#もっと読み込む&# ボタンを使用して無限スクロール ページをスクレイピングする: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート