[Python] 웹 스크래핑 라이브러리 - beautifulsoup

2024. 4. 3. 14:20·프로그래밍/Python

지난 포스팅에서는 웹 스크래핑과 웹 크롤링 두 가지 개념에 대해서 간략하게 알아봤었다. 오늘은 웹 스크래핑에 사용되는 Python 라이브러리 중 하나인 BeautifulSoup에 대해서 알아보자.


 BeautifulSoup  

BeautifulSoup 란?

위에서 말했듯이, BeautifulSoup는 웹 스크래핑을 위한 파이썬 라이브러리이며, 주로 HTML 및 XML 문서에서 데이터를 추출하고 구문을 분석하는 데 사용된다. 일반적으로 requests 메서드를 통해 가져온 값을 HTML로 파싱 후, 변환된 값에 beautifulSoup를 적용하며 사용한다.


사용법

beautifulSoup의 기본적인 사용법은 다음과 같다. 우선 라이브러리를 import한 후 객체를 생성해 메서드들을 사용하기만 하면 되기때문에 간단히 이해할 수 있을것이다.

from bs4 import BeautifulSoup

# BeautifulSoup 객체 생성
soup = BeautifulSoup(html_doc, 'html.parser')

# 원하는 요소 추출하기
title = soup.title
print("타이틀 태그:", title.text)

해당 코드는 작성된 HTML코드를 사용한 것이지만, requests 라이브러리를 통해 URL도 처리 가능하다.


데이터 탐색 및 추출하기

이제 BeautifulSoup의 주된 역할인 데이터 탐색과 추출 방법에 대해 알아보자. 이때 가장 주로 사용하는 메서드는 "find"이다. find만 사용하면 하나의 요소만을 탐색하며, find_all을 사용하면 일치하는 모든 요소를 탐색해준다. 다음은 해당 메서드를 사용한 간단한 예시이다.

import requests
from bs4 import BeautifulSoup

res = requests.get('http://example.com')
ht = response.text

# BeautifulSoup 객체 생성
soup = BeautifulSoup(ht, 'html.parser')

# 단일 태그 찾기
ex1 = soup.find('p')
print(ex1.text)

# 모든 태그 찾기
ex1 = soup.find_all('p')
print(ex1.text)

# 태그와 속성으로 찾기
ex3 = soup.find('div', class_='example')
print(ex3.text)

# 부모 요소 내에서 자식 요소 찾기
ex4 = soup.body.find('p')
print(ex4.text)

# 특정 속성이 있는 태그 찾기
ex5 = soup.find('a', href=True)
print(ex5['href'])

여러 페이지의 요소 탐색

단일 페이지를 처리하는 방법은 이제 잘 이해했는데, 그렇다면 페이지 네이션이 되어있는 사이트들은 어떻게 해야되는걸까?
방법은 생각보다 간단하다. 페이지를 넘길때마다 URL을 확인해보면 가장 링크의 가장 뒷부분에 page라는 글자 뒤의 숫자가 증가함을 알 수 있다. 우리는 그저 그 숫자만 조절해가며 스크래핑을 동일하게 진행하면 되는것이다.

import requests
from bs4 import BeautifulSoup

# 첫 번째 페이지의 URL
base_url = 'https://example.com/page/'

# 페이지 네이션의 페이지 수
num_pages = 5 

for page_num in range(1, num_pages + 1):
    # 각 페이지의 URL 생성
    page_url = base_url + str(page_num)
    
    response = requests.get(page_url)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    
    print("페이지", page_num, "의 타이틀:", soup.title.text)
저작자표시 (새창열림)

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 데이터 시각화 라이브러리 - Seaborn  (0) 2024.04.05
[Python] 웹 스크래핑 라이브러리 - Selenium  (0) 2024.04.04
[Python] PEP8 스타일  (0) 2024.03.28
[Python] 큐(Queue)  (0) 2024.03.28
[Python] 리스트  (0) 2024.03.28
'프로그래밍/Python' 카테고리의 다른 글
  • [Python] 데이터 시각화 라이브러리 - Seaborn
  • [Python] 웹 스크래핑 라이브러리 - Selenium
  • [Python] PEP8 스타일
  • [Python] 큐(Queue)
70_0ewd
70_0ewd
내가 보려고 적는 나의 공부 기록
  • 70_0ewd
    Seung's Learning Record
    70_0ewd
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • DE (2)
      • Dev Tool (29)
        • Flutter (5)
        • AWS (8)
        • Django (7)
        • Spring boot (9)
      • 프로그래밍 (30)
        • C++ (0)
        • JAVA (6)
        • SQL (13)
        • Python (8)
        • WEB (3)
      • 알고리즘 (26)
      • CS (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DFS
    delete
    플러터
    DP
    heap
    큐
    자바
    공룡책
    JOIN
    Flutter
    백준
    SQL
    group by
    웹 스크래핑
    데브코스
    파이썬
    너비 우선 탐색
    C++
    select
    Python
    Java
    프로그래머스
    stl
    Queue
    AWS
    django
    BFS
    깊이 우선 탐색
    백트래킹
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
70_0ewd
[Python] 웹 스크래핑 라이브러리 - beautifulsoup
상단으로

티스토리툴바