이번 포스팅에서는 제가 실제 프로젝트에서 사용했고, 파이썬에서 웹 스크래핑을 할 수 있도록 도와주는 라이브러리 하나를 소개하려 합니다.
Beautiful Soup(bs4) 라이브러리
bs4는 파이썬에서 웹 스크래핑 및 데이터 추출을 위한 라이브러리입니다. HTML 및 XML과 같은 마크업 언어로 작성된 웹 페이지의 내용을 파싱하고 구문을 분석하여 원하는 데이터를 추출하는 데 사용됩니다. bs4는 파이썬에서 웹 페이지에 대한 구문을 분석하고 탐색하는 프로세스를 단순하게 만들어주며, 웹 스크래핑을 더 효율적으로 수행할 수 있도록 도와줍니다.
Beautiful Soup(bs4)의 특징
이 라이브러리의 특징은 다음과 같습니다.
1. HTML 파싱 : Beautiful Soup는 HTML 문서를 파싱 하여 문서의 구조와 내용을 분석할 수 있습니다. HTML을 구성하고 있는 요소 및 태그 그리고 속성을 이해하고 트리 구조로 변환하여 데이터를 추출할 수 있습니다.
2. 데이터 추출 : Beautiful Soup를 사용하여 웹 페이지에서 원하는 데이터를 추출할 수 있습니다. 특정 태그의 내용이나, 속성, 텍스트 등을 선택하여 추출할 수 있습니다.
3. 문서 탐색 : Beautiful Soup는 태그 이름, 클래스, ID 등을 기반으로 웹 문서를 탐색하고 필요한 정보를 찾을 수 있는 강력한 기능을 제공합니다.
4. 웹 스크래핑 : Beautiful Soup를 활용하여 웹 페이지의 특정 부분이나 전체 내용을 스크래핑하여 데이터를 수집하거나 분석할 수 있습니다.
Beautiful Soup(bs4)의 설치 및 사용 방법
우선 Beautiful Soup를 설치해 보도록 하겠습니다. 간단하게 pip를 사용하여 설치할 수 있습니다.
pip install beautifulsoup4
이제 설치가 완료되었다면 위에 작성했던 bs4의 특징에 대한 예시 코드를 확인해 보도록 하겠습니다.
from bs4 import BeautifulSoup
import requests
# 웹 페이지 가져오기
url = 'https://example.com'
response = requests.get(url)
html = response.text
# BeautifulSoup 객체 생성
soup = BeautifulSoup(html, 'html.parser')
# 특정 태그에서 데이터 추출
title = soup.title.text
print("웹 페이지 제목:", title)
# 클래스 이름을 기반으로 요소 선택
articles = soup.find_all('div', class_='article')
for article in articles:
print(article.text)
실제 프로젝트에서 bs4를 어떻게 활용했을까?
제가 실제로 사용했던 프로젝트는 SVG 파일에 대한 모든 텍스트를 추출하고, 텍스트의 정합성을 검증하는 프로그램을 만드는 것이었습니다. 개발했던 소스는 공유할 수 없지만 제가 스크래핑한 정보를 바탕으로 데이터를 추출할 때 사용했던 메서드에 대해 알아보도록 하겠습니다.
#1. find
#첫 번째 매치되는 요소를 반환한다.
first_div = soup.find('div')
#2. find_all
#모든 요소를 반환한다/
all_divs = soup.find_all('div')
#3. select
#CSS 선택자를 사용하여 요소를 선택합니다
div_with_class = soup.select('.article')
#4. attrs
#요소의 속성에 접근한다.
div_class = soup.find('div')['class']
#5. parent
#부모 요소에 접근한다.
parent_div = soup.find('h1').parent
#6. find_next(), find_previous()
#다음 요소 혹은 이전 요소를 탐색한다.
next_paragraph = soup.find('p').find_next('p')
#7. find_all_next(), find_all_previous()
#다음 요소 혹은 이전 요소를 모두 탐색한다.
all_next_paragraphs = soup.find('p').find_all_next('p')
#8. strings
#요소 내의 모든 텍스트를 추출한다.
text_pieces = soup.find('div').strings
'Languages > Python' 카테고리의 다른 글
[Python]for문을 이용한 다양한 반복 처리 제어(for range, for loop, 중첩 반복) (4) | 2023.09.05 |
---|---|
[Python]list 자료형과 메서드 알아보기(sort, size, append, remove, pop, 슬라이싱) (3) | 2023.08.20 |
[Python]튜플(tuple) 자료형에 대해 알아보자 (8) | 2023.04.01 |
[Python]문자열(String)에 대해 알아보자 (8) | 2023.03.26 |
[Python]다른 언어 구별되는 Python의 변수 선언 방식 (5) | 2023.03.25 |