CodeGym /자바 코스 /Python SELF KO /동적인 요소를 최소한으로 사용하여 여러 페이지 순회하기

동적인 요소를 최소한으로 사용하여 여러 페이지 순회하기

Python SELF KO
레벨 38 , 레슨 1
사용 가능

1. 탐색 준비

대모험을 시작하기 전에, 올바른 도구인 Selenium과 약간의 요령으로 무장해야 해. 이미 Selenium과 브라우저 드라이버 설정하는 법은 알고 있다고 가정할게, 그러니까 바로 가보자!

드라이버 설정하기

Python

from selenium import webdriver

# 브라우저 드라이버 실행, 예: Chrome
driver = webdriver.Chrome()

# 모험의 첫 번째 페이지 열기
driver.get("http://example.com/start-page")

지금까지는 기본적인 단계야 — 브라우저를 열고 시작 페이지를 로드했어. 그런데 여기서 재미가 시작돼: 단 한 페이지에 머물고 싶진 않잖아. 모든 이웃 페이지를 방문하고 싶으니까!

2. 페이지네이션: 페이지 간 산책

페이지를 이동하는 가장 간단하고 친근한 방법은 페이지네이션이야. 페이지 하단에 있는 작은 숫자들 본 적 있지? 그게 마치 도로 표지판 같아: "다음 정류장은 페이지 2입니다".

페이지에서 데이터 추출

여행을 시작하기 전에, 현재 페이지에서 정보를 수집하고 싶어. 예를 들어, 상품 목록이나 기사 제목 같은 것들 말이야.

Python

def extract_data():
    # 페이지에서 관심있는 모든 요소 찾기, 예: 제목
    titles = driver.find_elements_by_class_name("item-title")
    for title in titles:
        print(title.text)  # 그냥 텍스트를 출력하지만 어디든 저장할 수도 있어

extract_data()

만약 이전 강의를 놓쳤다면, 이 코드 조각은 item-title 클래스를 가진 모든 제목을 찾고 그것들을 출력해.

다음 페이지로 이동

데이터를 수집했다면, 이제 다음 단계로 가야 해. 페이지네이션은 종종 다음 또는 이전 페이지로 가는 링크 버튼으로 표시돼. 이 버튼들을 찾아 클릭해야 해.

Python

def go_to_next_page():
    try:
        # 다음 페이지 버튼을 찾아 클릭하기
        next_button = driver.find_element_by_link_text("Next")
        next_button.click()
    except NoSuchElementException:
        # 버튼이 없으면 끝에 도달한 거야
        print("페이지 목록 끝입니다.")

이 함수는 "Next"라는 텍스트가 있는 링크를 찾아 클릭해서 다음 페이지로 넘어가. 버튼이 없으면, 우리 봇은 시퀀스의 끝이라고 이해하지.

3. 페이지 순회 반복문

완벽한 행복을 위해 우리가 무엇이 부족할까? 맞아, 반복문이야! 모든 요소를 하나의 편리한 반복문으로 결합해서 우리 봇이 전문가처럼 모든 페이지를 순회하도록 만들어보자.

Python

while True:
    extract_data()  # 현재 페이지에서 데이터 수집
    go_to_next_page()  # 다음 페이지로 이동
    time.sleep(2)  # 서버를 놀라게 하지 않도록 잠시 쉬기

자, 이제 우리 봇이 "Next" 버튼을 클릭할 수 있는 모든 페이지를 용감하게 순회해. 이 코드는 페이지가 끝날 때까지 계속 실행돼. 요청 사이에 짧은 휴식은 서버와의 우정을 유지하는 데 중요해. 아무도 스패머를 좋아하지 않잖아, 특히 사이트 관리자들.

4. 동적 상호작용

얘들아, 페이지네이션 예제처럼 간단하지 않을 때도 있어. 때로는 페이지가 닌자처럼 행동해서 스크롤할 때 데이터를 동적으로 로드하곤 해. 걱정 마, 이것도 다룰 수 있어.

명시적 대기

대기 조건은 필요한 요소가 나타날 때까지 코드를 잠시 멈추게 해. 콘텐츠가 바로 로드되지 않을 때 특히 유용해.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def wait_for_element(locator):
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, locator))
        )
        return element
    except TimeoutException:
        print("요소를 찾지 못했습니다.")

이 함수는 동적으로 로드된 콘텐츠와 조화되어 요소가 사용 가능해질 때까지 기다리게 해.

페이지 스크롤

무한 스크롤 같은 동적 콘텐츠는 하단으로 스크롤해서 더 많은 요소를 로드하도록 해야 할 때가 있어.

Python

def scroll_down():
    # JavaScript를 사용해 아래로 스크롤
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

JavaScript 코드를 사용하면 부드럽게 아래로 스크롤할 수 있어, 페이지가 콘텐츠를 로드할 수 있도록. 이 방법은 무한 스크롤을 탐색하기 위해 반복문에서 사용할 수 있어.

5. 팁과 트릭

예제를 넘어서는 것은 놀라움과 모험으로 가득 찬 여행서와 같아. 당신의 봇이 당신처럼 다양한 시나리오에 준비되어 있어야 한다고 상상해봐.

만약 "Next" 버튼이 없고 페이지 번호가 있는 페이지네이션이라면, 번호를 URL에 직접 대입하는 동적 접근법을 사용해. 웹사이트가 갑자기 닌자가 되어 일부 페이지를 숨기기로 결정하면, 스크립트를 조정해서 예기치 않은 상황에서도 적응할 수 있도록 만들어.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION