선택된 soup 의 상위 엘리먼트를 취득한다.
html = "<html><head><title>Nanana</title></head><body><a class='a'>body...</a><a class='b'>body2...</a></body></html>"
soup = BeautifulSoup( html, 'html.parser')
selected = soup.select("a")[0]
print(selected.parent)
<!-- 결과 : 선택된 엘리먼트의 바로 상위 엘리먼트가 표시된다. -->
<body><a class="a">body...</a><a class="b">body2...</a></body>
...
...
...
for item in selected.parents :
print(item+"\n")
<!-- 결과 : 선택된 엘리먼트의 최상위까지 계속 보여준다. 근테 최상위를 두번 보여주네? 왜 그런지 아시는분? -->
<body><a class="a">body...</a><a class="b">body2...</a></body>
<html><head><title>Nanana</title></head><body><a class="a">body...</a><a class="b">body2...</a></body></html>
<html><head><title>Nanana</title></head><body><a class="a">body...</a><a class="b">body2...</a></body></html>
html = """<html><head><title>Nanana</title></head><body><a class='a'>body...</a><a class='b'>body2...</a></body></html>"""
soup = BeautifulSoup( html, 'html.parser')
selected = soup.select("a")[1]
print(selected.previous_sibling)
print(selected.next_sibling)
<!-- 결과 : 두번째 a 태그의 양 옆을 구한다. 오른쪽은 없고 왼쪽은 있다. -->
<a class="a">body...</a>
None
html = """<html><head><title>Nanana</title></head><body>
<a class='a'>body...</a>
<a class='b'>body2...</a>
</body></html>"""
soup = BeautifulSoup( html, 'html.parser')
selected = soup.select("a")[1]
print(selected.previous_sibling)
print(selected.next_sibling)
<!-- 결과 : 아무고또 없다... 아무고또 ㅠㅠ -->
html = """<html><head><title>Nanana</title></head><body>
<a class='a'>body...</a>
<a class='b'>body2...</a>
</body></html>"""
soup = BeautifulSoup( html, 'html.parser')
selected = soup.select("a")[1]
for item in selected.previous_siblings :
print(item)
<!-- 결과 : 개행 문자열 포함 5개가 나왔다. -->
<a class="a">body...</a>
html = """<html><head><title>Nanana</title></head><body><a class='a'><span>body...</span></a><a class='b'>body2...</a></body></html>"""
soup = BeautifulSoup( html, 'html.parser')
selected = soup.select("a")[1]
print(selected.next_element)
print(selected.previous_element)
<!-- 결과 : 문자열만 뽑아낸다. -->
body2...
body...
끝에 "s" 가 붙으면 iteratable object 를 반환한다. for나 join으로 가공하여 활용하자.
그렇다... 어렵지 않다.