본문으로 건너뛰기
실습하기

BeautifulSoup 웹 크롤링의 한계

requestsBeautifulSoup 라이브러리는 변하지 않는 웹사이트, 즉 정적인 데이터를 크롤링하는 데에 사용됩니다.

하지만 최신 웹사이트들은 사용자와의 상호작용에 따라 데이터를 동적으로 처리합니다. 사용자는 서버에 추가적인 데이터를 요청하고, 서버로부터 받은 응답값을 웹 브라우저의 JavaScript가 처리하여 화면에 이를 표시합니다.

requests 라이브러리는 정적 HTML만을 가져올 수 있고, BeautifulSoup은 가져온 HTML을 파싱하는 데에 사용됩니다.

JavaScript가 생성하거나 변경하는 데이터는 requests로 가져올 수 있는 HTML에 포함되어 있지 않기 때문에, 기존 방식으로는 JavaScript로 처리한 데이터를 크롤링할 수 없습니다.


동적 데이터를 크롤링하는 방법?

하지만 Selenium를 사용하면 실제로 웹 브라우저를 실행시키고, JavaScript가 실행된 후의 DOM을 크롤링할 수 있습니다.

기상청 홈페이지는 JavaScript를 활용해 동적으로 날씨 정보를 표시하기 때문에 BeautifulSoup으로는 데이터를 제대로 가져올 수 없습니다.

하지만 Selenium을 사용하면 실제 브라우저에서 JavaScript가 실행된 후의 화면을 가져와, 이러한 문제를 해결할 수 있습니다.

참고 : 실습 코드를 컴퓨터에서 실제로 실행하려면, pip install selenium 명령어로 Selenium 라이브러리를 설치해야 합니다.

Selenium을 사용한 동적 웹 크롤링
from selenium import webdriver
from selenium.webdriver.common.by import By

# Chrome 브라우저 열기
driver = webdriver.Chrome()

# 기상청 동네 예보 페이지 열기
url = "https://www.weather.go.kr/w/index.do"
driver.get(url)

# 기온과 체감온도 찾기
# 'tmp' 클래스는 현재 기온을 나타내고, 'chill' 클래스는 체감온도를 나타냄
temperature_element = driver.find_element(By.CLASS_NAME, 'tmp')
feels_like_element = driver.find_element(By.CLASS_NAME, 'chill')

# 텍스트 추출
temperature = temperature_element.text
feels_like = feels_like_element.text

# 결과 출력
print(f"오늘의 기온: {temperature}")
print(f"체감온도: {feels_like}")

# WebDriver 종료
driver.quit()

코드 상세 설명

  • driver = webdriver.Chrome() : Chrome 브라우저를 열고, driver 객체 생성

  • driver.get(url) : 지정한 URL(기상청 홈페이지)로 이동

  • temperature_element = driver.find_element(By.CLASS_NAME, 'tmp') : tmp 클래스를 가진 요소를 찾아 temperature_element에 저장

  • feels_like_element = driver.find_element(By.CLASS_NAME, 'chill') : chill 클래스를 가진 요소를 찾아 feels_like_element에 저장

  • temperature = temperature_element.text : temperature_element의 텍스트를 추출하여 temperature에 저장

  • feels_like = feels_like_element.text : feels_like_element의 텍스트를 추출하여 feels_like에 저장

  • driver.quit() : WebDriver 종료


출력 결과 예시
오늘의 기온: 30.4℃
체감온도: 체감(30.6℃)

이렇게 Selenium을 사용하면 JavaScript로 동적으로 생성된 콘텐츠를 크롤링할 수 있습니다.

Selenium 라이브러리에 대한 더 자세한 내용은 파이썬과 AI로 끝내는 업무 자동화 커리큘럼에서 배우실 수 있습니다!

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!