본문 바로가기
웹 크롤링

BeautifulSoup 간단한 소개

by 눈표범  2021. 7. 16.

BeautifulSoup은 HTML이나 XML에서 데이터를 추출하는 파이썬 라이브러리 이다. 웹문서의 구조를 찾아내는 파서를 이용해 찾고자 하는 데이터의 위치를 찾아 내어 값을 추출한다. 

또한, 잘못된 HTML을 수정하여 반환해주거나 Javascript의 DOM처럼 기능하도록 해준다.

 

 

##설치 방법

!pip intall beautifulsoup4

 

 

 

## BeautifulSoup 객체 생성

## requests.text를 이용해서 받아온 문자열 데이터를 DOM 형식으로 바꿔준다.

# html.parser vs lxml

- lxml 모듈을 설치해야 lxml모듈을 사용 가능하다.

- lxml 모듈이 html.parser보다 더 성능이 우수하다.

 

## Tag 객체

- 반환 데이터의 타입은 Tag타입과 NavigableString 객체 타입이 있다.

~~~

>>> res = request.get('http://www.naver.com')

>>> soup = BeautifulSoup(res.text, 'lxml')

>>> a_tag = soup.a

>>> type(a_tag)

<class 'bs4.element.Tag'>

>>> print(a_tag.prettify())

~~~

## NavigableString 객체

- Tag 타입과 NavigableString 타입은 동작방식이 다르다.

 

 

## .string vs .text

~~~

<td>성명 홍길동</td>

<td></td>

<td>

<p>more text</p>

</td>

<td>

성명

<p>김길동</p>

</td>

~~~

- .string vs .text

- .string : td태그 4개 모두 리턴

-> 성명 홍길동 None more text None

- .text : 모든 글자 리턴

-> 성명 홍길동 more text 성명 감길동

- 일반 text 데이터를 BeautifulSoup 객체로 바꿈으로 엘리먼트간 순회가 가능해진다.

- 마치 자바스크립트의 DOM과 쓰임과 유사하게 엘리먼트에 접근 가능.

## 원하는 데이터를 추출하기

- 내려받은 텍스트 데이터에서 원하는 데이터를 추출할 수 있다.

## find() , find_all()

- BeautifulSoup에서 가장 빈번히 사용.

- 원하는 태그를 다양한 속성을 이용해서 검출.

- find(tag, Attributes)

- tag.find('div')

- find_all(tag, Attributes)

- tag.find_all('a', href='link3')

- find(Attributes)

- find_all(Attributes)

- find(class_= 'box') # 언더바(_) 주의

- 정규식으로 찾기

- find(re.compile('^b'))

- find_all(re.compile('t'))

- find_all(href=re.compile('[\w{3}']))

## CSS 셀렉터로 찾기

- soup.select("head > title")

- soup.select(".클래스명")

- soup.select("#아이명")

- soup.select('태그[속성]')

 

 

출처 : https://www.crummy.com/software/BeautifulSoup/bs4/doc.ko/

 

뷰티플수프 문서 — 뷰티플수프 4.0.0 문서

find_all() 메쏘드는 태그의 후손들을 찾아서 지정한 여과기에 부합하면 모두 추출한다. 몇 가지 여과기에서 예제들을 제시했지만, 여기에 몇 가지 더 보여주겠다: 어떤 것은 익숙하지만, 다른 것

www.crummy.com

 

 

 

 

selenium

 

 

'웹 크롤링' 카테고리의 다른 글

BeautifulSoup 모듈, find와 select의 차이점  (0) 2021.07.16
Selenium WebDriver 소개  (0) 2021.07.16
파싱(parsing)이란?  (0) 2021.07.10

댓글