CodeGym /행동 /Python SELF KO /Selenium을 사용해 텍스트와 속성 추출하기

Selenium을 사용해 텍스트와 속성 추출하기

Python SELF KO
레벨 36 , 레슨 2
사용 가능

안녕, 미래의 자동화 마스터들! 오늘은 Selenium을 사용해 웹 페이지 요소의 텍스트와 속성을 추출하는 방법을 배워보자. 이건 웹 스크레이핑 세계에서는 필수 스킬이야. 인터넷의 깊은 곳에서 유용한 정보를 뽑아낼 준비 됐지? 그럼 시작하자!

1. 이 강의는 뭐에 대해 다루나?

  • 데이터 추출 기초: HTML 요소에서 텍스트를 가져오는 법. 이건 이미 도전처럼 들리지?
  • 속성 가져오기: (href) 링크나 (src) 이미지같이 유용한 속성을 가져와서 멋진 무언가를 만들기.
  • 실생활 예제: 테이블과 리스트의 데이터를 추출하는 실습. 위대한 개발자가 말했듯이: "코드를 직접 만져보기 전엔 제대로 알 수 없다."

2. 요소에서 텍스트 추출하기

자, 여러분에게 멋진 웹사이트가 있다고 상상해보자. 그 안에 유용한 정보가 잔뜩 있어. HTML 요소에서 헤더, 문단 같은 텍스트를 가져와야 한다면? 여기서 Selenium이 도와줄게.

예제

Python

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이 이럴 때도 꼭 필요한 툴이야.

예제

Python

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. 실습에서 메서드 사용하기

이제 이론은 그만! 프로그래머들은 추상적인 이야기에서 오래 머물지 않거든. 웹 페이지에서 테이블 데이터를 추출하는 예제를 살펴보자.

테이블의 데이터 추출

웹사이트에서 테이블의 모든 행을 추출해 출력해야 한다고 해보자. 이렇게 하면 돼:

Python

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)를 사용해보자.

Python

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()

여기서는 WebDriverWaitexpected_conditions를 사용해 요소가 로드될 때까지 기다렸어. 마치 요리가 완성될 때까지 기다렸다가 그 맛을 즐기는 것 같지?

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