5

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

假设我有这个:

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

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

soup('span', {'class': 'number'})[1].string

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

有没有办法使用beautifulsoup 来获得span.b 之后的第一个span.number?

4

1 回答 1

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

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

于 2013-06-02T00:18:35.103 回答