BeautifulSoup
HTML, XML 등의 마크업 언어에서 데이터를 추출하는 파이썬 라이브러리
BeautifulSoup을 사용하면 마크업 언어로 작성된 문서를 파싱 하여, 문서 내에서 원하는 정보를 추출할 수 있다.
BeautifulSoup은 파서(parser)를 선택하여 사용할 수 있으며, 주로 HTML 및 XML 파싱에 사용된다.
파싱 된 문서는 BeautifulSoup 객체로 반환되며, 이 객체를 통해 문서 내의 태그, 속성, 텍스트 등을 다룰 수 있다.
예를 들어, find() 함수를 사용하여 문서 내에서 원하는 태그를 찾거나, select() 함수를 사용하여 CSS 선택자를 이용하여 여러 개의 태그를 찾을 수 있다.
1) 사용 함수
- select(선택자) : CSS 선택자를 사용하여 요소를 찾고, 결과를 리스트 형태로 반환한다.
- select_one(선택자) : CSS 선택자를 사용하여 요소를 찾고, 결과를 단일 요소로 반환한다.
- find(태그이름, 속성) : 태그 이름과 속성을 사용하여 요소를 찾고, 결과를 단일 요소로 반환한다.
- find_all(태그이름, 속성) : 태그 이름과 속성을 사용하여 요소를 찾고, 결과를 리스트 형태로 반환한다.
2) find와 select 차이점
soup.find('div', {'class': 'example'})
soup.select('div.example')
3) 사용법 예시
import requests
from bs4 import BeautifulSoup as bs
# 웹 페이지 가져오기
response = requests.get('https://en.wikipedia.org/wiki/Main_Page')
html = response.text
# BeautifulSoup 객체 생성
soup = bs(html, 'html.parser')
# 전체 HTML 출력하기
print("========= 전체 HTML =========")
print(soup.prettify())
# CSS 선택자를 사용하여 특정 요소 가져오기
print("========= CSS 선택자로 요소 가져오기 =========")
# #mp-topbanner와 #mp-tfp인 요소를 선택하여 가져오기
top_banner = soup.select('#mp-topbanner, #mp-tfp')
print(top_banner)
# find() 메서드를 사용하여 특정 요소 가져오기
print("========= find() 메서드로 요소 가져오기 =========")
# id가 mp-topbanner인 요소를 선택하여 가져오기
top_banner = soup.find(id='mp-topbanner')
print(top_banner)
# 태그 이름으로 가져오기
print("========= 태그 이름으로 요소 가져오기 =========")
# div 태그인 요소를 선택하여 가져오기
div_tags = soup.find_all('div')
print(div_tags)
4) 태그 안의 값을 가져오기
<h3><a href="../../../its-only-the-himalayas_981/index.html" title="It's Only the Himalayas">It's Only the Himalayas</a></h3>
a태그 안의 title 값을 가져오고 싶다면?
titles = soup.find_all("h3")
for title in titles:
result = title.a.get("title")
result2 = title.a['title']
print(result)
print(result2)
5) 크롤러가 아닌 사용자를 확인할 때 우회 방법
https://www.whatismybrowser.com/detect/what-is-my-user-agent/
#header에 user_agent를 담아서 보낸다 = 속이기
html = req.get("https://hashcode.co.kr/", user_agent)
soup = bs(html.text, 'html.parser')
soup
'Database & Data > 데이터 분석' 카테고리의 다른 글
데이터 크롤하고 분석(Seleniuum) - 5 (0) | 2023.04.20 |
---|---|
데이터 크롤하고 분석(정적 페이지와 동적 페이지) - 4 (0) | 2023.04.19 |
데이터 크롤하고 분석(Web Scraping 기초) - 2 (0) | 2023.04.18 |
데이터 크롤하고 분석(Web 기본 구조) - 1 (0) | 2023.04.17 |
서울 자치구 별로 가장 매매값이 높은 아파트 선별(실거래가) (0) | 2023.02.12 |