Summary

  • Selenium은 웹 브라우저를 제어해 페이지를 불러오고 JavaScript를 실행하며, BeautifulSoup은 HTML·XML을 파싱해 정보를 추출한다
  • find_elementBy 셀렉터를 조합해 요소를 선택하고, 입력·클릭 등을 수행한다
  • 파일 다운로드 경로는 ChromeOptions로 지정한다

기본 세팅

패키지

  • BeautifulSoup: 페이지의 HTML·XML 문서를 파싱하고 정보를 추출한다
  • Selenium: 웹 브라우저를 제어해 페이지를 불러오고 JavaScript를 실행해 데이터에 접근한다
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By

Chromedriver 설치

크롬 버전을 먼저 확인한 뒤, 해당 버전에 맞는 driver를 설치한다.

그림. 크롬 버전 확인


사용법

접근

제어창을 열고 URL에 접속한 뒤 제어창을 종료한다. set_window_position()으로 창 위치를, maximize_window()로 창을 최대화할 수 있다.

driver = webdriver.Chrome()
 
driver.set_window_position(0, 0)
driver.maximize_window()
 
url = "https://www.industryland.or.kr/il/danji/list"
driver.get(url)
 
driver.close()

다운로드 경로 설정

크롤링으로 엑셀 등 파일을 다운로드할 때는 ChromeOptions()로 저장 경로를 지정하고, options 매개변수로 제어창을 생성한다.

path = '경로'
 
chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory': path}
chrome_options.add_experimental_option('prefs', prefs)
 
driver = webdriver.Chrome(options=chrome_options)

요소 선택 (element 문법)

find_element(단일)·find_elements(복수)에 By 셀렉터를 조합해 요소를 선택한다.

셀렉터설명예시
By.ID태그의 id 값으로 추출
By.NAME태그의 name 값으로 추출
By.XPATH태그의 경로로 추출//*[@id="root"]/main/table
By.LINK_TEXT링크 텍스트로 추출
By.TAG_NAME태그 이름으로 추출
By.CLASS_NAME태그의 클래스명으로 추출
By.CSS_SELECTORcss 선택자로 추출#root > main > table

아래는 네이버 사이트의 소스 정보 예시다.

그림. 네이버 사이트의 소스 정보

입력

driver.find_element(By.ID, "search_danji_nm").send_keys(name)

클릭

driver.find_element(By.CSS_SELECTOR, '#root > main > div.search-box > button').click()
driver.find_element(By.XPATH, f"//td[@class='text-al-left' and text()='{name}']").click()

Reference