Python을 활용한 자동화된 웹 크롤링(Web Crawling) 시스템 구축 방법에 대해 알아보겠습니다. BeautifulSoup, Requests, Selenium을 이용한 크롤링 기법부터 데이터 저장 및 스케줄링까지 자세히 설명합니다. 크롤링을 자동화하고 효율적으로 활용하는 법을 익힐 수 있습니다.
1. 웹 크롤링이란?
웹 크롤링(Web Crawling)이란 인터넷상의 웹페이지에서 필요한 정보를 자동으로 수집하는 기술입니다. 크롤링을 통해 뉴스, 상품 정보, 데이터 분석 등에 필요한 자료를 효율적으로 모을 수 있습니다. 대표적인 웹 크롤링 활용 사례는 다음과 같습니다.
- 뉴스 기사 자동 수집
- 온라인 쇼핑몰 가격 비교
- 데이터 분석 및 머신러닝 학습 데이터 구축
본 글에서는 Python을 이용해 자동화된 크롤링 시스템을 구축하는 방법을 단계별로 알아보겠습니다.
2. 크롤링에 필요한 환경 설정
(1) Python 설치
크롤링을 수행하려면 Python이 필요합니다. 최신 버전의 Python을 공식 웹사이트에서 다운로드하여 설치합니다.
설치 후 다음 명령어로 버전을 확인합니다.
python --version
(2) 필요한 라이브러리 설치
웹 크롤링에 자주 사용되는 라이브러리는 BeautifulSoup과 Requests입니다. 또한, 동적 웹페이지 크롤링을 위해 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) 기술을 적용하여 수집한 데이터를 분석하는 방법도 고려할 수 있습니다. 예를 들어, 뉴스 크롤링을 활용한 감성 분석, 상품 가격 변동 예측, 트렌드 분석 등의 응용이 가능합니다. 이번 글에서 배운 내용을 바탕으로 직접 실습하면서 자신만의 자동화된 크롤링 프로젝트를 만들어 보세요!