Python/Python 기초

[파이썬] HTML, XML파일에서 데이터 추출하는 파이썬 라이브러리 'Beautiful Soup' 에 대해 알아보기 / 사용법

JasonCloud 2023. 3. 12. 15:21
반응형

먼저 Beautiful Soup은 HTML과 XML 파일에서 데이터를 추출하는 파이썬 라이브러리입니다. HTML과 XML은 웹 사이트의 콘텐츠를 저장하는 데 사용되는 매우 일반적인 형식입니다. Beautiful Soup은 이러한 형식에서 데이터를 추출하고, 분석하고, 변환하는 데 유용합니다.

Beautiful Soup은 파이썬의 표준 라이브러리로 포함되어 있지 않기 때문에, 우선 설치해야 합니다. 설치는 파이썬 패키지 관리자인 pip를 사용하여 간단히 할 수 있습니다. 다음 명령을 사용하여 설치합니다.

pip install beautifulsoup4

Beautiful Soup은 HTML 및 XML 문서의 모든 요소를 객체로 나타내며, 이러한 객체를 이용하여 원하는 정보를 추출할 수 있습니다. 이러한 객체는 BeautifulSoup 클래스의 인스턴스입니다.

예를 들어, 다음은 Beautiful Soup을 사용하여 HTML 파일에서 특정 태그의 텍스트를 추출하는 방법입니다.

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>Beautiful Soup 예제</title>
</head>
<body>
    <h1>제목</h1>
    <p>첫 번째 문단입니다.</p>
    <p class="test">두 번째 문단입니다.</p>
    <a href="http://www.example.com">링크</a>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

# 특정 태그 추출
title_tag = soup.title
print(title_tag)

# 태그 안의 텍스트 추출
title_text = title_tag.text
print(title_text)

# 특정 클래스 속성을 가진 태그 추출
p_tag = soup.find('p', class_='test')
print(p_tag)

# 링크 추출
a_tag = soup.a
print(a_tag)
link = a_tag['href']
print(link)

위 코드에서 **BeautifulSoup(html_doc, 'html.parser')**를 사용하여 BeautifulSoup 객체를 만들고, 이를 통해 HTML 문서의 모든 요소를 추출할 수 있습니다.

find 메소드를 사용하여 특정 태그나 클래스를 가진 요소를 추출할 수 있습니다. find 메소드는 첫 번째 일치하는 요소를 반환합니다. 다음과 같이 여러 개의 일치하는 요소를 추출하려면 find_all 메소드를 사용할 수 있습니다.

 

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>Beautiful Soup 예제</title>
</head>
<body>
    <h1>제목</h1>
    <p>첫 번째 문단입니다.</p>
    <p class="test">두 번째 문단입니다.</p>
    <p class="test">세 번째 문단입니다.</p>
    <a href="http://www.example.com">링크</a>
</body>
</html
soup = BeautifulSoup(html_doc, 'html.parser')

# 클래스가 test인 모든 p 태그 추출
p_tags = soup.find_all('p', class_='test')
for p_tag in p_tags:
    print(p_tag)

# 모든 링크 추출
a_tags = soup.find_all('a')
for a_tag in a_tags:
    print(a_tag)
    link = a_tag['href']
    print(link)

위 코드에서는 find_all 메소드를 사용하여 클래스가 test인 모든 p 태그와 모든 링크를 추출하고, 반복문을 사용하여 각 요소의 내용을 출력합니다.

또한, Beautiful Soup은 CSS 선택자를 사용하여 요소를 선택할 수도 있습니다. 예를 들어, select 메소드를 사용하여 클래스가 test인 모든 p 태그를 추출하는 방법은 다음과 같습니다.

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>Beautiful Soup 예제</title>
</head>
<body>
    <h1>제목</h1>
    <p>첫 번째 문단입니다.</p>
    <p class="test">두 번째 문단입니다.</p>
    <p class="test">세 번째 문단입니다.</p>
    <a href="http://www.example.com">링크</a>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

# 클래스가 test인 모든 p 태그 추출
p_tags = soup.select('p.test')
for p_tag in p_tags:
    print(p_tag)

위 코드에서는 select 메소드를 사용하여 CSS 선택자 p.test를 사용하여 클래스가 test인 모든 p 태그를 추출하고, 반복문을 사용하여 각 요소의 내용을 출력합니다.

Beautiful Soup은 HTML과 XML 파일에서 데이터를 추출하는 데 매우 유용한 라이브러리입니다. 이를 통해 웹 크롤링, 데이터 마이닝 등 다양한 분야에서 데이터를 추출하고 분석하는 데 사용할 수 있습니다.

반응형