[Python] 동적 웹사이트를 크롤링하기: Selenium

2022. 10. 4. 11:31Back-end/Python

반응형

동적 웹사이트 vs 정적 웹사이트

정적인 웹사이트는 이미 웹페이지가 만들어져 있고 이를 웹서버에서 클라이언트로 그대로 전달합니다. 따라서 속도가 빠르다는 장점이 있으나 데이터베이스랑 실시간으로 상호작용하지는 않습니다. 반면 동적인 웹사이트는 웹서버가 미리 페이지를 만들어놓는 대신, 자바스크립트가 런타임 시에 웹페이지를 만듭니다. URL의 변화가 없는데 스크롤 시 새 요소가 로딩되는 사이트가 동적 웹사이트라고 할 수 있습니다. 만약 동적 웹사이트를 정적 크롤러로 크롤링하면 아무것도 없는 요소를 반환할 가능성이 높습니다. 아직 요소가 자바스크립트에 의해 만들어지지 않았기 때문입니다. 따라서 동적 웹사이트는 동적 크롤러로 크롤링해야합니다. 반대로 정적 웹사이트를 동적 크롤러로 크롤링하는건 사용자가 일반적으로 웹브라우징하는 활동과 유사하기 때문에 문제없이 작동합니다.

 

https://www.geeksforgeeks.org/static-vs-dynamic-website/

 

 

 

Selenium

Selenium은 동적 웹사이트를 크롤링하는 프레임워크입니다. 웹브라우저의 엔진(ex.Chrome)을 사용하며 스크롤, 클릭, 키보드 입력 등 사용자가 웹브라우징하며 발생하는 이벤트를 Selenium을 사용해서 발생시킬 수 있습니다. Selenium은 Python, Java 등의 언어로 구현되어 있습니다. 반면 정적 웹사이트 크롤링은 Python 기반의 BeautifulSoup, JavaScript 기반의 Cheerio 등이 있습니다.

 


 

 

Selenium 사용법

1. 터미널에서 다음을 입력하여 Selenium을 설치합니다.

pip install selenium

 

 

2. Selenium을 사용하려면 ChromeDriver가 필요합니다. 구글에 검색하면 흔히 나오는것처럼 ChromeDriver를 직접 다운받을수도 있고, 컴퓨터에 설치된 기존 크롬 브라우저의 드라이버를 사용할 수도 있습니다. 근데 저처럼 이게 다 귀찮으시면 chromedriver_autoinstaller를 설치하면 됩니다. 

pip install chromedriver-autoinstaller

 

 

3. Python 프로젝트에서 모듈들을 import 합니다. 코드가 실행되면 ChromeDriver가 자동으로 설치되고 크롬 창이 열리면서 구글 홈페이지로 이동합니다.

from selenium import webdriver
import chromedriver_autoinstaller


chromedriver_autoinstaller.install()
driver = webdriver.Chrome()
driver.get("https://www.google.com")

또는 크롬창을 띄우지 않고 크롤링 할 수도 있습니다.

from selenium import webdriver
import chromedriver_autoinstaller


chromedriver_autoinstaller.install()

#크롬창을 띄우지 않고 백그라운드에서 작동
options = webdriver.ChromeOptions()
options.add_argument("headless")

driver = webdriver.Chrome()
driver.get("https://www.google.com")

 

 

4. 구글 검색창에 검색어를 입력하고 검색을 합니다. 검색창 element의 name은 q이며 send_keys()로 검색어를 입력하고 submit()로 검색을 합니다.

from selenium.webdriver.common.by import By

...
driver = webdriver.Chrome()
driver.get("https://www.google.com")

element = driver.find_element(By.NAME, 'q')
element.send_keys("아이브")
element.submit()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형