BeautifulSoup 라이브러리

Ryan·2025년 1월 28일

Python/Pandas

목록 보기
12/23

Python HTML Parsing: Beautiful Soup, lxml, html.parser 비교

웹 스크래핑(Web Scraping)을 할 때, HTML을 파싱하여 원하는 데이터를 추출하는 것이 필수적입니다. Python에서는 다양한 HTML 파싱 라이브러리를 사용할 수 있으며, 이 글에서는 Beautiful Soup, lxml, html.parser를 비교하고 각각의 사용법을 소개하겠습니다.


1. HTML 파싱 라이브러리 개요

1.1 Beautiful Soup

  • 장점: 사용하기 쉬우며 문서화가 잘 되어 있고, 커뮤니티 지원이 풍부함.
  • 특징: 깨진 HTML도 잘 처리할 수 있음.
  • 예제 코드:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<html><body><h1>Hello</h1></body></html>', 'html.parser')
print(soup.h1.string)  # Output: Hello

1.2 lxml

  • 장점: 매우 빠르고, XPath 같은 고급 쿼리를 지원함.
  • 단점: 문서화가 비교적 부족.
  • 예제 코드:
from lxml import etree
tree = etree.fromstring('<html><body><h1>Hello</h1></body></html>')
print(tree.find('./h1').text)  # Output: Hello

1.3 html.parser

  • 특징: Python 표준 라이브러리에 포함된 모듈로 별도 설치가 필요 없음.
  • 장점: 빠르고 신뢰성이 높음.
  • 단점: 기능이 제한적이며, 사용법이 다소 직관적이지 않을 수 있음.
  • 예제 코드:
from html.parser import HTMLParser

class MyParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start tag:", tag)

parser = MyParser()
parser.feed('<html><body><h1>Hello</h1></body></html>')

2. Beautiful Soup 상세 사용법

2.1 BeautifulSoup 객체

BeautifulSoup 객체는 HTML 문서를 파싱한 후 태그(Tag) 객체로 접근할 수 있습니다.

from bs4 import BeautifulSoup
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>', 'html.parser')
tag = soup.b
type(tag)  # <class 'bs4.element.Tag'>

2.2 Pretty-printing (문서 정렬)

prettify() 메서드를 사용하면 파싱된 HTML을 보기 좋게 정렬할 수 있습니다.

markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>'
soup = BeautifulSoup(markup, 'html.parser')
print(soup.prettify())

2.3 find()와 find_all()

  • find(): 첫 번째로 찾은 요소를 반환.
  • find_all(): 모든 해당 요소를 리스트로 반환.
soup.find('title')  # <title>The Dormouse's story</title>
soup.find_all('title', limit=1)  # [<title>The Dormouse's story</title>]

3. 정리 및 추천

라이브러리장점단점
Beautiful Soup사용이 쉬움, 깨진 HTML도 처리 가능상대적으로 속도가 느림
lxml매우 빠름, XPath 지원별도 설치 필요, 문서화 부족
html.parser기본 제공, 빠름기능이 제한적

추천:

  • 빠른 속도가 필요하다면 lxml 사용
  • 유연하고 쉽게 사용할 라이브러리가 필요하면 Beautiful Soup 사용
  • 추가 설치 없이 기본 기능만 사용할 경우 html.parser 사용

이제 HTML 데이터를 파싱하고 원하는 정보를 추출하는 다양한 방법을 배웠습니다.

0개의 댓글