2013-06-02 141 views
3

我想要用第一个标签获得第一个标签后,用美丽的标签。在标签之后获取标签?

假设我有这样的:

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

我能得到一个正则表达式第二。数数,这将是非常坚实的。但我们都知道正则表达式不应该解析html,所以我用beautifulsoup来做这件事。我目前正在与

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

这样做,但,如果在另一span.number是一个我想,这将打破之前的代码插入,因为我需要的就是[2]。

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

回答

3

你可以使用next_sibling<span class="b">后获得下一个标签:如果您使用BeautifulSoup版本3

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 

,等效属性称为nextSibling