[Python] 내가 까먹어서 정리하는 "웹 자동화 & 데이터 스크래핑 도구" 총정리

지쥬·2025년 2월 10일
0

Python

목록 보기
5/6
post-thumbnail


얼떨결에 웹크롤링 과제를 맡게 되었고 ... 나는 경험이 없는데!!!
((그치만 하라면 하는게 개발자의 업무지.. 그치그치))

지금까지는 코드를 짤 때 마다 ChatGpt 한테 이런 경우엔 어떤 방법을 사용해야해? 이런 경우는??? 하고 매번 질문을 던졌다.. 하지만 이런 내가 너무나도 한심해 보였을 뿐이고 .. 이제는 나 혼자서도 방법을 결정 할 수 있는 멋진 개발자로 성장하고 싶은 마음 뿐이다. 매일매일 똑같은 걸 해도 매일매일 까먹는 나를 위해 총정리 해보려고 한다.

1. 주요 용어 및 개념 정의

1. 웹 크롤링(Web Crawling)

정의: 웹사이트의 페이지를 자동으로 탐색하고 데이터를 수집하는 기술
예시: TikTok에서 비디오 조회수를 수집하는 프로그램

2. 웹 스크래핑(Web Scraping)

정의: 웹 페이지의 HTML에서 원하는 정보를 추출하는 과정
예시: TikTok HTML 코드에서 특정 비디오 조회수를 추출

차이점:

웹 크롤링은 웹사이트의 여러 페이지를 자동으로 탐색하는 과정
웹 스크래핑은 특정 웹페이지에서 원하는 데이터를 추출하는 과정

→ 웹 크롤링을 하면서 웹 스크래핑을 수행할 수 있음!!
→ 웹 크롤링은 웹 스크래핑을 포함하는 상위 개념임

2. 데이터 수집 방식 비교

크롤링을 하다 보면 자연스럽게 다양한 방법을 사용하게 된다.
나는 주로 Selenium, BeautifulSoup, XPath 이 세 가지를 많이 썼다.

이제 각각 어떤 방식이고, 언제 사용하면 좋은지 정리해보려고 한다.

Selenium vs BeautifulSoup vs XPath 차이점 정리

기술명정의특징장점단점사용 예시
Selenium웹 브라우저를 자동화하여 HTML을 가져옴실제 브라우저처럼 동작- JavaScript 실행 가능
- 실제 브라우저 환경에서 크롤링 가능
- 느림 (브라우저 실행 필요)
- 사이트에서 탐지될 가능성 있음
- 로그인이 필요한 사이트 크롤링
- TikTok, Instagram 등 JavaScript 기반 사이트 크롤링
BeautifulSoupHTML 파싱 및 데이터 추출정적인 HTML 분석- 속도가 빠름
- 유지보수 쉬움
- JavaScript 실행 불가능- 정적인 HTML에서 데이터 추출
- 뉴스 기사 제목/본문 크롤링
XPathHTML 요소의 경로를 지정하여 찾는 방식Selenium에서 사용- 특정 요소를 정확하게 찾을 수 있음- HTML 구조 변경 시 코드 수정 필요- Selenium과 함께 특정 요소 찾을 때 사용

결론:
• JavaScript가 실행되는 사이트 → Selenium
• 정적인 HTML에서 빠르게 데이터 추출 → BeautifulSoup
• 특정 요소를 정확히 찾고 싶을 때 → XPath

실제 예제 코드 비교

1) Selenium을 사용한 크롤링 (TikTok 조회수 크롤링 예제)

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

options = webdriver.ChromeOptions()
options.add_argument("--headless")  # 브라우저 창 숨기기
driver = webdriver.Chrome(options=options)

driver.get("https://www.tiktok.com/@example/video/123456789")
time.sleep(5)  # 페이지 로딩 대기

# XPath를 사용하여 조회수 가져오기
views = driver.find_element(By.XPATH, "//strong[@data-e2e='video-views']").text
print("조회수:", views)

driver.quit()
- Selenium을 사용하여 실제 브라우저에서 TikTok 페이지를 연다. 
- find_element(By.XPATH, "...")으로 조회수 요소를 찾아 데이터를 가져온다. 
- JavaScript 실행이 필요한 사이트에서 활용 가능

2) BeautifulSoup을 사용한 크롤링 (정적인 HTML에서 데이터 추출)

import requests
from bs4 import BeautifulSoup

url = "https://example.com/news"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 기사 제목 가져오기
title = soup.find("h1").text
print("기사 제목:", title)
- requests.get(url)을 사용하여 HTML을 가져온 후, BeautifulSoup으로 분석
- .find("h1")을 사용하여 h1 태그 안의 텍스트를 추출
- JavaScript 실행이 필요 없는 정적인 웹페이지에서 사용 가능

3) XPath를 활용한 데이터 추출

from lxml import html

html_code = """<html><body><div class='title'>웹 크롤링 기초</div></body></html>"""
tree = html.fromstring(html_code)

# XPath를 사용하여 제목 가져오기
title = tree.xpath("//div[@class='title']/text()")[0]
print("제목:", title)
- lxml.html을 사용하여 HTML을 XPath 문법으로 파싱
- //div[@class='title']/text()을 사용하여 내부의 텍스트를 가져옴
- 정확한 요소를 찾을 때 사용

0개의 댓글