반응형

BeautifulSoup으로 파싱한 트리문서에서 어떤 특정 요소의 모든 상위 요소를 확인하고 싶다면 어떻게 해야 할까요? 여기서는 parents 메서드의 사용방법을 확인해 보겠습니다.

 

| 예제를 위한 html 문자열 만들기

parents의 사용 방법 확인에 필요한 간단한 html문서를 문자열로 만들어 보겠습니다. 

html_doc = """ 
<html>
    <head>
        <title>
            현명한 들쥐 이야기
        </title>
    </head>
    <body>
        <b></b>
        <p class="title">
            <b>
                현명한 들쥐 이야기
            </b>
        </p>
        <p class="book">
            엤날 옛척에 세 마리의 쥐가 있었습니다.
            <a class="mouse" href="http://example.com/first" id="link1">
                실리버
            </a>
            ,
            <a class="mouse" href="http://example.com/second" id="link2">
                마리버
            </a>
                그리고
            <a class="mouse" href="http://example.com/third" id="link2">
                토드
            </a>
             -그들은 모두 넓은 들판의 한 구멍에 살고 있었습니다.
        </p>
        <p class="book">
            <b>
                -끝-
            </b>
        </p>
    </body>
</html>
"""

 

| BeautifulSoup으로 html 문서 파싱하기

 

soup = BeautifulSoup(html_doc,'lxml')
#lxml이 설치되어 있지 않은 경우는 html.parser를 사용해도 됩니다.
#BeautifulSoup(html_file,'html.parser')

 

| <a> 태그 부모(상위) 요소들 모두 가지고 오기

바로 위의 부모 요소만 가지고 오고 싶은 경우는 parent 메서드를 사용합니다. 

※자세한 내용이 궁금하신 경우는 아래의 링크를 확인해 주세요.

BeautifulSoup|부모 요소에 접근하기 parent|웹스크래핑

 

하지만 모든 상위 요소를 가지고 오고 싶은 경우는 parents 메서드를 사용합니다. parents 메서드를 사용하면 모든 상위 요소를 반환받을 수 있습니다. parents 메서드는 generator를 반환합니다. 

※generator 가 궁금한 경우 아래 링크를 참조해 주세요.

https://wikidocs.net/16069

 

link = soup.a

for parent in link.parents:
    print(parent)

이렇게 출력을 해보면 상위 요소들을 하나씩 다 출력을 해주기 때문에 반복된 내용을 계속 볼 수 있습니다. 내 바로 부모 태그에는 현재의 태그와 형제 태그들이 모두 포함되어 있고 그 상위의 태그에는 또 부모 태그와 부모 태그의 형제 태그, 그리고 현재 태그를 포함한 형제 태그들이 포함되어 있기 때문이죠. 별로 보아도 도움이 안 되는 것 같아서 여기서 결과 부분은 생략하겠습니다. 

 

대신 name 메서드를 이용해서 이름을 출력해 보겠습니다. 

 

link = soup.a

for parent in link.parents:
    print(parent.name)

출력된 결과를 보면 모든 상위의 요소들이 반환되었다는 것을 알 수 있습니다. 

 

p
body
html
[document]

 

 

참고 문헌

BeautifulSoup Documentation

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html?highlight=parent#parents

 

같이 보면 좋은 글들

BeautifulSoup|HTML태그의 자식(children) 요소와 후손(descendants) 요소에 접근하는 방법

BeautifulSoup|부모 요소에 접근하기 parent|웹스크래핑

 

함께 보면 좋은 글 모음

웹 스크래핑 |웹 크롤링 코스

 

웹 스크래핑 |웹 크롤링 코스

| 웹 스크래핑 기초 requests로 서버에 요청하기(웹스크래핑) 왜 fake_useragent를 쓰는 거야?(웹 스크래핑) request 할 때 타입아웃 설정하기(웹 스크래핑) Beautifulsoup으로 html 받아오기(Python, 웹스크래핑,.

easytoread.tistory.com

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기