웹 스크래핑 (Web Scraping)
웹 스크래핑은 웹 사이트의 HTML 코드에서 데이터를 추출하는 과정을 의미합니다. 이것은 보통 웹 페이지의 특정 부분에서 정보를 수집하는 작업입니다. 예를 들어, 특정 웹 페이지에서 제품 가격, 뉴스 기사, 블로그 게시물 등을 수집하고 해당 정보를 데이터베이스에 저장하거나 분석에 사용할 수 있습니다. BeautifulSoup과 같은 라이브러리를 사용하여 특정 HTML 요소를 선택하고 데이터를 추출하는 것이 일반적입니다.
웹 크롤링 (Web Crawling)
웹 크롤링은 자동화된 방식으로 웹을 탐색하고 정보를 수집하는 프로세스를 의미합니다. 크롤러 또는 스파이더라고도 불리는 프로그램이 시작 URL에서 출발하여 하이퍼링크를 따라 웹 사이트를 탐색하고 웹 페이지의 내용을 수집합니다. 이를 통해 인덱싱된 정보를 검색 엔진에 제공하거나 특정 웹 사이트의 내용을 분석하는 등의 작업을 수행할 수 있습니다.
차이점
목적
웹 스크래핑 : 특정 웹 페이지에서 데이터를 추출하는 데 중점을 둡니다.
웹 크롤링 : 여러 웹 페이지를 자동으로 탐색하여 정보를 수집하는 데 중점을 둡니다.
범위
웹 스크래핑 : 보통 한 번에 하나의 웹 페이지에서 데이터를 추출합니다.
웹 크롤링 : 여러 웹 페이지를 순회하고 탐색하여 데이터를 수집합니다.
활용
웹 스크래핑 : 보통 특정 데이터를 수집하고 분석하는 데 사용됩니다.
웹 크롤링 : 검색 엔진 인덱싱, 웹 사이트의 구조 및 링크 분석, 특정 웹 페이지의 변경 사항을 모니터링하는 등의 다양한 목적으로 사용됩니다.
따라서 웹 스크래핑은 작은 규모의 데이터 수집 및 분석에 사용되는 반면, 웹 크롤링은 대규모의 웹 사이트를 탐색하고 인덱싱하여 정보를 수집하는 데 사용됩니다.
pip install gensim nltk konlpy
import requests
from bs4 import BeautifulSoup
url = "https://www.aitimes.com/news/articleView.html?idxno=139086"
# 페이지 내용 가져오기
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 뉴스 내용이 포함된 article 요소 찾기
article = soup.find("article", {"id": "article-view-content-div"})
# article 요소가 존재하면 그 안의 모든 텍스트를 가져옴
if article:
news_content = article.get_text()
print(news_content)
else:
print("뉴스 내용을 찾을 수 없습니다.")
코드 예시(웹 크롤링)
from bs4 import BeautifulSoup
import requests
# 웹페이지 URL을 설정
url = 'https://www.aitimes.com/'
# 웹페이지로부터 HTML을 가져옴
# requests.get 함수를 사용하여 웹 서버에 요청하고 응답을 받음
response = requests.get(url)
html = response.text
# BeautifulSoup 객체를 생성하여 HTML 코드를 파싱
# 이 객체를 사용하여 HTML 내의 데이터를 쉽게 찾고 조작
soup = BeautifulSoup(html, 'html.parser')
# HTML에서 각 기사 정보를 포함하고 있는 요소를 선택
# '#skin-200 .item' CSS 선택자를 사용하여 특정 부분의 HTML을 찾아냄
articles = soup.select('#skin-200 .item')
# 추출된 기사 정보를 출력
# 각 기사의 순위, 제목, 링크를 찾아서 출력
for article in articles:
number = article.find('em', class_='number').get_text(strip=True) # 기사 순위를 추출
title = article.find('span', class_='auto-titles').get_text(strip=True) # 기사 제목을 추출
link = article.find('a')['href'] # 기사의 링크를 추출
# 기사 순위, 제목, 링크를 포맷에 맞게 출력
print(f"{number}: {title} (Link: {link})")
주의사항
서버 부하 최소화: 너무 빠른 속도로 많은 요청을 보내지 마세요. 서버에 과부하를 주어 웹사이트의 정상적인 운영을 방해할 수 있습니다. 요청 간에 시간 지연을 두거나, 접근 빈도를 조절하여 서버 부하를 관리하세요.
유저 에이전트 설정: 크롤링 시 자신의 스크립트에 유저 에이전트를 설정하여, 웹 서버가 이를 일반 브라우저의 요청으로 인식하도록 합니다. 이는 일부 사이트가 기본 파이썬 유저 에이전트를 차단하기도 하기 때문입니다.
오류 처리: 네트워크 문제나 웹사이트의 변경으로 인해 크롤링 중에 오류가 발생할 수 있습니다. 예외 처리 구문을 이하여 로깅을 통해 오류 내용을 기록하고, 실패한 요청은 재시도하는 로직을 구현하여 데이터 손실을 최소화할 수 있습니다.
페이지 구조 분석: 웹사이트의 HTML 구조를 정확히 이해하는 것이 필요합니다.
개발자 도구(F12)를 열어 HTML 구조를 살펴 볼 수 있습니다. HTML구조를 파악한 후 자신이 원하는 부분의 HTML을 찾고 코드에 적용합니다.
동적 콘텐츠 처리: JavaScript로 로드되는 동적 콘텐츠를 처리하기 위해 Selenium과 같은 도구를 사용할 수 있습니다. 이는 웹 페이지가 완전히 로드된 후에 데이터를 크롤링할 수 있게 해줍니다.
'DataAnalysis' 카테고리의 다른 글
🐼 판다스(Pandas) 기초 살펴보기 : 전기차 데이터 실습 (0) | 2025.08.22 |
---|---|
강아지 사진 구분하기 (0) | 2024.04.15 |
코랩(Colab) 활용 가이드: 데이터 분석과 머신 러닝을 위한 초보자용 (0) | 2024.04.12 |