> 백엔드 개발 > 파이썬 튜토리얼 > &#더 보기&# 버튼을 사용하여 무한 스크롤 페이지 스크랩: 단계별 가이드

&#더 보기&# 버튼을 사용하여 무한 스크롤 페이지 스크랩: 단계별 가이드

Patricia Arquette
풀어 주다: 2025-01-13 18:09:43
원래의
787명이 탐색했습니다.

동적 웹 페이지에서 데이터를 로드하려고 할 때 스크래퍼가 멈췄습니까? 무한 스크롤이나 성가신 "더 보기" 버튼 때문에 좌절하셨나요?

당신은 혼자가 아닙니다. 오늘날 많은 웹사이트에서는 사용자 경험을 개선하기 위해 이러한 디자인을 구현하지만 웹 스크레이퍼에게는 어려울 수 있습니다.

이 튜토리얼은 더 보기 버튼을 사용하여 데모 페이지를 스크랩하는 초보자 친화적인 연습을 안내합니다. 대상 웹페이지의 모습은 다음과 같습니다.

Demo web page for scraping

마지막에는 다음 방법을 배우게 됩니다.

  • 웹 스크래핑을 위해 Selenium을 설정합니다.
  • '더 보기' 버튼 상호작용을 자동화합니다.
  • 이름, 가격, 링크 등의 상품 데이터를 추출합니다.

들어가자!

1단계: 전제조건

들어가기 전에 다음 전제 조건을 확인하세요.

  • Python 설치: python.org에서 설치 중 pip를 포함하여 최신 Python 버전을 다운로드하여 설치합니다.
  • 기본 지식: 웹 스크래핑 개념, Python 프로그래밍, 요청, BeautifulSoup, Selenium과 같은 라이브러리 작업에 대한 지식

필수 라이브러리:

  • 요청: HTTP 요청을 보내는 데 사용됩니다.
  • BeautifulSoup: HTML 콘텐츠를 구문 분석합니다.
  • Selenium: 브라우저의 버튼 클릭과 같은 사용자 상호 작용을 시뮬레이션합니다.

터미널에서 다음 명령을 사용하여 이러한 라이브러리를 설치할 수 있습니다.

pip install requests beautifulsoup4 selenium
로그인 후 복사
로그인 후 복사
로그인 후 복사

Selenium을 사용하기 전에 브라우저에 맞는 웹 드라이버를 설치해야 합니다. 이 튜토리얼에서는 Google Chrome과 ChromeDriver를 사용합니다. 그러나 Firefox나 Edge와 같은 다른 브라우저에서도 비슷한 단계를 따를 수 있습니다.

웹 드라이버 설치

  1. 브라우저 버전을 확인하세요:
  2. Google Chrome을 열고 도움말 > Chrome 정보점 3개 메뉴에서 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의 요청 라이브러리를 사용하여 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이 브라우저를 열지 않도록 하려면 헤드리스 브라우저 기능도 제공됩니다. 헤드리스 브라우저는 실제 웹 브라우저의 모든 기능을 갖추고 있지만 그래픽 사용자 인터페이스(GUI)는 없습니다.

다음과 같이 ChromeOptions 개체를 정의하고 이를 WebDriver Chrome 생성자에 전달하여 Selenium에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿