BeautifulSoup을 통해 접근한 요소의 부모 요소에 접근을 하려면 어떻게 해야 할까요? 여기서는 특정 요소의 부모 요소에 접근하는 방법을 알아봅니다.
| 부모 요소란?
트리 형식의 데이터에서 특정 요소의 상위에 있는 요소를 의미합니다.
<html>
<head>
<title>TEST HTML문서</title>
</head>
<body>
<p>현명한 생쥐 이야기</p>
</body>
</html>
위의 html문서에서 title의 부모요소는 head가 됩니다.
| 웹 사이트에서 html문서 받아오기
여기서는 다음 금융에서 html 문서를 받아와서 파싱(parsing)을 하겠습니다.
from bs4 import BeautifulSoup
import requests
from fake_useragent import UserAgent
ua = UserAgent()
header = {'user-agent': ua.chrome}
finance_page = requests.get('https://finance.daum.net/', headers = header)
soup = BeautifulSoup(finance_page.content, 'lxml')
※코드의 자세한 내용을 확인하고 싶은 경우는 아래의 링크를 참고해 주세요.
웹사이트 html문서 가지고 오기(웹 스크래핑 기초, 금융 분석 자동화)
| title 태그에 접근하기
title = soup.title
print(title)
soup.title을 통해서 간단하게 접근을 할 수 있습니다. print로 출력한 내용은 아래와 같습니다.
<title>Daum 금융 </title>
| title의 부모 태그에 접근하기
title = soup.title
print(title.parent)
이렇게 해서 출력을 해보면 다음 금융의 head태그의 내용이 아래처럼 복잡하게 출력이 됩니다. 중간 부분은 생략했지만 head 태그의 시작과 끝이 포함되어 있는 것을 확인할 수 있습니다. title태그는 그 안에 자식 태그로 포함이 되어 있죠.
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="다음금융" property="og:site_name"/>
<meta content="https://t1.daumcdn.net/media/finance_og.png" property="og:image"/>
<link href="//finance.daum.net/favicon.ico" rel="shortcut icon" type="image/x-icon"/>
<title>Daum 금융 </title>
...
...
</head>
| 특정 태그(요소)의 이름 출력하기
요소.name의 형식으로 태그의 이름을 얻어올 수도 있습니다. 지금 당장은 꼭 필요하지 않게 느껴질 수도 있지만 거대한 html문서에서 안정적으로 데이터를 얻기 위해서는 데이터를 선택하는 조건에 태그의 이름 등을 활용하는 경우도 있으니 기억해 두는 것을 추천합니다.
title = soup.title
print(title.parent.name)
이름을 출력하면 결과는 아래와 같습니다.
head
| html 태그의 부모 요소는 무엇일까?
이쯤 되면 BeautifulSoup이 파싱한 html 태그의 부모 요소가 무엇인지 궁금해집니다. html 태그의 부모 요소의 이름을 출력해보겠습니다.
html = soup.html
print(html.parent.name)
출력한 결과는 아래와 같습니다.
[document]
조금 애매하니 type 역시 출력을 해보겠습니다.
print(type(html.parent))
출력 결과는 아래처럼 BeautifulSoup 타입의 문서라는 것을 확인할 수 있습니다.
<class 'bs4.BeautifulSoup'>
| 그렇다면 BeautifulSoup 부모 요소도 있는 건가?
직접적으로 파싱한 soup의 부모 요소에 접근을 해보겠습니다.
print(soup.parent)
출력 결과는 아래와 같습니다. 역시 파싱한 문서 자체의 부모 요소는 없다는 것을 알 수 있습니다.
None
참고 문서
BeautifulSoup Documentation
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html?highlight=parent#parent
같이 보면 좋을 문서 모음