이전 포스팅에서는 셀레니움의 설치 방법을 알아보았다면, 이번에는 셀레니움을 통해 웹 스크래핑을 진행하여 직접 다뤄보는 방법에 대해서 설명하겠습니다!
Wait ?
wait은 말 그대로 대기입니다!
셀레니움은 동적 웹 사이트를 스크래핑, 크롤링 하기 위한 용도로 많이 사용하기에 동적 웹 사이트의 주소를 불러오려면 컴퓨터, 인터넷 성능에 따라 불러오는 시간이 달라질 수 있습니다.
그렇기에 가져오려는 데이터가 로드될 때까지의 시간이 존재해야 데이터를 안정적으로 끌고올 수 있습니다!
셀레니움은 이를 해결하기 위해 2가지의 대기 상태를 지원합니다.
- Implicit Wait(암묵적 대기) : 시간을 정해놓고 웹 페이지 전체 로딩이 완료될 때까지 지정 시간 동안 기다린다!
- Explicit Wait(명시적 대기) : 해당 태그를 가져올 수 있을 때까지. 즉, 조건을 만족할 때까지 기다린다!
XPATH ?
XPATH는 동일한 구조를 갖는 요소를 쉽게 접근하기 위해 파일 경로와 같은 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 언어입니다!
어떻게 쓸까?
1. Implicit Wait(암묵적 대기)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get('url 명')
# 웹 페이지 전체를 로드하는데 10초까지 기다릴게!
driver.implicitly_wait(10)
print(driver.find_element(By.XPATH, 'XPATH 경로').text)
2. Explicit Wait(명시적 대기)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get('url 명')
# 해당 XPATH가 로드될 때까지 60초만큼 기다릴게! 그 전에 오면 종료!
element = WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.XPATH, 'XPATH 경로')))
print(element.text)
이처럼 동적 웹을 스크래핑하기 위해 대기 시간을 지정하고 XPATH 경로에 해당하는 요소의 값을 가져올 수 있습니다!
TMI
현재 제 환경은 m1 pro 칩셋 노트북을 사용하고 있는데, 셀레니움의 실행 시간이 무지막지하게 느립니다...
chrome, python 등 재설치를 진행해보아도 똑같아서, 해결 방법을 알게된다면 추가 포스팅 해보도록 하겠습니다!
혹시라도 해결 방법을 아시는 분이 계시다면 댓글 부탁드려요!!
'크롤링, 스크래핑, 시각화 > Selenium' 카테고리의 다른 글
[Selenium] 셀레니움 다뤄보기 - 3 (마우스, 키보드 이벤트) (0) | 2024.10.04 |
---|---|
[Selenium] 셀레니움 다뤄보기 - 1 (By, 요초 추출) (0) | 2024.10.04 |
[Selenium] 셀레니움 설치 방법 (0) | 2024.10.04 |