Beautifulsoup在标签中分割文字

时间:2015-06-07 14:17:46

标签: python text tags beautifulsoup newline

是否可以通过br标签从标签中分割文本?

我有这个标记内容:Take

我想得到的只是数字。 有什么建议吗?

编辑:

[u'+420 777 593 531', <br/>, u'+420 776 593 531', <br/>, u'+420 775 593 531']

根本不起作用。

1 个答案:

答案 0 :(得分:9)

您需要测试标记,它们被建模为Element个实例。 Element个对象具有name属性,而文本元素不具有NavigableText个实例):

[x for x in dt.find_next_sibling('dd').contents if getattr(x, 'name', None) != 'br']

由于您似乎只在<br />元素中包含文字和<dd>元素,因此您也可以改为all the contained strings

list(dt.find_next_sibling('dd').stripped_strings)

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <dt>Term</dt>
... <dd>
...     +420 777 593 531<br/>
...     +420 776 593 531<br/>
...     +420 775 593 531<br/>
... </dd>
... ''')
>>> dt = soup.dt
>>> [x for x in dt.find_next_sibling('dd').contents if getattr(x, 'name', None) != 'br']
[u'\n    +420 777 593 531', u'\n    +420 776 593 531', u'\n    +420 775 593 531', u'\n']
>>> list(dt.find_next_sibling('dd').stripped_strings)
[u'+420 777 593 531', u'+420 776 593 531', u'+420 775 593 531']