반응형
BeautifulSoup의 메서드 select, select_one, find, find_all은 HTML 문서에서 데이터를 추출하는 데 사용됩니다. 웹 사이트마다 다양한 방식으로 페이지를 구성되어 있어서 각 메서드에 대한 완벽한 이해가 필요합니다. 메서드 정의와 예제를 통해 사용법을 익혀보아요.
1. find()
정의
- 조건에 맞는 첫 번째 태그를 반환합니다.
- 태그 이름, 속성, 문자열 조건 등을 사용해 검색할 수 있습니다.
예제
from bs4 import BeautifulSoup
html = """
<html>
<body>
<div class="content">
<p class="title">Title 1</p>
<p class="description">Description 1</p>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
# 첫 번째 <p> 태그 찾기
first_p = soup.find('p')
print(first_p.text) # 출력: "Title 1"
# 클래스가 'description'인 첫 번째 <p> 태그 찾기
description_p = soup.find('p', class_='description')
print(description_p.text) # 출력: "Description 1"
2. find_all()
정의
- 조건에 맞는 모든 태그를 리스트로 반환합니다.
- limit 매개변수를 사용해 반환 개수를 제한할 수 있습니다.
예제
# 모든 <p> 태그 찾기
all_p = soup.find_all('p')
for p in all_p:
print(p.text)
# 출력:
# "Title 1"
# "Description 1"
# 클래스가 'description'인 모든 태그 찾기
all_descriptions = soup.find_all('p', class_='description')
for desc in all_descriptions:
print(desc.text) # 출력: "Description 1"
3. select()
정의
- CSS 선택자를 사용하여 조건에 맞는 모든 태그를 리스트로 반환합니다.
- 보다 복잡한 조건을 간단히 처리할 수 있습니다.
예제
# 모든 <p> 태그 선택
all_p = soup.select('p')
for p in all_p:
print(p.text)
# 출력:
# "Title 1"
# "Description 1"
# 특정 클래스 선택
title_p = soup.select('.title')
print(title_p[0].text) # 출력: "Title 1"
# <div> 내부의 <p> 태그 선택
div_p = soup.select('div.content > p')
for p in div_p:
print(p.text)
# 출력:
# "Title 1"
# "Description 1"
4. select_one()
정의
- CSS 선택자를 사용하여 조건에 맞는 첫 번째 태그를 반환합니다.
예제
# 클래스가 'title'인 첫 번째 태그 선택
title_p = soup.select_one('.title')
print(title_p.text) # 출력: "Title 1"
# <div> 내부의 첫 번째 <p> 태그 선택
first_div_p = soup.select_one('div.content > p')
print(first_div_p.text) # 출력: "Title 1"
차이점 요약
find, find_all은 태그를 조건으로 select, select_one은 css 선택자를 이용한다. find_all, select는 반환값이 복수개를 가정해 사용하므로 리턴값은 리스트이다. 물론, 하나만 리턴하는 경우도 리스트를 반환하기 때문에 바로 text로 값을 확인할 수 없으므로 list[]형태로 값을 출력하도록 한다.
find() | 태그 조건 | 첫 번째 태그 (Tag) | 단일 요소를 찾을 때 사용 |
find_all() | 태그 조건 | 모든 태그의 리스트 (list[Tag]) | 여러 요소를 찾을 때 사용 |
select() | CSS 선택자 | 모든 태그의 리스트 (list[Tag]) | 복잡한 CSS 조건의 다수 검색 |
select_one() | CSS 선택자 | 첫 번째 태그 (Tag) | 복잡한 CSS 조건의 단일 검색 |
정리
- 단일 요소를 찾을 때: find, select_one
- 다수의 요소를 찾을 때: find_all, select
- 복잡한 선택 조건이 필요한 경우: select, select_one
적절한 메서드를 사용해 효율적으로 데이터를 추출할 수 있습니다. 😊
반응형
'코드리뷰 > chatGPT(Python)코드' 카테고리의 다른 글
비트코인 헤드라인 뉴스 사이트 자동으로 만들기 (0) | 2025.01.11 |
---|---|
라면 레시피로 쉽게 이해하는 Docker (0) | 2025.01.01 |
웹 페이지 조회 건수 보여주기 - docker compose 이용 (0) | 2024.12.29 |
댓글