반응형
웹 크롤링은 원하는 정보를 자동으로 수집하는 데 매우 유용한 기술입니다. 여기에 파이썬의 pymysql 라이브러리를 결합하면, 수집한 데이터를 실시간으로 MySQL 데이터베이스에 저장할 수 있어 자동화된 데이터 관리 시스템을 구축할 수 있습니다.
이 글에서는 requests와 BeautifulSoup으로 웹 데이터를 수집하고, pymysql로 해당 데이터를 MySQL 테이블에 저장하는 실전 예제를 소개합니다.
사용 기술 소개
- requests: 웹 페이지 요청을 보내 HTML 데이터를 가져옴
- BeautifulSoup: HTML 파싱을 통해 원하는 데이터를 추출
- pymysql: 파이썬에서 MySQL 데이터베이스 연동 및 쿼리 실행
라이브러리 설치
pip install pymysql requests beautifulsoup4
예제 시나리오: IT 뉴스 제목 수집 및 저장
예제에서는 IT 관련 뉴스 웹사이트에서 제목을 크롤링하고, 그 결과를 MySQL 테이블에 실시간 저장하는 방식으로 구성합니다.
1. MySQL 테이블 생성
CREATE TABLE news (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
source VARCHAR(100),
crawled_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 파이썬 코드로 데이터 크롤링 + 저장
import requests
from bs4 import BeautifulSoup
import pymysql
from datetime import datetime
# DB 연결 설정
conn = pymysql.connect(
host='localhost',
user='your_user',
password='your_password',
database='your_database',
charset='utf8mb4'
)
cursor = conn.cursor()
# 크롤링 대상 URL
url = "https://news.hankyung.com/it"
# 크롤링 시작
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
# 뉴스 제목 추출
news_items = soup.select("a.tit") # 선택자 수정 필요시 HTML 구조에 맞게 변경
for item in news_items:
title = item.get_text(strip=True)
if title:
sql = "INSERT INTO news (title, source) VALUES (%s, %s)"
cursor.execute(sql, (title, '한국경제IT'))
conn.commit()
cursor.close()
conn.close()
print("크롤링 및 DB 저장 완료")
포인트 설명
requests.get()
: HTML 페이지 요청BeautifulSoup
: CSS 선택자로 제목 추출pymysql
: DB 연결 후 INSERT 쿼리 실행conn.commit()
: 데이터베이스에 실제 반영
에러 방지를 위한 체크리스트
- MySQL 연결 시 포트, 계정 정보 정확히 입력
- 한글 저장 시
utf8mb4
설정 필수 - 중복 저장 방지를 위해
UNIQUE
제약 조건이나중복 검사 로직
추가 가능
실무 확장 아이디어
- 크롤링 주기를 정해 자동 실행 (예: 1시간마다 실행)
- 크롤링 결과를 API로 제공하거나 웹 앱에 연동
- 기사 본문, 작성일자 등 추가 필드 저장
- 데이터 수집 내역을 엑셀로 자동 백업
정리하며
pymysql을 활용하면 크롤링 데이터를 실시간으로 MySQL에 저장할 수 있어, 반복적인 수작업을 줄이고 데이터를 체계적으로 관리할 수 있습니다. 웹 크롤링과 데이터베이스 연동은 데이터 자동화 시스템의 핵심이며, 업무 자동화나 개인 프로젝트에도 큰 도움이 됩니다.
실제 프로젝트에 맞게 테이블 구조를 확장하고, 저장 조건을 추가하면 더욱 안정적인 시스템으로 발전시킬 수 있습니다. 이 글을 참고해 실전 자동화 시스템을 구성해보세요.
반응형