2015-06-07 51 views
3

是否有可能通過br標籤拆分標籤中的文本?Beautifulsoup拆分標籤中的文本<br/>

我有這樣的標籤內容:[u'+420 777 593 531', <br/>, u'+420 776 593 531', <br/>, u'+420 775 593 531']

而且我想只有數字。 有何建議?

編輯:

[x for x in dt.find_next_sibling('dd').contents if x!=' <br/>'] 

不工作的時候。

+0

你爲什麼不得到來自標籤的文本? –

+0

不,因爲當'x'是一個元素時,它不等於一個字符串。 –

回答

5

您需要測試標籤,它們被建模爲Element實例。 Element對象有一個name屬性,而文本元素不(這是NavigableText實例):

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

既然你似乎只有在<dd>元素文本和<br />元素,你可能也只是得到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']