首页 > 解决方案 > 查找带有“x”类的元素,忽略带有“x”和更多类的元素

问题描述

我的 HTML 看起来像这样:

<span class="x">Text 1</span>
<span class="x y">Text 2</span>
<span class="x">Text 3</span>
<span class="x z">Text 4</span>

我可以用它来找到班级的所有孩子x

for span_text in soup_subset.findChildren('span', class_='x'):
    print (span_text)

这将输出仅具有x类的 span 元素的文本,以及具有x和另一个类的文本。

我如何找到只有x班级的孩子,而忽略那些有x和其他班级的孩子?

标签: pythonbeautifulsoup

解决方案


使用 CSS 选择器获取仅包含该类的跨度标签。

soup.select("span[class='x']")

代码

from bs4 import BeautifulSoup
html ="""
<span class="x">Text 1</span>
<div class="x">Div Text 1</div>
<span class="x y">Text 2</span>
<span class="x">Text 3</span>
<span class="x z">Text 4</span>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup.select("span[class='x']"))

输出

[<span class="x">Text 1</span>, <span class="x">Text 3</span>]

参考


推荐阅读