크롤링 Crawling
- 웹페이지를 가져와서 데이터를 추출해 내는 방법
- 웹페이지 데이터의 로드 방식에 따라 정적 크롤링과 동적 크롤링 중 선택하여 사용함
정적 크롤링
- 정적인 데이터를 수집하는 방법
- HTML 문서가 서버에서 완성된 상태로 제공되는 데이터
- 즉, 페이지를 열었을 때 추가적인 JavaScript 실행 없이 모든 정보가 표시되는 것.
- 라이브러리: requests(웹페이지 요청), BeautifulSoup(HTML 분석)
- 예시 코드
import requests
from bs4 import BeautifulSoup
# 웹페이지 요청
url = "https://naver.com"
response = requests.get(url)
# HTML 파싱
soup = BeautifulSoup(response.text, "html.parser")
# 특정 요소 선택
titles = soup.find_all("a", class_="news_tit")
# 출력
for title in titles:
print(title.get_text())
동적 크롤링
- 동적인 데이터를 수집하는 방법
- HTML 문서가 처음 로드될 때는 데이터가 포함되지 않고, JavaScript가 실행된 후 데이터가 추가적으로 로드됨
- 스크롤을 내리거나, 버튼을 누르거나, 검색하여 데이터가 표시되는 경우
- 라이브러리: Selenium
| 구분 | 정적 크롤링 | 동적 크롤링 |
| 데이터 유형 | HTML 문서 내 바로 포함된 데이터 | JavaScript 실행 후 추가 로드되는 데이터 |
| 속도 | 빠름 | 느림(브라우저 실행) |
| 라이브러리 | requests, BeautifulSoup | Selenium |
| 활용 | 뉴스 기사, 블로그, 정적 웹페이지 | 무한 스크롤, 로그인이 필요한 페이지, AJAX 요청 페이지 |
셀레니움 Selenium
- 웹 브라우저를 자동으로 조작할 수 있는 오픈 소스 프레임워크
- 웹 애플리케이션을 테스트하거나, 데이터를 크롤링할 때 사용됨
셀레니움 주요기능
- 브라우저 자동화
- 사용자가 직접 클릭하거나 입력하는 행동을 Selenium 코드로 실행 가능함
- 버튼 클릭, 입력 필드 입력, 페이지 이동 등의 동작이 가능함
- 다양한 브라우저 지원
- Chrome, Firefox, Edge 등 여러 브라우저에서 동작 가능함
- 브라우저 없이 백그라운드에서 실행하는 Headless 모드를 지원함
- 동적 웹 페이지 제어
- JavaScript로 동적으로 생성되는 데이터를 이용할 수 있음
- 테스트 자동화 기능
- 웹사이트 기능 테스트 시, 수동으로 클릭하는 대신 Selenium을 활용해 자동화가 가능함
Selenium 기본 동작 방식
from selenium import webdriver
from selenium.webdriver.common.by import By
# Chrome WebDriver 실행
# WebDriver에 의해 Chrome 브라우저 자동 Open
driver = webdriver.Chrome()
url = "https://www.naver.com"
driver.get(url)
# 페이지가 완전히 로드될 때까지 3초간 대기
time.sleep(3)
# 특정 요소 선택
titles = driver.find_elements(By.CLASS_NAME, "news_tit")
# 출력
for title in titles:
print(title.text)
# 브라우저 닫기
driver.quit()
위 코드를 실행하면 크롬 브라우저가 자동으로 열리고 설정한 URL로 이동하여 원하는 요소의 데이터를 추출할 수 있음
'빅데이터 & AI' 카테고리의 다른 글
| [딥러닝] 3주차 - 파이썬, 딥러닝 라이브러리, 넘파이 Numpy, 행렬 연산 (0) | 2025.04.01 |
|---|---|
| [딥러닝] 2주차 - 머신러닝의 종류, 회귀와 분류 (0) | 2025.03.31 |
| [딥러닝] 1주차 - 딥러닝, 인공지능, 기계학습, 퍼셉트론 (0) | 2025.03.31 |
| [크롤링] Selenium을 이용한 네이버 뉴스 크롤링 (1) - 환경 설정 (0) | 2025.03.25 |