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

파이썬으로 웹 스크래핑 자동화하기 BeautifulSoup Selenium 데이터 저장

by 혜택보관소 2024. 11. 19.

웹 스크래핑(Web Scraping)은 웹 페이지에서 데이터를 자동으로 추출하는 유용한 기술입니다.

파이썬에서는 BeautifulSoupSelenium 같은 라이브러리를 사용해 다양한 웹 데이터를 크롤링할 수 있습니다.

이번 글에서는 데이터를 수집하고 이를 CSV 파일 또는 데이터베이스에 저장하는 방법을 예제와 함께 알아보겠습니다.

파이썬 웹 스크래핑

웹 스크래핑을 위한 준비

스크래핑 작업을 시작하기 전에 필요한 라이브러리를 설치해야 합니다.

필요한 라이브러리 설치

pip install beautifulsoup4
pip install selenium
pip install requests

ChromeDriver 설치

Selenium을 사용할 경우, 웹 브라우저를 제어하기 위한 ChromeDriver가 필요합니다.

ChromeDriver 다운로드 페이지에서 현재 사용하는 Chrome 버전에 맞는 드라이버를 다운로드하고 경로를 설정합니다.

BeautifulSoup을 사용한 웹 스크래핑

BeautifulSoup은 HTML과 XML 데이터를 파싱하고, 원하는 요소를 쉽게 추출할 수 있도록 도와주는 라이브러리입니다.

간단한 예제로 뉴스 제목을 추출해 보겠습니다.

예제: 뉴스 제목 스크래핑

import requests
from bs4 import BeautifulSoup

# 웹 페이지 요청
url = "https://news.example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 뉴스 제목 추출
titles = soup.select("h2.title")  # CSS 선택자로 제목 선택
for title in titles:
    print("뉴스 제목:", title.text)

위 코드에서는 requests 모듈로 웹 페이지의 HTML을 가져오고, BeautifulSoup으로 파싱하여 <h2> 태그의 제목을 추출합니다.

Selenium을 사용한 동적 웹 스크래핑

Selenium은 자바스크립트로 렌더링되는 동적 웹 페이지를 처리하는 데 유용합니다. 예를 들어, 페이지를 자동으로 스크롤하거나 버튼을 클릭해야 데이터를 볼 수 있는 경우 Selenium을 사용할 수 있습니다.

예제: 동적 웹 페이지에서 데이터 스크래핑

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

# ChromeDriver 설정
driver_path = "your/path/to/chromedriver"
driver = webdriver.Chrome(driver_path)

# 웹 페이지 열기
driver.get("https://dynamic.example.com")

# 스크롤 다운 및 데이터 수집
time.sleep(3)  # 페이지 로딩 대기
for _ in range(3):  # 3번 스크롤
    driver.find_element(By.TAG_NAME, "body").send_keys(Keys.END)
    time.sleep(2)

# 데이터 추출
titles = driver.find_elements(By.CSS_SELECTOR, "h2.title")
for title in titles:
    print("제목:", title.text)

driver.quit()

위 코드에서는 Selenium으로 동적 웹 페이지를 스크롤하며 데이터를 수집합니다.

데이터 저장

수집한 데이터를 CSV 파일로 저장하거나 데이터베이스에 삽입할 수 있습니다.

CSV 파일에 데이터 저장

CSV 파일은 데이터를 저장하고 공유하는 데 널리 사용됩니다. csv 모듈을 사용해 데이터를 저장할 수 있습니다.

예제: CSV 파일에 데이터 저장

import csv

# 수집된 데이터
data = [
    {"제목": "뉴스1", "링크": "https://example.com/news1"},
    {"제목": "뉴스2", "링크": "https://example.com/news2"},
]

# CSV 파일 저장
with open("news.csv", "w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["제목", "링크"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

print("데이터가 CSV 파일에 저장되었습니다.")

데이터베이스에 데이터 저장

SQLite와 같은 데이터베이스를 사용해 데이터를 저장하면 더 구조적으로 관리할 수 있습니다.

예제: SQLite에 데이터 저장

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect("news.db")
cursor = conn.cursor()

# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS news (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    link TEXT
)
""")

# 데이터 삽입
data = [("뉴스1", "https://example.com/news1"), ("뉴스2", "https://example.com/news2")]
cursor.executemany("INSERT INTO news (title, link) VALUES (?, ?)", data)

conn.commit()
conn.close()

print("데이터가 데이터베이스에 저장되었습니다.")

전체 예제: 웹 스크래핑 및 CSV 저장

다음은 BeautifulSoup을 사용해 뉴스 제목과 링크를 스크래핑한 후, CSV 파일로 저장하는 전체 예제입니다.

import requests
from bs4 import BeautifulSoup
import csv

# 웹 스크래핑
url = "https://news.example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

data = []
titles = soup.select("h2.title")
links = soup.select("h2.title a")
for title, link in zip(titles, links):
    data.append({"제목": title.text, "링크": link["href"]})

# CSV 파일 저장
with open("news.csv", "w", newline="", encoding="utf-8") as csvfile:
    fieldnames = ["제목", "링크"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerows(data)

print("뉴스 데이터가 CSV 파일에 저장되었습니다.")

마무리

이번 글에서는 파이썬의 BeautifulSoup과 Selenium을 사용해 웹 스크래핑을 수행하고 데이터를 저장하는 방법을 살펴보았습니다.

데이터 수집 자동화는 업무 효율성을 높이고, 다양한 데이터를 분석할 수 있는 강력한 도구가 됩니다.

실습을 통해 자신만의 스크래핑 자동화 프로젝트를 구현해 보세요!