개발로 자기계발
728x90

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/

 

What is my user agent?

Every request your web browser makes includes your User Agent; find out what your browser is sending and what this identifies your system as.

www.whatismybrowser.com

#header에 user_agent를 담아서 보낸다 = 속이기

html = req.get("https://hashcode.co.kr/", user_agent)
soup = bs(html.text, 'html.parser')
soup
728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)