Selenium 사용하여 웹 페이지 크롤링하기(세팅)

Doyeon·2023년 3월 14일
2
post-thumbnail

웹 크롤링을 사용하는 이유

전국에 있는 주차장 정보를 DB에 저장하여 주차장 검색 서비스를 구현하고자 한다.

공공 데이터 포털에서 제공하는 주차장 정보 제공 API 를 사용하려고 했으나, 주차장 이름, 주소 등이 공백인 데이터가 많았다.

전국 주차장 정보 표준 데이터 엑셀 데이터는 14,000여개의 주차장 정보를 가지고 있으나, 우리가 목표로 하는 대용량 데이터에 비해서는 적은 데이터였다.

50만~100만 정도의 주차장 데이터를 수집하기 위해 네이버 지도에서 주차장 정보를 크롤링하여 수집하고자 한다.


웹 크롤링 라이브러리

Java

  • Jsoup
    • HTML 파싱 라이브러리
    • HTML 소스코드를 가져와서 원하는 데이터를 추출할 수 있다.
    • 네트워크 연결이 필요하지 않으므로 빠르게 작업을 수행할 수 있다.
    • 정적인 페이지에 대해서만 적합하다.
  • Selenium
    • 웹 브라우저 자동화 라이브러리
    • 웹페이지를 열고 버튼 클릭, 텍스트 입력 등의 동작을 자동화할 수 있다.
    • 동적으로 생성되는 데이터 추출이 가능하다.
    • 다양한 브라우저를 지원하여 브라우저별로 테스트를 수행할 때도 사용할 수 있다.
    • 네트워크 연결이 필요하므로 Jsoup보다는 느리게 동작할 수 있다.

Python

  • Beautiful Soup
    • HTML, XML 파싱 라이브러리
    • HTML, XML 소스코드를 가져와서 원하는 데이터를 추출할 수 있다.
    • 정적인 페이지에 대해서만 적합하다.
    • CSS 선택자 및 정규표현식 등을 이용하여 데이터를 추출할 수 있다.
  • Scrapy
    • 웹 크롤링 프레임워크
    • 크롤링, 스크래핑 및 데이터 추출을 자동화할 수 있다.
    • 분산 크롤링, 로그인, 자동화 등 다양한 기능을 지원한다.
    • 동적으로 생성되는 데이터 추출이 가능하다.
    • 복잡한 크롤링 작업을 수행할 때 유용하다.

네이버 지도는 동적으로 구성된 웹페이지이다. 동적인 페이지를 크롤링하기 위해서 Selenium이 적합할 것으로 보인다.


Selenium 사용을 위한 설정

1. Selenium 다운로드

  • Java
implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.7.1'
testImplementation 'org.seleniumhq.selenium:selenium-java:4.7.0'
  • Python

2. 웹드라이버 다운로드

  • ChromeDriver - WebDriver for Chrome
    ChromeDriver - WebDriver for Chrome
  • Chrome > 설정 > Chrome 정보 에서 브라우저 버전을 확인한다.
  • 크롬 브라우저 버전과 OS에 맞는 드라이버를 설치한다.

3. 웹 드라이버 경로 설정

  • Java

     import org.openqa.selenium.WebDriver;
     import org.openqa.selenium.chrome.ChromeDriver;
    
     public class CrawlingData {
    
         public static void main(String[] args) {
             System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
             WebDriver driver = new ChromeDriver();
         }
     }
    • {path/to/chromedriver}는 다운로드한 웹드라이버의 경로로 변경한다.
  • Python

    from selenium import webdriver
    driver = webdriver.Chrome('./chromedriver')  # 드라이버 경로
profile
🔥

0개의 댓글