Selenium을 이용한 웹 스크래핑은 웹 브라우저를 자동으로 조작하여 원하는 정보를 가져오는 작업을 수행합니다. 여기선 기본적인 Selenium 사용법과 설정, 그리고 간단한 웹 스크래핑 예제를 설명하겠습니다.
1. Selenium 환경 설정
먼저 Selenium과 웹드라이버(WebDriver)를 설치해야 합니다.
bash코드 복사pip install selenium
Selenium은 브라우저를 자동으로 실행하기 때문에, 사용하는 브라우저의 드라이버도 필요합니다. 예를 들어, 크롬 브라우저를 사용할 경우 ChromeDriver를 설치해야 합니다. ChromeDriver는 현재 사용 중인 Chrome 브라우저의 버전과 맞아야 합니다.
1.1 ChromeDriver 경로 설정
ChromeDriver를 다운로드한 후 실행 파일의 경로를 시스템 PATH에 추가하거나 코드에서 명시적으로 경로를 지정할 수 있습니다.
python코드 복사from selenium import webdriver
# 드라이버 경로 설정
driver_path = "/path/to/chromedriver"
driver = webdriver.Chrome(driver_path)
2. Selenium 기본 동작
이제 Selenium을 이용하여 간단한 페이지를 열고, 특정 요소를 찾고, 텍스트를 가져오는 예제를 살펴보겠습니다.
python코드 복사from selenium import webdriver
from selenium.webdriver.common.by import By
# 웹드라이버 시작
driver = webdriver.Chrome(driver_path)
# 웹사이트 열기
url = "https://example.com"
driver.get(url)
# 요소 찾기 - 예를 들어, 페이지의 제목을 가져오기
title_element = driver.find_element(By.TAG_NAME, "h1")
print("Page Title:", title_element.text)
# 작업 완료 후 브라우저 종료
driver.quit()
3. 웹 페이지의 요소 선택하기
Selenium은 다양한 선택자를 지원합니다. 몇 가지 예를 들어 보겠습니다:
ID로 찾기:
find_element(By.ID, "element_id")클래스 이름으로 찾기:
find_element(By.CLASS_NAME, "class_name")태그 이름으로 찾기:
find_element(By.TAG_NAME, "tag_name")CSS 선택자로 찾기:
find_element(By.CSS_SELECTOR, "css_selector")XPath로 찾기:
find_element(By.XPATH, "xpath_expression")
4. 간단한 웹 스크래핑 예제
아래 예제에서는 구글에서 특정 키워드를 검색하고, 검색 결과를 출력하는 예제를 만들어 보겠습니다.
python코드 복사from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 웹드라이버 설정
driver = webdriver.Chrome(driver_path)
# 구글 열기
driver.get("https://www.google.com")
# 검색창 찾기
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("selenium python")
search_box.send_keys(Keys.RETURN)
# 잠시 대기 (페이지 로딩 기다리기)
time.sleep(3)
# 검색 결과 가져오기
results = driver.find_elements(By.CSS_SELECTOR, "div.g")
for result in results:
title = result.find_element(By.TAG_NAME, "h3").text
link = result.find_element(By.TAG_NAME, "a").get_attribute("href")
print("Title:", title)
print("Link:", link)
print("="*50)
# 브라우저 닫기
driver.quit()
5. 주의사항
로딩 시간: 웹페이지가 로드될 때까지 대기해야 할 경우
time.sleep()또는WebDriverWait을 사용하여 대기할 수 있습니다.동적 요소: JavaScript로 생성된 동적 요소는
WebDriverWait을 통해 조건이 만족될 때까지 기다리게 할 수 있습니다.
WebDriverWait 예시
python코드 복사from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 요소가 나타날 때까지 최대 10초 기다리기
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "element_id"))
)
print("Element found:", element.text)
finally:
driver.quit()
이렇게 하면 Selenium을 활용하여 웹사이트의 특정 요소가 나타날 때까지 기다렸다가 스크래핑을 할 수 있습니다.
추가 팁
헤드리스 모드로 브라우저를 실행하여 화면 표시 없이 백그라운드에서 스크래핑을 할 수 있습니다.
크롤링 속도 조절: 너무 빠르게 크롤링하면 웹사이트에서 차단당할 수 있으므로
time.sleep()등을 사용하여 요청 간격을 적절히 두는 것이 좋습니다.