웹 크롤링은 웹에서 원하는 데이터를 자동으로 수집하는 기술입니다.
보통 크롤링 방식은 정적 크롤링(Static Crawling)과 동적 크롤링(Dynamic Crawling)으로 나뉘며,
웹 페이지의 렌더링 방식(CSR vs SSR)에 따라 접근 방식이 달라집니다.
정적 크롤링은 HTML 소스 코드 내에 원하는 데이터가 포함되어 있을 때 사용합니다.
즉, 페이지를 열었을 때 개발자 도구(F12) → Elements에서 데이터를 바로 확인할 수 있는 경우입니다.
✔ 서버에서 이미 HTML을 완성해서 내려줌
✔ JavaScript를 실행할 필요 없음
✔ BeautifulSoup
을 활용하여 HTML을 파싱
import requests
from bs4 import BeautifulSoup
# 크롤링할 URL
url = "https://example.com"
# 페이지 요청
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 원하는 데이터 추출
title = soup.find("h1").text
print("페이지 제목:", title)
div
, span
, table
등에 데이터가 직접 존재하는 경우일부 웹사이트는 보안 정책 또는 기술적 이유로 데이터를 직접 노출하지 않습니다.
이 경우, Selenium을 활용해 브라우저를 직접 조작하여 데이터를 가져와야 합니다.
✔ JavaScript가 렌더링한 후 데이터를 가져와야 하는 경우
✔ 로그인이 필요한 사이트 또는 클릭 후 데이터가 나타나는 경우
✔ Selenium을 사용하여 크롬 브라우저를 띄워 클릭, 스크롤 등의 동작 수행
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# ChromeDriver 경로 설정
service = Service("/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
# 웹사이트 접속
driver.get("https://example.com/login")
# 로그인 (예시)
driver.find_element(By.NAME, "username").send_keys("my_id")
driver.find_element(By.NAME, "password").send_keys("my_password")
driver.find_element(By.ID, "login-button").click()
# 대시보드 이동 후 데이터 크롤링
driver.get("https://example.com/dashboard")
data = driver.find_element(By.CLASS_NAME, "data-class").text
print("크롤링 데이터:", data)
# 브라우저 종료
driver.quit()
웹사이트는 데이터를 클라이언트에게 전달하는 방식에 따라 CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)으로 나뉩니다.
클라이언트(브라우저)에서 JavaScript를 실행하여 데이터를 가져와 화면을 렌더링하는 방식
✔ HTML 문서는 기본적인 틀만 있고, JavaScript가 API를 호출해 데이터를 가져옴
✔ 개발자 도구 Network → XHR에서 API 요청을 확인 가능
✔ 크롤링 시, Selenium을 사용하거나 API 직접 호출 필요
import requests
# API 요청 (개발자 도구 → Network에서 확인한 API)
api_url = "https://example.com/api/data"
headers = {"Authorization": "Bearer my_token"}
response = requests.get(api_url, headers=headers)
data = response.json()
print("API 데이터:", data)
서버에서 HTML을 완성한 후, 클라이언트에 전달하는 방식
✔ 브라우저에서 HTML을 열었을 때 개발자 도구 Elements에서 데이터 확인 가능
✔ BeautifulSoup 같은 라이브러리로 크롤링 가능
방식 | 필요 도구 | 특징 | 사용 예시 |
---|---|---|---|
정적 크롤링 | BeautifulSoup | HTML 내 데이터가 직접 존재 | 뉴스 사이트, 블로그 |
동적 크롤링 | Selenium | JavaScript 실행 후 데이터 로딩 | 로그인 후 마이페이지, AJAX 기반 사이트 |
API 크롤링 | requests | 개발자 도구 Network에서 API 확인 가능 | 데이터가 JSON 형태로 응답되는 사이트 |
robots.txt를 확인하세요 🚦
→ 웹사이트가 크롤링을 허용하는지 반드시 확인해야 합니다.
https://example.com/robots.txt
에서 정책을 확인하세요.
너무 많은 요청을 보내지 마세요 ⚠️
→ 서버에 과부하를 줄 수 있습니다.
→ time.sleep(0.5)
같은 딜레이를 추가하세요.
데이터 무단 수집은 불법일 수 있습니다 📜
→ 개인정보 수집, 무단 데이터 활용 등은 법적으로 문제가 될 수 있습니다.
→ 이용 약관을 확인하고, 적절한 요청 범위 내에서 데이터를 수집하세요.
BeautifulSoup
→ HTML 내 직접 데이터가 있을 때 사용 Selenium
→ JavaScript가 데이터를 불러오는 경우 사용 requests
→ 개발자 도구 Network에서 API 확인 후 사용 웹사이트 구조를 분석하고 가장 효율적인 크롤링 방법을 선택하는 것이 중요합니다!