标签后获取标签?

时间:2013-06-02 00:14:04

标签: python beautifulsoup

我正在尝试使用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.number AFTER span.b?

1 个答案:

答案 0 :(得分:3)

您可以使用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