BeautifulSoup:获取元素本身的标记名称,而不是其子元素

时间:2011-12-16 11:41:49

标签: tags 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

我想获得ele的标签,在本例中为“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

在这一点上,我正在考虑做一些事情来获取ele的父母,然后获取父母的孩子的标签,并计算有多少上层兄弟俩,倒数到正确的子标签。这看起来很荒谬。

3 个答案:

答案 0 :(得分:25)

ele已经是一个标签,试着这样做:

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

所以在你的例子中它只是

print(ele.name)

答案 1 :(得分:0)

您可以访问元素内的任何内容,就像访问字典一样。 假设您有一个像这样的元素。

<input id="__VIEWSTATE3" name="__VIEWSTATE3" type="hidden" value="MwqzeTH4"/>

您可以像这样访问每个属性

print(elem["id"])
# prints __VIEWSTATE3

答案 2 :(得分:0)

print(soup.find('h1',id _ ='pdp_product_title')) 它没有打印任何细节,请解决此问题

<h1 id="pdp_product_title" class="headline-2 css-zis9ta" data-test="product-title">Nike Air Force 1 Shadow</h1>