본문 바로가기
Skills/Python

[Python] 동적 웹크롤링 - selenium 사용법

by 602yu 2024. 2. 8.

 

1. Selenium 패키지란?

웹 상에서 정적인 페이지를 탐색하는데 사용하던 BeautifulSoup같은 패키지가 하지 못하는 동적인 크롤링을 지원합니다.

selenium 패키지는 chromedriver를 제어하거나 원하는 정보를 얻기 위해 사용합니다.

크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생합니다. 이를 해주는 패키지가 selenium 입니다.

 

 

2. 패키지 설치

!pip install selenium

 

 

 

3. 실행 순서

1. 관련 패키지 import
2. 크롬 드라이버 실행
3. 조작을 원하는 버튼이나 입력창의 html 파악
4. 아래의 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택
     - find_element(By.ID)
     - find_element(By.CLASS_NAME)
     - find_element(By.XPATH)
     - find_element(By.CSS_SELECTOR)
5. 기능 동작 관련 함수로 원하는 기능 조작

 

최종 코드입니다. 차례대로 설명해보겠습니다.

# 관련 패키지 import
from selenium import webdriver
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
import time

# 크롬드라이버 실행
driver = webdriver.Chrome()
driver.get('https://www.naver.com/')
time.sleep(3)

# 객체(버튼/입력창 등) 선택
search_box = driver.find_element(By.CSS_SELECTOR, "#query")

# 기능 동작 관련 함수로 원하는 기능 조작
search_box.send_keys("대만 여행")
search_box.send_keys(Keys.RETURN)
time.sleep(1)

# 닫기
driver.close()

 

 

1) 관련 패키지 import 

필요한 모듈을 임포트합니다. 

from selenium import webdriver # webdriver를 이용해 해당 브라우저를 열기 위해
from selenium.webdriver.common.keys import Keys # 키보드 입력을 할 수 있게 하기 위해
from selenium.webdriver.common.by import By # html요소 탐색을 할 수 있게 하기 위해
import time # 페이지 로딩을 기다리는데에 사용

 

 

2) 크롬 드라이버 실행

# 크롬드라이버 실행
driver = webdriver.Chrome() 

#크롬 드라이버에 url 주소 넣고 실행
driver.get('https://www.naver.com/')

# 페이지가 완전히 로딩되도록 3초동안 기다림
time.sleep(3)

 

그럼 아래와 같이 네이버 페이지가 뜹니다.

<크롬 드라이버로 네이버 웹페이지에 접속한 상태>

 

그 다음으로 웹 브라우저 조작이 가능합니다. 

예를 들어, 온라인 쇼핑 웹사이트로 이동해 원하는 카테고리의 상품 정보를 수집한다거나, 유튜브 댓글을 모두 크롤링하는데 스크롤을 내려야지 댓글이 추가적으로 업데이트 되는 상황 등이 있습니다.

일단 저는 다음 주에 대만 여행을 가기때문에 네이버 검색창에 '대만 여행'을 입력하고 검색해보겠습니다.

 

 

 

3) 조작을 원하는 버튼이나 입력창의 html 파악

화면에서 가장 먼저 해줄 일은 크롬에서 F12를 누르는 것입니다.

F12를 누르면 웹 브라우저 우측에 '개발자 도구'가 나타납니다. 그러면 개발자 도구 상단의 화살표 버튼을 눌러서 조작을 원하는 부분을 클릭해주세요. 이때 'CSS Selector' 개념을 알아야합니다. 여기선 설명하지 않을게요

네이버 페이지의 검색창의 ID '#query' 이네요.

 

 

 

 

4) 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

  • find_element(By.ID)
  • find_element(By.CLASS_NAME)
  • find_element(By.XPATH)
  • find_element(By.SELECTOR)
# 검색어 창을 찾아 search 변수에 저장 (By.CSS_SELECTOR 방식)
search_box = driver.find_element(By.CSS_SELECTOR, "#query")

 

 

5) 기능 동작 관련 함수로 원하는 기능 조작

 

이제 원하는 조작을 수행하도록 명령을 내립니다. 명령은 클릭하거나 원하는 키를 입력해주는 것 2가지 입니다.

  • 클릭 : .click()
  • 키 입력 : .send_keys('검색어')
# 원하는 조작 수행
search_box.send_keys("대만 여행")
search_box.send_keys(Keys.RETURN)
time.sleep(1)

 

참고로 search_box.send_keys(Keys.RETURN) 을 입력해주면 우리가 검색어를 치고 '엔터키'를 입력해주는 것과 동일합니다. 

네이버 검색 버튼을 타겟팅 해주고, .click() 함수로 '마우스 클릭' 해주어도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있습니다.

# click 함수는 ()안에 아무것도 넣지 않으면 좌클릭을 수행
search_button.click()

 

 

 

 

'대만 여행' 검색이 완료되었습니다~