Python으로 웹 데이터 수집하기 — 웹 스크래핑 완전 입문 가이드

카테고리: AI Automation & Python
타겟 키워드: 파이썬 웹 스크래핑, 파이썬 크롤링 입문, BeautifulSoup 튜토리얼, requests 파이썬
예상 읽기 시간: 10분
난이도: ⭐☆☆ 입문자


들어가며

“인터넷에 있는 데이터를 자동으로 모을 수 있다면 얼마나 편할까?”

가격 비교, 뉴스 수집, 채용 공고 모니터링… 이 모든 것이 Python 몇 줄로 가능합니다. 이 글에서는 Python 웹 스크래핑의 기초를 완전 입문자 눈높이로 설명합니다. 코드를 처음 써보는 분도 따라올 수 있도록 한 단계씩 진행합니다.

✅ 이 글을 읽고 나면:

  • 웹 스크래핑이 무엇인지 정확히 이해합니다
  • requestsBeautifulSoup으로 실제 데이터를 수집할 수 있습니다
  • 간단한 자동화 스크립트를 직접 만들어볼 수 있습니다

1. 웹 스크래핑이란?

웹 스크래핑(Web Scraping)은 웹사이트의 내용을 자동으로 읽어와 원하는 데이터를 추출하는 기술입니다.

브라우저로 웹페이지를 열면 화면에 텍스트, 이미지, 표 등이 보이죠. 이 내용은 사실 HTML 코드로 이루어져 있습니다. 웹 스크래핑은 이 HTML을 Python이 읽어서, 필요한 부분만 골라내는 작업입니다.

[웹사이트] → HTML 코드 가져오기(requests) → 원하는 데이터 추출(BeautifulSoup) → 저장/활용

⚠️ 스크래핑 전에 꼭 확인하세요

  • 해당 사이트의 이용약관(robots.txt) 확인
  • 과도한 요청으로 서버에 부하를 주지 않기
  • 개인정보가 포함된 데이터 수집 금지
  • 수집한 데이터의 상업적 이용 여부 사전 확인

2. 준비물 설치

Python이 설치되어 있다면, 터미널(또는 명령 프롬프트)에서 아래 명령어를 실행합니다.

pip install requests beautifulsoup4
  • requests: 웹페이지의 HTML을 가져오는 라이브러리
  • beautifulsoup4: HTML에서 원하는 데이터를 추출하는 라이브러리

설치가 완료되면 준비 끝입니다!


3. 첫 번째 스크래핑 — HTML 가져오기

가장 먼저 할 일은 웹페이지의 HTML을 Python으로 가져오는 것입니다.

import requests

# 가져올 웹페이지 주소
url = "https://books.toscrape.com/"

# HTML 요청
response = requests.get(url)

# 상태 코드 확인 (200이면 성공)
print(response.status_code)

# HTML 내용 출력 (일부)
print(response.text[:500])

실행 결과:

200
<!DOCTYPE html>
<html>
    <head>
        <title>All products | Books to Scrape - Sandbox</title>
...

💡 books.toscrape.com은 스크래핑 연습을 위해 만들어진 합법적인 실습 사이트입니다. 마음껏 연습할 수 있어요!

200이라는 숫자가 보이면 성공입니다. HTTP 상태 코드 200은 “정상적으로 불러왔다”는 의미예요.


4. 두 번째 스크래핑 — 데이터 추출하기

HTML을 가져왔으니, 이제 그 안에서 원하는 데이터를 꺼내봅시다. BeautifulSoup을 사용합니다.

import requests
from bs4 import BeautifulSoup

url = "https://books.toscrape.com/"
response = requests.get(url)

# BeautifulSoup으로 HTML 파싱
soup = BeautifulSoup(response.text, "html.parser")

# 모든 책 제목 가져오기
books = soup.find_all("article", class_="product_pod")

for book in books[:5]:  # 처음 5개만 출력
    title = book.find("h3").find("a")["title"]
    price = book.find("p", class_="price_color").text
    print(f"📚 {title} — {price}")

실행 결과:

📚 A Light in the Attic — £51.77
📚 Tipping the Velvet — £53.74
📚 Soumission — £50.10
📚 Sharp Objects — £47.82
📚 Sapiens: A Brief History of Humankind — £54.23

책 제목과 가격이 자동으로 출력되었습니다! 🎉

코드 해설

코드역할
BeautifulSoup(response.text, "html.parser")HTML을 파이썬이 읽을 수 있는 구조로 변환
soup.find_all("article", class_="product_pod")특정 태그와 클래스를 가진 요소 전부 찾기
book.find("h3").find("a")["title"]h3 태그 안의 a 태그에서 title 속성값 추출
book.find("p", class_="price_color").text가격 텍스트 추출

5. 세 번째 스크래핑 — CSV 파일로 저장하기

데이터를 출력만 하면 아깝죠. 파일로 저장해봅시다.

import requests
from bs4 import BeautifulSoup
import csv

url = "https://books.toscrape.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

books = soup.find_all("article", class_="product_pod")

# CSV 파일로 저장
with open("books.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["제목", "가격", "평점"])  # 헤더

    for book in books:
        title = book.find("h3").find("a")["title"]
        price = book.find("p", class_="price_color").text.strip()
        rating = book.find("p", class_="star-rating")["class"][1]
        writer.writerow([title, price, rating])

print("✅ books.csv 저장 완료!")

실행하면 같은 폴더에 books.csv 파일이 생성됩니다. 엑셀로 열어보면 책 목록이 깔끔하게 정리되어 있을 거예요.


6. 자주 만나는 오류와 해결법

ConnectionError — 인터넷 연결 또는 URL 확인

# URL 오타가 없는지 확인
url = "https://books.toscrape.com/"  # https:// 포함 필수

AttributeError: 'NoneType' — 태그를 찾지 못한 경우

# find() 결과가 None일 수 있으므로 조건 처리
title_tag = book.find("h3")
if title_tag:
    title = title_tag.find("a")["title"]

❌ 한글 깨짐 — 인코딩 문제

# CSV 저장 시 encoding 명시
with open("books.csv", "w", encoding="utf-8-sig") as f:
    ...

7. 다음 단계로 나아가기

이번 튜토리얼에서 배운 내용을 정리하면:

  • requests로 웹페이지 HTML 가져오기
  • BeautifulSoup으로 원하는 데이터 추출하기
  • ✅ CSV 파일로 저장하기

웹 스크래핑을 더 깊이 배우고 싶다면 다음 주제들을 공부해보세요:

  1. 여러 페이지 순환 수집 — 페이지네이션 처리
  2. Selenium — 자바스크립트로 렌더링되는 동적 페이지 처리
  3. 스크래핑 주기 자동화 — 스케줄러로 매일 자동 수집

다음 글에서는 여러 페이지를 자동으로 순환하며 데이터를 수집하는 방법을 다룰 예정입니다. 뉴스레터를 구독하면 업로드 알림을 받을 수 있어요! 👇


마치며

웹 스크래핑은 한 번 익혀두면 데이터 분석, 자동화, AI 학습 데이터 수집 등 다양한 분야에서 활용할 수 있는 강력한 기술입니다. 오늘 코드를 직접 실행해보셨나요? 어떤 사이트를 스크래핑해보고 싶은지 댓글로 알려주세요!


태그: #파이썬 #웹스크래핑 #파이썬자동화 #BeautifulSoup #Python입문 #크롤링 #데이터수집

내부 링크 추천:


AMPLUS AI Insight | amplus.ai.kr

댓글 남기기