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

Tags BeautifulSoup:获取元素本身的标记名,而不是其子元素的标记名,tags,beautifulsoup,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>
    <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

第1行

第2行 汤=美丽的汤(“第1行”

第2行”) ele=soup.find('p').nextSibling 不知怎的,在这里打印标签
我想得到ele的标签,在这个例子中是“div”。然而,我似乎只能得到它孩子的标签。我错过了一些简单的东西吗?我想我可以做ele.tag.name,但这是一个例外,因为tag是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
下面的
#正确打印div元素“第2行”
打印元素
#下面打印“无”。打印tag.name是一个例外,因为tag是None
打印电子标签
#下面是“a”,ele的孩子
allTags=ele.findAll(真)
对于所有标签中的e:
打印e.name

在这一点上,我正在考虑做一些事情来获得ele的父母,然后获得父母的孩子的标签,在计算了ele有多少上兄弟姐妹后,倒计时到正确的孩子标签。这似乎很可笑。

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

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

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

<input id="__VIEWSTATE3" name="__VIEWSTATE3" type="hidden" value="MwqzeTH4"/>
打印(soup.find('h1',id='pdp\u product\u title')) 它不打印任何细节,请解决此问题


Nike Air Force 1 Shadow

@user984003查看编辑,我提出了一个示例,但它应该按照您要求的方式工作。重要的是,你不应该直接做.tag.name,只是.name。但是,我知道,我已经有了一个标记,所以我要做:print ele.name。我测试了它,它成功了:)我错过了一些简单的东西!如果您将答案编辑为ele.name,那么我会在可能的情况下检查它是否为正确答案。是否可以在条件中使用ele.name?类似于:
如果ele.name是'a':
对我不起作用。@zimmi我能够在没有问题的条件下使用ele.name,但我确实使用了ele.name='a'。使用
is
操作符,您可以使用
=
进行身份测试和平等性测试。谢谢!如何获取第2行的内容?
<input id="__VIEWSTATE3" name="__VIEWSTATE3" type="hidden" value="MwqzeTH4"/>
print(elem["id"])
# prints __VIEWSTATE3