2011-12-16 5 views
8

나는 다음과 같은 소스 사용하기 (간체) 코드가이 경우에,BeautifulSoup로 : 요소 자체의 태그 이름을 얻을 수 없습니다 그 아이

<html> 
    <p>line 1</p> 
    <div> 
     <a>line 2</a> 
    </div> 
</html> 

soup = BeautifulSoup('<html><p>line 1</p><div><a>line 2</a></div></html>') 
ele = soup.find('p').nextSibling 
somehow_print_tag_of_ele_here 

나는 전자 업계의 태그를 얻으려면을 " div ". 그러나, 나는 단지 그 아이들의 꼬리표를 얻을 수있을 것 같습니다. 나는 간단한 것을 놓치고 있습니까? 나는 ele.tag.name을 할 수 있다고 생각했지만 태그는 None이므로 예외입니다. 나는 다음, 부모의 아이들의 태그를 얻고, 전자 업계의 부모를 얻을 수있는 길을 따라 일을 고려하고이 시점에서

#Below correctly prints the div element "<div><a>line 2</a></div>" 
print ele 

#Below prints "None". Printing tag.name is an exception since tag is None 
print ele.tag 

#Below prints "a", the child of ele 
allTags = ele.findAll(True) 
for e in allTags: 
    print e.name 

얼마나 많은 상위 형제를 계산 한 전자 업계는 올바른 자녀 카운트 다운,가 꼬리표. 그건 말도 안돼.

답변

18

전자 업계는 이미 태그입니다,이 일을 시도 :

soup = BeautifulSoup('<html><p>line 1</p><div><a>line 2</a></div></html>') 
print(soup.find('p').nextSibling.name) 

그래서 귀하의 예제에서 그냥

print(ele.name) 
+0

것이다 그러나 그것은 div 태그는 것을 알고 이미이 필요합니다. – user984003

+0

@ user984003 편집을 참조하십시오. 예제를 제안했지만 요청한대로 작동해야합니다. 중요한 부분은 당신이 .tag.name을하지 말아야한다는 것입니다. 바로 .name입니다. –

+0

하지만, 나는 이미 태그를 가지고 있습니다 : print ele.name. 나는 그것을 테스트하고 작동 :) 나는 간단한 무언가를 놓쳤습니다! 당신이 대답을 편집하여 ele.name이라면, 할 수있을 때 정답으로 그것을 검사 할 것입니다. – user984003