크롤링한 소스코드를 정제하는 BeatifulSoup를 활용하여 특정 요소에 접근하고자 할 때 사용할 수 있는 .select()
에 대해 알아본다.
개요
requests 또는 Selenium 같은 라이브러리로 특정 페이지의 HTML 소스코드를 가져오거나 API로 XML을 받아온 경우 데이터를 추출하기 위해 원하는 요소(element)에 접근이 필요하다. 이 경우에 사용할 수 있는 것이 BeautifulSoup 라이브러리(이하 bs)로 생성한 객체의 메서드 .select()
이다.
.select()
는 HTML 또는 XML의 특정 요소에 접근하기 위해서 CSS 선택자(CSS Selector)를 사용한다.
종류
.select()
메서드와 유사한 메서드로 .select_one()
이 있으며 .select()
는 CSS 선택자 조건에 맞는 요소 전체를 선택하지만 .select_one()
의 경우 CSS 선택자의 조건에 맞는 요소 하나를 선택한다. 그리고 .select()
의 반환 객체유형은 리스트 이지만 .select_one()
의 경우 BS객체가 반환된다.
예시
다음과 같이 라이브러리와 샘플 코드를 준비한다.
1 | from bs4 import BeautifulSoup as bs |
.select()
다음과 같이 .select()
메서드를 사용하여 “div” 태그 요소에 접근하는 코드와 그 결과를 보자.
1 | bs_source.select("div") |
결과는 리스트로 반환되며 해당 리스트의 각 원소는 BS이며 “div”태그와 해당 태그의 하위 내용을 포함한다. 별도로 조작하고자 한다면 다음과 같이 할 수 있다.
1 | ls_1 = bs_source.select("div") |
.select_one()
단일 BS객체를 반환하는 .select_one()
메서드 사용 예시는 다음과 같다.
1 | bs_source.select_one("div") |
추가 핸들링을 위해서는 다음과 같이 할 수 있다.
1 | bs_1 = bs_source.select_one("div") |