BeautifulSoup 웹 크롤링의 한계
requests
와 BeautifulSoup
라이브러리는 변하지 않는 웹사이트, 즉 정적인 데이터를 크롤링하는 데에 사용됩니다.
하지만 최신 웹사이트들은 사용자와의 상호작용에 따라 데이터를 동적으로 처리합니다. 사용자는 서버에 추가적인 데이터를 요청하고, 서버로부터 받은 응답값을 웹 브라우저의 JavaScript가 처리하여 화면에 이를 표시합니다.
requests
라이브러리는 정적 HTML만을 가져올 수 있고, BeautifulSoup
은 가져온 HTML을 파싱하는 데에 사용됩니다.
JavaScript가 생성하거나 변경하는 데이터는 requests
로 가져올 수 있는 HTML에 포함되어 있지 않기 때문에, 기존 방식으로는 JavaScript로 처리한 데이터를 크롤링할 수 없습니다.
동적 데이터를 크롤링하는 방법?
하지만 Selenium
를 사용하면 실제로 웹 브라우저를 실행시키고, JavaScript가 실행된 후의 DOM을 크롤링할 수 있습니다.
기상청 홈페이지는 JavaScript를 활용해 동적으로 날씨 정보를 표시하기 때문에 BeautifulSoup으로는 데이터를 제대로 가져올 수 없습니다.
하지만 Selenium을 사용하면 실제 브라우저에서 JavaScript가 실행된 후의 화면을 가져와, 이러한 문제를 해결할 수 있습니다.
참고 : 실습 코드를 컴퓨터에서 실제로 실행하려면,
pip install 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로 끝내는 업무 자동화 커리큘럼에서 배우실 수 있습니다!
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
실행 결과