是否可以通过br标签从标签中分割文本?
我有这个标记内容:Take
我想得到的只是数字。 有什么建议吗?
编辑:
[u'+420 777 593 531', <br/>, u'+420 776 593 531', <br/>, u'+420 775 593 531']
根本不起作用。
答案 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']