웹 스크래핑(Web Scraping)을 통해 데이터를 가져오려면 HTML 구조를 이해하고 원하는 정보를 추출하는 방법을 알아야 합니다.
Python의 BeautifulSoup 라이브러리를 활용하면 웹페이지에서 손쉽게 데이터를 추출할 수 있습니다.
이 글에서는 HTML 기본 구조와 BeautifulSoup을 이용한 데이터 추출 방법을 단계별로 설명하겠습니다.
HTML 기본 구조 이해하기
페이지는 보통 HTML(HyperText Markup Language) 형식으로 작성됩니다. 아래는 기본적인 HTML 문서 구조입니다.
<!DOCTYPE html>
<html>
<head>
<title>예제 웹페이지</title>
</head>
<body>
<h1>안녕하세요, 웹 스크래핑!</h1>
<p class="description">이 페이지는 웹 스크래핑 예제입니다.</p>
<a href="https://example.com">Example 사이트</a>
</body>
</html>
<h1>, <p> 태그: 문서의 제목과 문단을 정의
class="description": 특정 요소를 구별하는 클래스 속성
<a href="URL">: 링크(Anchor) 태그
웹 스크래핑을 할 때는 원하는 데이터가 어떤 HTML 태그 안에 위치하는지 파악하는 것이 중요합니다.
BeautifulSoup 설치
BeautifulSoup은 Python에서 HTML 문서를 쉽게 분석하고 필요한 데이터를 추출할 수 있도록 도와주는 라이브러리입니다.
설치 방법은 아래와 같습니다:
pip install beautifulsoup4
BeautifulSoup으로 HTML 데이터 파싱하기
BeautifulSoup을 사용하여 HTML 문서를 로드하고 분석하는 기본 과정을 살펴보겠습니다.
from bs4 import BeautifulSoup
html = """
<html>
<head><title>웹 스크래핑 예제</title></head>
<body>
<h1>안녕하세요, 웹 스크래핑!</h1>
<p class="description">이 페이지는 웹 스크래핑 예제입니다.</p>
<a href="https://example.com">Example 사이트</a>
</body>
</html>
"""
# BeautifulSoup 객체 생성
soup = BeautifulSoup(html, "html.parser")
# HTML 구조 출력
print(soup.prettify()) # 들여쓰기된 형태로 출력
BeautifulSoup(html, "html.parser") → HTML 문서를 파싱(분석)
soup.prettify() → HTML 코드를 보기 좋게 출력한다
특정 태그 선택 및 내용 가져오기
BeautifulSoup을 사용하면 특정 HTML 태그의 내용을 쉽게 가져올 수 있습니다.
제목(h1) 태그 가져오기
print(soup.h1.text) # "안녕하세요, 웹 스크래핑!"
soup.h1 → 첫 번째 <h1> 태그 선택
.text → 태그 내부 텍스트만 출력
특정 태그(class) 가져오기
print(soup.find("p", class_="description").text)
soup.find("p", class_="description") → class="description"인 <p> 태그 찾기
링크(a) 태그에서 URL 가져오기
link = soup.find("a") # 첫 번째 <a> 태그 찾기
print(link["href"]) # "https://example.com"
link["href"] → <a> 태그의 href 속성 값 가져오기
여러 개의 요소 가져오기 (find_all)
find_all() 을 사용하면 특정 태그를 모두 가져올 수 있습니다.
html = """
<ul>
<li>Python</li>
<li>Java</li>
<li>C++</li>
</ul>
"""
soup = BeautifulSoup(html, "html.parser")
# 모든 <li> 태그 가져오기
items = soup.find_all("li")
for item in items:
print(item.text)
soup.find_all("li") → 모든 <li> 태그 리스트 반환
.text → 태그 내부 텍스트만 출력
출력 결과
Python
Java
C++
CSS 선택자로 요소 선택하기 (select())
select() 메서드를 사용하면 CSS 선택자를 활용하여 특정 요소를 찾을 수 있습니다.
html = """
<div class="container">
<p class="text">첫 번째 문장</p>
<p class="text">두 번째 문장</p>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
# CSS 선택자로 <p> 태그 찾기
paragraphs = soup.select(".container .text")
for p in paragraphs:
print(p.text)
.container .text → class="container" 내부의 class="text" 태그 선택
출력 결과
첫 번째 문장
두 번째 문장
실전 예제 – 웹페이지에서 데이터 가져오기
이제 실제 웹사이트에서 데이터를 가져오는 예제를 만들어 보겠습니다.
import requests
from bs4 import BeautifulSoup
# 웹페이지 요청
url = "https://news.ycombinator.com/"
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, "html.parser")
# 기사 제목 가져오기
titles = soup.find_all("a", class_="storylink")
for i, title in enumerate(titles[:5]): # 상위 5개 뉴스 출력
print(f"{i+1}. {title.text} ({title['href']})")
requests.get(url) → 웹페이지 HTML 가져오기
soup.find_all("a", class_="storylink") → 뉴스 제목 추출
결론 및 정리
✔ HTML 구조를 이해하면 웹 데이터 추출이 쉬워진다!
✔ BeautifulSoup은 웹 스크래핑에 필수적인 강력한 라이브러리다
✔ find() / find_all() / select() 를 활용하여 원하는 데이터 선택 가능
✔ 실제 웹사이트에서 뉴스 제목, 가격, 리뷰 등 다양한 데이터 추출 가능
이제 BeautifulSoup을 활용하여 원하는 웹 데이터를 직접 추출해 보세요!
#웹스크래핑 #Python #BeautifulSoup #HTML파싱 #데이터분석 #크롤링 #파이썬강의 #프로그래밍 #데이터수집
웹 스크래핑이란? – 개념과 활용 사례 (0) | 2025.03.20 |
---|---|
파이썬 배우기: OOP 기본 – 추상화와 다형성 (0) | 2025.03.19 |
파이썬 배우기: OOP 기본 – 캡슐화 및 상속 (0) | 2025.03.14 |
파이썬 배우기: 정규 표현식(Regex) (0) | 2025.03.12 |
파이썬 배우기: 고차 함수, 클로저 및 데코레이터 완벽 정리 (0) | 2025.03.02 |