본문 바로가기
-

웹 크롤링과 스크래핑에 대해

by dong_su 2024. 5. 27.

크롤링 (Crawling)

크롤링은 웹 크롤러 또는 스파이더가 웹 페이지를 자동으로 탐색하고, 링크를 따라가며 여러 페이지를 방문하는 과정입니다. 크롤러는 보통 다음을 수행합니다:

  1. 경로 추적: 크롤러는 특정 웹 페이지에서 시작하여 그 페이지의 링크를 추적하고, 이를 통해 다른 페이지로 이동합니다. 이를 통해 사이트 전체 또는 사이트의 많은 부분을 탐색할 수 있습니다.
  2. 페이지 수집: 각 페이지를 방문할 때 페이지의 HTML 콘텐츠를 다운로드하고 저장합니다. 이 과정은 웹 검색 엔진이 웹 페이지를 인덱싱하는 방식과 유사합니다.

크롤링 예제 (링크 추적)

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 시작 URL
start_url = 'https://example.com'

# 방문한 페이지를 추적하기 위한 집합
visited_urls = set()

def crawl(url):
    if url in visited_urls:
        return

    print(f"Crawling: {url}")
    visited_urls.add(url)
    
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 모든 링크 추출
    links = soup.find_all('a')
    for link in links:
        href = link.get('href')
        if href:
            # 절대 URL로 변환
            full_url = urljoin(url, href)
            crawl(full_url)

# 시작 URL에서 크롤링 시작
crawl(start_url)

스크래핑 (Scraping)

스크래핑은 특정 웹 페이지의 데이터를 추출하는 과정입니다. 이는 보통 크롤링을 통해 수집된 페이지나 특정 페이지의 HTML 구조에서 데이터를 추출하는 것을 말합니다. 스크래핑의 주요 활동은 다음과 같습니다:

  1. 데이터 추출: 특정 HTML 태그나 속성에서 데이터를 추출합니다. 예를 들어, div 태그 안의 텍스트나 a 태그의 링크를 추출하는 것입니다.
  2. API 호출 감시: 개발자 도구의 네트워크 탭을 사용하여 웹 애플리케이션이 사용하는 API 호출을 확인하고, 이를 통해 데이터를 추출하는 방법도 있습니다. 이를 통해 브라우저가 서버와 통신하는 방식을 모방하여 데이터를 얻을 수 있습니다.

스크래핑 예제 (데이터 추출)

import requests
from bs4 import BeautifulSoup

# 스크래핑할 URL
url = 'https://example.com/page'

# 페이지 데이터 요청 및 파싱
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 특정 데이터 추출 (예: 모든 제목 추출)
titles = soup.find_all('h1')
for title in titles:
    print(title.text)

차이점 요약

  • 크롤링: 웹 페이지의 링크를 따라가며 여러 페이지를 자동으로 방문하고, 각 페이지의 HTML을 수집하는 작업. 주로 웹 페이지의 구조를 탐색하고 전체 사이트의 콘텐츠를 수집하는 데 사용됨.
  • 스크래핑: 특정 웹 페이지에서 데이터를 추출하는 작업. 주로 HTML 태그나 API 호출에서 필요한 정보를 얻는 데 사용됨.