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/
selenium
'웹 크롤링' 카테고리의 다른 글
BeautifulSoup 모듈, find와 select의 차이점 (0) | 2021.07.16 |
---|---|
Selenium WebDriver 소개 (0) | 2021.07.16 |
파싱(parsing)이란? (0) | 2021.07.10 |
댓글