웹 페이지가 그냥 예쁜 이미지와 텍스트라고 생각한다면, 그건 오해야. 이건 양파 같아 — 층이 많고, 데이터를 얼마나 많이 추출할 수 있는지 알게 되면 (물론 기쁨의) 눈물을 흘리게 될 거야. 오늘은 BeautifulSoup
라이브러리를 사용해서 HTML 페이지를 파헤쳐 보자. 가상 삽 준비됐지? 시작하자!
1. HTML 문서 분석
간단한 페이지
몇 가지 간단한 HTML 문서를 분석하고 그 구성 요소와 데이터 추출에 유용한 요소를 살펴보자.
뉴스 페이지의 예:
<html>
<head>
<title>뉴스</title>
</head>
<body>
<h1>오늘의 주요 소식</h1>
<p>오늘 중요한 일이 일어났습니다!</p>
</body>
</html>
이 예제에서 h1
은 기사 제목이고, p
는 본문이야.
HTML 구조가 스크래핑에 미치는 영향
BeautifulSoup
을 사용하기 전에, 분석하려는 HTML 문서의 구조를 이해하는 것이 중요해. 그래야 어떤 부분이 필요한 데이터를 포함하고 있는지 알 수 있어. 예를 들어 페이지 제목을 찾으려면 <h1>
를, 리스트를 추출하려면 <ul>
와 <li>
를 확인하자.
스크래핑 준비
데이터를 추출하기 전에 주요 태그와 속성을 확인하는 것이 중요해. 예를 들어, 웹 개발자가 페이지에 class="headline"
같은 속성을 사용해서 데이터를 정리했다면, 그걸 이용하자. 브라우저의 개발자 도구를 사용해서 HTML 구조를 살펴봐. 요소를 오른쪽 클릭하고 "검사"
(Google Chrome 기준)를 선택하자.
2. 라이브러리 설치 및 설정
BeautifulSoup
과 requests 설치
HTML 작업을 위해 BeautifulSoup
라이브러리를 사용할 거야. HTML 페이지를 로드하려면 requests
도 필요해. 설치는 간단하고, 콘솔에서 몇 가지 명령만 입력하면 돼:
pip install beautifulsoup4 requests
requests와 BeautifulSoup
의 협업
requests는 웹 페이지에서 HTML을 로드해 주고, BeautifulSoup
은 이를 분석하는 데 도움을 줄 거야. 이게 실제로 어떻게 동작하는지 보자:
import requests
from bs4 import BeautifulSoup
# 페이지 로드
url = 'https://example.com'
response = requests.get(url)
# BeautifulSoup로 페이지 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# 페이지 제목 추출
title = soup.title.text
print('제목:', title)
3. 태그를 통한 탐색 및 데이터 추출
탐색 메서드
이제 HTML 문서를 갖고 있으니, BeautifulSoup
을 사용해 탐색할 수 있어. .select()
같은 멋진 메서드는 CSS 선택자를 사용해 데이터를 추출할 수 있게 해줘.
태그를 통한 데이터 추출
BeautifulSoup
은 find
와 find_all
같은 메서드를 제공해서, 특정 태그를 기준으로 요소를 찾을 수 있어. 이렇게 원하는 데이터를 쉽게 찾을 수 있어:
# 첫 번째 단락 찾기
paragraph = soup.find('p').text
print('첫 번째 단락:', paragraph)
# 리스트의 모든 항목 찾기
list_items = soup.find_all('li')
for item in list_items:
print('리스트 항목:', item.text)
속성을 사용한 필터링
특정 조건(예: 특정 class
가 있는 경우)에 맞는 요소를 추출해야 할 때가 있어. BeautifulSoup
는 이 작업을 쉽게 만들어줘:
# 특정 클래스가 있는 요소 찾기
headline = soup.find('h1', class_='main-headline').text
print('제목:', headline)
4. CSS 선택자 사용
CSS 선택자란?
CSS 선택자는 Python 프로그래머의 관점에서 매우 강력한 도구야. 이는 특정 기준에 따라 데이터를 추출할 수 있는 기능을 제공해줘. 동일한 스타일의 요소를 찾는 데 사용할 수 있어서 스크래핑 작업을 더 유연하고 정확하게 만들어줘.
BeautifulSoup
에서 선택자 사용
BeautifulSoup
은 select
메서드를 사용해 CSS 선택자를 사용할 수 있게 해줘. 예를 들어:
# 모든 링크 선택
links = soup.select('a')
for link in links:
print('링크:', link['href'])
선택자를 조합해서 더 정밀한 선택도 가능해. 예를 들어, soup.select('div.article h2')
는 div
안의 h2
를 모두 선택해줘.
CSS 선택자로 검색 예제
이제 배운 것을 실습해 보자. highlight
라는 클래스를 가진 모든 단락을 선택해서 그 내용을 출력해 보자:
# 'highlight' 클래스를 가진 모든 단락 추출
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
print('강조된 단락:', para.text)
여기까지야. 다음 강의까지 스크래핑 기술을 꼭 연습해 봐. 파싱의 멋진 세계에서 행운을 빌어!
GO TO FULL VERSION