안녕, 미래의 자동화 마스터들! 오늘은 Selenium을 사용해 웹 페이지 요소의 텍스트와 속성을 추출하는 방법을 배워보자. 이건 웹 스크레이핑 세계에서는 필수 스킬이야. 인터넷의 깊은 곳에서 유용한 정보를 뽑아낼 준비 됐지? 그럼 시작하자!
1. 이 강의는 뭐에 대해 다루나?
- 데이터 추출 기초: HTML 요소에서 텍스트를 가져오는 법. 이건 이미 도전처럼 들리지?
- 속성 가져오기:
(href)링크나(src)이미지같이 유용한 속성을 가져와서 멋진 무언가를 만들기. - 실생활 예제: 테이블과 리스트의 데이터를 추출하는 실습. 위대한 개발자가 말했듯이: "코드를 직접 만져보기 전엔 제대로 알 수 없다."
2. 요소에서 텍스트 추출하기
자, 여러분에게 멋진 웹사이트가 있다고 상상해보자. 그 안에 유용한 정보가 잔뜩 있어. HTML 요소에서 헤더, 문단 같은 텍스트를 가져와야 한다면? 여기서 Selenium이 도와줄게.
예제
from selenium import webdriver
# Chrome 드라이버 설정
driver = webdriver.Chrome()
# 사이트 열기
driver.get("https://example.com")
# 클래스 이름으로 요소 찾고 텍스트 추출
element = driver.find_element_by_class_name("example-class")
text = element.text
print("추출한 텍스트:", text)
# 브라우저 닫기
driver.quit()
여기서 .text 메서드를 사용해 요소의 텍스트 내용을 가져왔어. Python 예외를 전부 외우는 것보다 쉽지, 그치?
3. 요소에서 속성 추출하기
텍스트도 좋지만, URL 링크나 이미지 링크처럼 더 구체적인 게 필요할 땐 어떻게 해야 할까? Selenium이 이럴 때도 꼭 필요한 툴이야.
예제
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# CSS 선택자로 요소 찾고 'href' 속성 추출
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("링크 URL:", link_href)
# ID로 요소 찾고 'src' 속성 추출
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("이미지 URL:", img_src)
driver.quit()
보시다시피, .text 대신 .get_attribute("속성_이름") 메서드를 사용한 것뿐이야. 배우긴 쉽지만 정말 강력한 메서드란다.
4. 실습에서 메서드 사용하기
이제 이론은 그만! 프로그래머들은 추상적인 이야기에서 오래 머물지 않거든. 웹 페이지에서 테이블 데이터를 추출하는 예제를 살펴보자.
테이블의 데이터 추출
웹사이트에서 테이블의 모든 행을 추출해 출력해야 한다고 해보자. 이렇게 하면 돼:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# ID로 테이블 찾기
table = driver.find_element_by_id("example-table")
# 테이블의 모든 행 찾기
rows = table.find_elements_by_tag_name("tr")
for row in rows:
# 현재 행의 모든 셀 찾기
cells = row.find_elements_by_tag_name("td")
for cell in cells:
print(cell.text, end=' ')
print()
driver.quit()
먼저 테이블을 찾고, 모든 행과 셀을 순회하며 텍스트를 추출하고 출력했어. 좀 복잡한 거미줄을 푸는 것 같지만 결국엔 간단하고 명확해질 거야!
5. 흔한 실수와 그 해결 방법
데이터 추출 코드를 작성하기 전에 흔히 범하는 실수에 대해 알아보자.
동적 페이지를 다룰 때, 시간이 당신의 적이 될 수 있어. 아직 로드되지 않은 요소의 텍스트나 속성을 가져오려고 하면 NoSuchElementException 에러가 발생할 거야. 이건 마치 서프라이즈를 미리 잡으려는 것과 같지. 이런 걸 피하려면 기적을 기다리는 대신, 명시적 대기(WebDriverWait)를 사용해보자.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
)
print(element.text)
finally:
driver.quit()
여기서는 WebDriverWait와 expected_conditions를 사용해 요소가 로드될 때까지 기다렸어. 마치 요리가 완성될 때까지 기다렸다가 그 맛을 즐기는 것 같지?
GO TO FULL VERSION