본문 바로가기
카테고리 없음

코딩으로 자동화된 크롤링 (Crawling) 시스템 만들기

by revolu 2025. 2. 16.

Python을 활용한 자동화된 웹 크롤링(Web Crawling) 시스템 구축 방법에 대해 알아보겠습니다. BeautifulSoup, Requests, Selenium을 이용한 크롤링 기법부터 데이터 저장 및 스케줄링까지 자세히 설명합니다. 크롤링을 자동화하고 효율적으로 활용하는 법을 익힐 수 있습니다.

1. 웹 크롤링이란?

웹 크롤링(Web Crawling)이란 인터넷상의 웹페이지에서 필요한 정보를 자동으로 수집하는 기술입니다. 크롤링을 통해 뉴스, 상품 정보, 데이터 분석 등에 필요한 자료를 효율적으로 모을 수 있습니다. 대표적인 웹 크롤링 활용 사례는 다음과 같습니다.

  • 뉴스 기사 자동 수집
  • 온라인 쇼핑몰 가격 비교
  • 데이터 분석 및 머신러닝 학습 데이터 구축

본 글에서는 Python을 이용해 자동화된 크롤링 시스템을 구축하는 방법을 단계별로 알아보겠습니다.

2. 크롤링에 필요한 환경 설정

(1) Python 설치

크롤링을 수행하려면 Python이 필요합니다. 최신 버전의 Python을 공식 웹사이트에서 다운로드하여 설치합니다.

설치 후 다음 명령어로 버전을 확인합니다.

python --version

(2) 필요한 라이브러리 설치

웹 크롤링에 자주 사용되는 라이브러리는 BeautifulSoupRequests입니다. 또한, 동적 웹페이지 크롤링을 위해 Selenium도 사용할 수 있습니다.

pip install requests beautifulsoup4 selenium

3. 기본적인 크롤링 구현 (정적 페이지)

(1) Requests와 BeautifulSoup을 이용한 크롤링

import requests
from bs4 import BeautifulSoup

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

# 특정 태그 찾기
titles = soup.find_all("h2")
for title in titles:
    print(title.text)

위 코드에서는 requests.get()으로 웹페이지 HTML을 가져오고, BeautifulSoup을 이용해 원하는 데이터를 추출합니다.

4. 동적 웹사이트 크롤링 (Selenium 활용)

Selenium은 JavaScript로 생성되는 웹페이지 데이터를 가져올 때 유용합니다.

(1) Selenium 설정

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument("--headless")  # 브라우저 창을 열지 않음
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)

URL = "https://example.com"
driver.get(URL)

# 특정 요소 가져오기
elements = driver.find_elements(By.TAG_NAME, "h2")
for element in elements:
    print(element.text)

driver.quit()

위 코드를 실행하면 웹페이지를 자동으로 열고 데이터를 추출한 후 종료합니다.

5. 자동화된 크롤링 시스템 구축

웹 크롤링을 자동화하려면 일정 주기로 실행할 수 있도록 스케줄링을 추가해야 합니다.

(1) schedule 라이브러리 설치

pip install schedule

(2) 일정 주기로 크롤러 실행하기

import schedule
import time

def job():
    print("웹 크롤링 실행 중...")
    # 크롤링 코드 추가

schedule.every(1).hours.do(job)  # 1시간마다 실행

while True:
    schedule.run_pending()
    time.sleep(1)

이제 크롤링 코드가 정해진 주기에 맞춰 자동 실행됩니다.

6. 크롤링 데이터 저장 및 활용

크롤링한 데이터를 CSV 또는 데이터베이스(DB)에 저장하여 활용할 수 있습니다.

(1) CSV 파일로 저장

import csv

data = ["제목1", "제목2", "제목3"]

with open("data.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["제목"])
    for row in data:
        writer.writerow([row])

(2) SQLite 데이터베이스 저장

import sqlite3

conn = sqlite3.connect("data.db")
cursor = conn.cursor()

cursor.execute("CREATE TABLE IF NOT EXISTS articles (title TEXT)")
cursor.execute("INSERT INTO articles VALUES (?)", ("제목1",))

conn.commit()
conn.close()

이렇게 하면 크롤링한 데이터를 저장하고 나중에 분석에 활용할 수 있습니다.

7. 크롤링 시 유의할 점

(1) robots.txt 확인하기

크롤링을 하기 전에 웹사이트의 robots.txt 파일을 확인하여 허용된 범위를 준수해야 합니다.

예제:

User-agent: *
Disallow: /private/

위 규칙이 있는 경우 /private/ 페이지는 크롤링하면 안 됩니다.

(2) 요청 간격 조절

서버 부하를 줄이기 위해 time.sleep()을 사용하여 요청 간격을 조절하는 것이 중요합니다.

import time

for i in range(5):
    print(f"{i+1}번째 크롤링 실행")
    time.sleep(2)  # 2초 대기

(3) 헤더 정보 추가

일부 웹사이트는 크롤러의 접근을 차단할 수 있으므로, 헤더 정보를 추가하는 것이 좋습니다.

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get(URL, headers=headers)

8. 결론

본 글에서는 Python을 활용하여 자동화된 웹 크롤링 시스템을 구축하는 방법에 대해 알아보았습니다. 웹 크롤링 (Web Crawling)은 뉴스, 쇼핑몰, 데이터 분석 등 다양한 분야에서 유용하게 활용될 수 있으며, 이를 통해 반복적인 데이터 수집 작업을 자동화할 수 있습니다. 자동화된 크롤링 시스템을 만들 때는 정적 페이지와 동적 페이지 크롤링 기법을 적절히 활용하고, 크롤링한 데이터를 효율적으로 저장 및 관리하는 것이 중요합니다. 또한, 요청 간격을 조절하고, 웹사이트의 robots.txt 규칙을 준수하며, API가 제공되는 경우 이를 활용하는 것이 윤리적이고 안정적인 크롤링의 핵심 요소입니다.

앞으로 웹 크롤링을 더 발전시키고 싶다면, 머신러닝과 자연어 처리(NLP) 기술을 적용하여 수집한 데이터를 분석하는 방법도 고려할 수 있습니다. 예를 들어, 뉴스 크롤링을 활용한 감성 분석, 상품 가격 변동 예측, 트렌드 분석 등의 응용이 가능합니다. 이번 글에서 배운 내용을 바탕으로 직접 실습하면서 자신만의 자동화된 크롤링 프로젝트를 만들어 보세요!