본문으로 건너뛰기
실습하기

BeautifulSoup을 이용한 HTML 파싱

웹 크롤링으로 원하는 정보를 얻기 위해서는, 수집한 HTML 데이터에서 원하는 정보를 추출해야 합니다.

BeautifulSoup은 이러한 작업을 쉽게 해결할 수 있도록 돕는 파이썬 패키지로, requests로 가져온 HTML 데이터를 파싱(Parsing, 구문 분석을 통한 데이터 추출)하는 데 사용됩니다.


HTML 데이터를 파싱하고 필요한 정보 추출하기

BeautifulSoup을 사용하면 HTML 문서를 파이썬 객체로 변환하여, 문서의 각 요소를 파이썬 코드로 간편하게 탐색하고 조작할 수 있습니다.

지금부터 BeautifulSoup을 사용해 HTML 데이터를 파싱하고, 필요한 정보를 추출하는 방법을 살펴보겠습니다.


BeautifulSoup으로 HTML 파싱하기

먼저, 웹 페이지에서 가져온 HTML 데이터를 BeautifulSoup 객체로 변환해야 합니다.

아래와 같이 requests 패키지를 사용해 HTML 데이터를 가져온 후, BeautifulSoup 객체를 생성하여 HTML을 파싱할 수 있습니다.

BeautifulSoup을 사용한 HTML 파싱
import requests
from bs4 import BeautifulSoup

# 요청할 URL
url = 'https://www.codefriends.net'

# GET 요청으로 HTML 데이터 가져오기
response = requests.get(url)

# BeautifulSoup 객체 생성 및 HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

# HTML의 제목(tag) 추출하기
title = soup.title.text

# 페이지 제목 출력
print(f"Page Title: {title}")

위 코드는 soup 변수에 HTML 데이터를 파싱한 BeautifulSoup 객체를 저장하고, soup.title.text를 통해 HTML 문서의 제목을 추출합니다.

soup.title 코드는 HTML 문서의 <title> 태그 내용을 가져오며, .text는 해당 태그의 텍스트를 추출합니다.


필요한 정보 추출하기

정보를 추출할 때는 아래와 같이 다양한 방법을 사용할 수 있습니다.

  1. 태그 이름으로 요소 찾기: HTML 문서에서 특정 태그를 찾습니다.
태그 이름으로 요소 찾기
# 모든 <a> 태그 찾기
links = soup.find_all('a')

# 모든 링크 출력
for link in links:
print(link.get('href'))

  1. 클래스 이름으로 요소 찾기: 특정 클래스 이름을 가진 요소를 찾을 수 있습니다.
클래스 이름으로 요소 찾기
# class="example"인 모든 <div> 태그 찾기
divs = soup.find_all('div', class_='example')

# 모든 <div> 태그의 텍스트 출력
for div in divs:
print(div.text)

  1. ID로 요소 찾기: 특정 ID를 가진 요소를 찾을 수 있습니다.
ID로 요소 찾기
# id="main-content"인 요소 찾기
main_content = soup.find(id='main-content')

# 선택된 요소의 텍스트 출력
print(main_content.text)

웹 페이지에서 기사 제목과 링크 추출하기

아래는 실제 웹 페이지에서 기사 제목과 링크를 추출하는 예시입니다:

기사 제목과 링크 추출하기
import requests
from bs4 import BeautifulSoup

# 추출할 웹 페이지 URL
url = 'https://news.ycombinator.com/'

# GET 요청으로 HTML 데이터 가져오기
response = requests.get(url)

# BeautifulSoup 객체 생성 및 HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

# 모든 기사 제목과 링크 추출
articles = soup.find_all('a')

# 기사 제목과 링크 출력
for article in articles:

# 기사 제목과 링크 추출
title = article.text

# 링크 URL
link = article.get('href')

# 제목과 링크 출력
print(f"Title: {title}, Link: {link}")

위 코드는 YCombinator 뉴스 페이지에서 a 태그를 찾아 기사 제목과 링크를 추출합니다.

이처럼 BeautifulSoup을 사용하면 웹 페이지의 구조를 분석해 원하는 데이터를 쉽게 추출할 수 있습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!