본문 바로가기

카테고리 없음

파이썬 BeautifulSoup 사용법: 부모 태그를 찾아야 한다면 .parent

웹사이트에서 원하는 정보를 수집하는 대개의 경우라면 보통 맨 위에서부터 차례대로 원하는 정보가 있는 위치까지 찾아 내려가기 마련입니다. 하지만 종종 이 방법으로 해결하기가 애매한 상황이 있습니다. 예를 들면 내가 원하는 정보를 가진 태그의 부모 태그들이 아이디나 클래스 등 무언가 구분하여 찾아낼 수 있는 값을 가지고 있지 않은 경우입니다.

 

이럴 때 사용할 수 있는 좋은 방법 중 하나는 .parent 속성을 이용하는 것입니다. 이 속성을 이용하면 해당 엘리먼트의 부모에 접근할 수 있습니다. 생각을 조금 바꿔서 아래서부터 차례대로 내가 원하는 정보가 있는 위치까지 찾아 올라가는 겁니다.

 

다음과 같은 html 문서를 이용해서 BeautifulSoup의 .parent 속성을 사용해보겠습니다.

 

<div>
    <div></div>
    <div>
        <img src= "">
    </div>
    <div>
        <span>10,000원</span>
    </div>
    <div>
        <div>
            <svg class="svg-icon"></svg>
        </div>
    </div>
</div>

 

.parent 속성을 이용해서 금액 텍스트 수집하기 

이번 예제에서는 svg 태그에서 출발해서 10,000원이라는 텍스트를 수집하는 코드를 작성하겠습니다.

 

# 라이브러리 불러오기
from bs4 import BeautifulSoup

# 샘플 html 코드
html = \
"""
<div>
    <div></div>
    <div>
        <img src= "">
    </div>
    <div>
        <span>10,000원</span>
    </div>
    <div>
        <div>
            <svg class="svg-icon"></svg>
        </div>
    </div>
</div>
"""

# 파싱
soup = BeautifulSoup(html, 'html.parser')

# svg 태그의 부모 태그의 부모 태그의 부모 태그를 찾습니다.
# 이 경우 첫번째 div 태그가 해당합니다.
div1 = soup.select_one('.svg-icon').parent.parent.parent

# 3번째 div 태그를 찾은 후, 텍스트를 추출합니다. (좌우 공백 제거)
div1.select_one('div:nth-of-type(3)').get_text().strip()

# 10,000원

 

아래와 같은 과정을 거쳐서 부모 태그를 찾아갔습니다. 

 

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.