반응형
1. 이전 강의 리뷰
이전 강의에서는 selenium을 활용한 동적 웹페이지 크롤링을 학습하며, 다음과 같은 개념을 다뤘습니다.
- selenium을 이용한 웹 브라우저 자동 제어
- 네이버 뉴스에서 기사 제목 가져오기
- 로그인 자동화: 아이디와 비밀번호 입력 후 자동 로그인
- 스크롤 내리면서 추가 데이터 크롤링
이번 강의에서는 크롤링한 데이터를 정제하고 저장하는 방법을 배워보겠습니다. pandas를 활용한 데이터 가공, 정규 표현식으로 텍스트 필터링, JSON 및 CSV 저장 방법, 그리고 데이터베이스 연동까지 다뤄보겠습니다.
2. 크롤링한 데이터 정제하기
웹에서 가져온 데이터는 불필요한 공백, 특수 문자, HTML 태그 등이 포함될 수 있습니다. pandas와 re(정규 표현식)을 이용해 데이터를 정제하는 방법을 배워봅시다.
✅ 필수 라이브러리 설치
pip install pandas
🔹 pandas를 활용한 데이터 정제 방법
import pandas as pd
import re
# 예제 데이터
data = {
"title": [" 파이썬 웹 크롤링 완벽 가이드! ", "(핫) 데이터 분석 시작하기", "정규 표현식 101: @기초부터 응용까지!"],
"url": ["https://example.com/1", "https://example.com/2", "https://example.com/3"]
}
# DataFrame 생성
df = pd.DataFrame(data)
# 텍스트 정제 함수
def clean_text(text):
text = text.strip() # 앞뒤 공백 제거
text = re.sub(r"[^가-힣a-zA-Z0-9 ]", "", text) # 특수 문자 제거
return text
# 데이터 정제 적용
df["title"] = df["title"].apply(clean_text)
print(df)
🔹 pandas를 활용한 추가적인 데이터 정제 방법
정제 방법 예제 코드
NaN(결측치) 제거 | df.dropna() |
중복 데이터 제거 | df.drop_duplicates() |
소문자로 변환 | df["column"].str.lower() |
대문자로 변환 | df["column"].str.upper() |
특정 문자열 포함 필터링 | df[df["title"].str.contains("파이썬")] |
날짜 데이터 변환 | df["date"] = pd.to_datetime(df["date"]) |
HTML 태그 제거 | df["text"] = df["text"].str.replace(r"<.*?>", "", regex=True) |
특정 숫자 패턴 제거 | df["text"] = df["text"].str.replace(r"\d+", "", regex=True) |
공백 제거 | df["text"] = df["text"].str.strip() |
특정 단어 대체 | df["text"] = df["text"].str.replace("Python", "파이썬") |
URL 제거 | df["text"] = df["text"].str.replace(r"http[s]?://\S+", "", regex=True) |
이메일 제거 | df["text"] = df["text"].str.replace(r"[\w\.-]+@[\w\.-]+", "", regex=True) |
특수 문자 제거 | df["text"] = df["text"].str.replace(r"[^가-힣a-zA-Z0-9 ]", "", regex=True) |
숫자 변환 | df["number"] = pd.to_numeric(df["number"]) |
문자열 결합 | df["new_col"] = df["col1"] + " " + df["col2"] |
특정 열 제거 | df.drop(columns=["unwanted_column"], inplace=True) |
문자열 길이 추가 | df["text_length"] = df["text"].str.len() |
첫 글자 대문자로 변환 | df["text"] = df["text"].str.capitalize() |
특정 행 필터링 | df[df["column"] > 50] |
3. 데이터 저장 방식 비교
저장 방식 장점 단점
CSV | 간단한 구조, 대부분의 프로그램에서 지원 | 대량 데이터 처리 속도가 느림 |
JSON | 계층적 데이터 구조, API 응답 형식과 유사 | 파일 크기가 커질 수 있음 |
SQLite | 가벼운 데이터베이스, 파일 기반 저장 | 대용량 데이터 처리에는 부적합 |
MySQL/PostgreSQL | 대량 데이터 처리 가능, 빠른 속도 | 설정이 필요하며 서버 관리 필요 |
반응형
4. JSON 및 CSV 파일로 데이터 저장
🔹 pandas를 활용한 CSV 저장
# CSV 파일로 저장
df.to_csv("data.csv", index=False, encoding="utf-8-sig")
print("CSV 파일 저장 완료!")
🔹 pandas를 활용한 JSON 저장
# JSON 파일로 저장
df.to_json("data.json", orient="records", force_ascii=False, indent=4)
print("JSON 파일 저장 완료!")
utf-8-sig 인코딩을 사용하면 한글이 깨지지 않습니다.
5. 데이터베이스(SQLite) 저장 및 조회
SQLite를 활용하여 데이터를 저장하고 조회하는 방법을 배워보겠습니다. 이 부분은 보다 깊이 있는 내용을 다루기 때문에 이후 강좌에서 자세히 설명하겠습니다.
import sqlite3
# 데이터베이스 연결
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS articles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
url TEXT
)
""")
# 데이터 삽입
df.to_sql("articles", conn, if_exists="replace", index=False)
# 데이터 조회
cursor.execute("SELECT * FROM articles")
rows = cursor.fetchall()
for row in rows:
print(row)
# 연결 종료
conn.close()
🎯 이번 강의를 마치며
오늘도 여기까지 따라오느라 고생 많으셨습니다! 😊 웹에서 가져온 데이터는 그대로 사용할 수 없는 경우가 많습니다. 이번 강의에서는 데이터를 깔끔하게 정제하고 저장하는 다양한 방법을 배웠습니다.
- pandas를 이용해 불필요한 데이터 제거 및 정리
- 정규 표현식을 활용한 텍스트 필터링
- CSV, JSON 저장 방법
- SQLite 데이터베이스 저장 (심화 강의 예정)
이제 여러분은 크롤링한 데이터를 원하는 형태로 가공하고 저장할 수 있습니다. 💪
다음 강의에서는 더 강력한 크롤링 프레임워크인 Scrapy를 활용해 대량 데이터 수집 자동화에 대해 배워보겠습니다. 기대해주세요! 🚀
🚀 다음 강의 예고
5부: Scrapy 프레임워크를 활용한 크롤링
- Scrapy 개요 및 설치
- Scrapy의 동작 방식 (Spider, Pipeline, Middleware)
- Scrapy를 이용한 크롤링 기본 예제
- Scrapy로 대량 데이터 수집 자동화
반응형
'파이썬 > [파이썬을 활용한 웹 크롤링 완벽 가이드]' 카테고리의 다른 글
📌 5. Scrapy 프레임워크를 활용한 크롤링 (2) | 2025.02.12 |
---|---|
📌 3. selenium을 이용한 동적 웹페이지 크롤링 (0) | 2025.02.10 |
📌 2. requests와 BeautifulSoup을 활용한 기초 크롤링 (0) | 2025.02.09 |
📌 1. 웹 크롤링 개요 및 환경 설정 (0) | 2025.02.08 |
댓글