웹 데이터 수집 - Selenium

dpwl·2024년 7월 7일

Data Analysis with Python

목록 보기
37/48

1. Selenium

Selenium은 웹 브라우저를 자동화하는 도구로, 파이썬 코드를 이용하여 웹 브라우저를 제어할 수 있다. 이를 통해 웹 페이지를 열고, 텍스트를 입력하며, 버튼을 클릭하는 등의 작업을 자동화할 수 있다. 주로 웹사이트 테스팅 및 데이터 수집 목적으로 사용된다.

1.1 Selenium 필요한 이유

  • 변하지 않는 URL: 예를 들어, URL이 고정되어 있어도, 사용자는 클릭을 통해 데이터를 확인해야 할 수 있다.
  • 사용자 인터랙션: 특정 데이터를 확인하기 위해서는 페이지 내에서 여러 단계의 클릭과 입력이 필요할 수 있다.
  • 데이터 추출 자동화: 반복적인 데이터 수집 작업을 자동화하여 시간을 절약하고 효율성을 높일 수 있다.

따라서 Selenium을 사용하여 웹 페이지에서 데이터를 자동으로 수집하는 작업이 필요하다.

2. 웹페이지 데이터 수집

Google Colab에서는 Selenium 사용이 까다로울 수 있으므로, 로컬 환경인 VSCode를 이용하여 작업하는 것이 좋다.

2.1 VSCode에서 Selenium 설치 및 설정

# Selenium 라이브러리 설치
!conda install -y selenium
# !pip insatll selenium
# 필요한 도구 꺼내놓기
import time

# 데이터 분석 도구
import pandas as pd
import numpy as np

# 데이터 시각화 도구
import matplotlib.pyplot as plt
import seaborn as sns
import koreanize_matplotlib
%matplotlib inline
%config InlineBackend.figure_format = 'retina'  # 시각화 화질 향상

# 데이터 수집 도구
from selenium import webdriver
from selenium.webdriver.common.by import By

# 기타 도구
from glob import glob
# glob 라이브러리가 설치 안되어있을 경우
# !conda install -y glob
# !pip install glob

Selenium으로 웹사이트 접근 방법:

1) 웹페이지 접속
2) 서울시 선택 (고정)
3) 서울시 구 하나 선택
4) 서울시 구에 해당하는 엑셀 파일 다운로드
5) 서울시 모든 구 반복

# Selenium 라이브러리 업데이트
!pip3 install selenium --upgrade

# 웹드라이버 매니저 설치
pip install webdriver-manager

2.2 Selenium을 이용한 웹페이지 제어

from selenium import webdriver

# ChromeDriver 경로 설정
driver_path = '/path/to/chromedriver'
driver = webdriver.Chrome(driver_path)

# 웹페이지 열기
url = 'https://www.example.com'
driver.get(url)
# 브라우저 크기 최대
driver.maximize_window()
# 주의: Selenium은 브라우저 크키를 최대치로 키우지 않으면 데이터 수집에 문제가 생길 수 있음. 해당 크기의 창에서만 데이터 수집이 가능하기 때문

1) 오른쪽 상단의 점 세개 클릭
2) More Tools 선택
3) Developer Tools 선택

4) Selector 클릭하여 활성화
5) 주유소 지역의 시/도 선택

2.3 웹 요소 찾기 및 상호작용

# 요소 찾기
search_box = driver.find_element_by_name('q')
search_button = driver.find_element_by_css_selector('input[type="submit"]')

# 텍스트 입력
search_box.send_keys('Selenium')

# 버튼 클릭
search_button.click()
# 예: 검색 결과 텍스트 추출
results = driver.find_elements_by_css_selector('.result')
for result in results:
    print(result.text)
profile
거북선통통통통

0개의 댓글