본문 바로가기

STUDY/Python

[Python] html parser - BeautifulSoup

 

HTML parse, parser

HTML Parse란  HTML 문법 규칙에 따른 문자열을, 해당 문법을 바탕으로 단어의 의미나 구조를 분석하는 것을 말한다.

그리고, 이렇게 HTML Parse를 행하는 프로그램을 일컬어 HTML Parser라 한다.

 

파이썬에는 아래와 같이 여러가지 html parser가 있다. 

 

파이썬의 html parser

 

이 중, BeautifulSoup(이하 bs4)에 대해 알아볼 것이다. 설치, import, 사용방법까지.

 

 

BeautifulSoup 설치, 사용

본격적인 설명에 들어가기 전에 짚고 넘어갈 것이 있다.

 

위에서 bs4가 parser라고 설명했지만, 사실 parser 그 자체는 아니다.

bs4의 역할은 여러가지 parser와 연동 가능한 인터페이스를 제공하는 것이다. 

실제로 html을 parsing하기 위해서는 다른 parser를 사용해주어야 한다.

 

 

1. 설치

외부 라이브러리라 별도로 설치해주어야 한다. 아래 명령어를 실행시켜주자.

pip install bs4

 

구글 코랩에서 설치할 경우 pip 앞에 느낌표를 넣어주어야 한다.

 

 

2. import

BeautifulSoup에서 제공하는 여러 객체 중 BeautifulSoup 객체를 import 해온다

from bs4 import BeautifulSoup

 

 

3. 객체 생성

객체명 = BeautifulSoup(html데이터, '사용할 parser')

 

bs4 객체 생성

 

 

* 갑자기 튀어나온 requests가 무엇인지 모르겠다면 아래 포스팅을 참고하자.

** GET 요청으로부터 온 응답의 여러 속성 중 content 속성은 해당 응답을 byte 형태로 제공한다.

[STUDY/Python] - [Python] 웹 크롤링 - requests 라이브러리 소개 / "기본" 사용법

 

[Python] 웹 크롤링 - requests 라이브러리 소개 / "기본" 사용법

웹 크롤링 할 때 쓰이는 파이썬의 requests 라이브러리에 대해 알아보자. requests란 ?? requests란 python용 HTTP 라이브러리이다. Python에서 특정 웹사이트에 HTTP 요청을 보내는 모듈이라 할 수 있다. 쉽게

k-wien1589.tistory.com

 

 

 

4. prettify()

 

bs4의 여러 객체 중 prettify() 메서드는 html 문자열을 양식에 맞춰 보기 편하게, 들여쓰기도 다 집어넣고 html의 각 element들을 알아보기 쉽게 만드는 역할을 한다. 말 그대로 '예쁘게' 만들어 주는 것.

prettify()

 

 

5. find()

 

html 내의 특정 element를 찾아주는 메서드.

당연하겠지만, 찾고자 하는 element에 tag나 id, class 등이 부여되어 있어야 아래의 방법들을 이용할 수 있다.

1. tag로 찾기
bs4객체.find(name = '찾으려는 tag')	# name은 생략 가능.

2. id로 찾기
bs4객체.find(id='찾으려는 id')

3. class로 찾기
bs4객체.find(class_='찾으려는 class')

4. 반환할 결과가 없다면 무엇을 반환하는가? => NoneType

 

tag로 찾기
id로 찾기.
class로 찾기

 

반환할 데이터가 없는 경우

 

 

6. find_all()

 

특정 tag를 가진 element가 여러개인 경우, 해당 element들을 모두 찾아 list로 반환하는 메서드. 

예를 들자면 위에서 contact-section 내의 p tag를 가진 element가 여러개인데, 해당 element들을 모두 불러오고 싶은 경우에 사용할 수 있겠다.

 

* 반환된 데이터가 정말 list type의 데이터는 아니다. bs4에서 제공하는 ResultSet이라는, list형식의 데이터이다. 하지만 기능은 같다. 이름만 다를 뿐.

 

bs4객체.find_all('tag 이름')

 

find_all()

 

 

 

이 외에도 여러 다양한 메서드들이 있을 것이다. 일단 bs4의 기본적인 사용법만 알아 본 것이니, 웹 크롤링이 필요하다면 이를 기반으로 공부하여 사용해보도록 하자.