一个又一个的标签?

Leo*_*oyo 5 python beautifulsoup

我试图用beautifulsoup 在另一个标签之后获得第一个标签。

让我们假设我有这个:

<span class="number">5</span>
<span class="b">xxx</span><span class "number">10</span>
Run Code Online (Sandbox Code Playgroud)

我可以使用正则表达式获取第二个 .number 上的数字,它会非常可靠。但我们都知道 regex 不应该解析 html,所以我用 beautifulsoup 来做这个。目前我正在做这个

soup('span', {'class': 'number'})[1].string
Run Code Online (Sandbox Code Playgroud)

但是,如果在我想要的那个之前插入另一个 span.number,它会破坏代码,因为我需要的那个将变成 [2]。

有什么办法可以使用beautifulsoup在span.b之后获得第一个span.number?

unu*_*tbu 4

您可以使用next_sibling来获取之后的下一个标签<span class="b">

import bs4 as bs


content = '''<span class="number">5</span>
<span class="b">xxx</span><span class "number">10</span>'''

soup = bs.BeautifulSoup(content)
print(soup('span', {'class': 'b'})[0].next_sibling)
# <span class="">10</span>

print(soup('span', {'class': 'b'})[0].next_sibling.string)
# 10
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 BeautifulSoup 版本 3,则等效属性称为nextSibling