[python] #4. BeautifulSoup - 인접 엘리먼트 구하기
21908 단어 beautifulsoup크롤링pythonbeautifulsoup
.parent, .parents
선택된 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>
.previous_sibling, 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]
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>
- 그 말은 곧 sibling 은 엘리먼트만 횡단하는게 아닌 특정 문자열에도 적용이 되는 것 같다.
.previous_element, next_element
- 단순히 봐선 요소를 뽑아낸다는 걸로 보인다. 소스를 보면서 이해해 보자.
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으로 가공하여 활용하자.
그렇다... 어렵지 않다.
Author And Source
이 문제에 관하여([python] #4. BeautifulSoup - 인접 엘리먼트 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@exoluse/python-4.-BeautifulSoup-인접-엘리먼트-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)