카테고리: AI Automation & Python
타겟 키워드: 파이썬 웹 스크래핑, 파이썬 크롤링 입문, BeautifulSoup 튜토리얼, requests 파이썬
예상 읽기 시간: 10분
난이도: ⭐☆☆ 입문자
들어가며
“인터넷에 있는 데이터를 자동으로 모을 수 있다면 얼마나 편할까?”
가격 비교, 뉴스 수집, 채용 공고 모니터링… 이 모든 것이 Python 몇 줄로 가능합니다. 이 글에서는 Python 웹 스크래핑의 기초를 완전 입문자 눈높이로 설명합니다. 코드를 처음 써보는 분도 따라올 수 있도록 한 단계씩 진행합니다.
✅ 이 글을 읽고 나면:
- 웹 스크래핑이 무엇인지 정확히 이해합니다
requests와BeautifulSoup으로 실제 데이터를 수집할 수 있습니다- 간단한 자동화 스크립트를 직접 만들어볼 수 있습니다
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 파일로 저장하기
웹 스크래핑을 더 깊이 배우고 싶다면 다음 주제들을 공부해보세요:
- 여러 페이지 순환 수집 — 페이지네이션 처리
- Selenium — 자바스크립트로 렌더링되는 동적 페이지 처리
- 스크래핑 주기 자동화 — 스케줄러로 매일 자동 수집
다음 글에서는 여러 페이지를 자동으로 순환하며 데이터를 수집하는 방법을 다룰 예정입니다. 뉴스레터를 구독하면 업로드 알림을 받을 수 있어요! 👇
마치며
웹 스크래핑은 한 번 익혀두면 데이터 분석, 자동화, AI 학습 데이터 수집 등 다양한 분야에서 활용할 수 있는 강력한 기술입니다. 오늘 코드를 직접 실행해보셨나요? 어떤 사이트를 스크래핑해보고 싶은지 댓글로 알려주세요!
태그: #파이썬 #웹스크래핑 #파이썬자동화 #BeautifulSoup #Python입문 #크롤링 #데이터수집
내부 링크 추천:
AMPLUS AI Insight | amplus.ai.kr