您需要測試標籤,它們被建模爲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']
你爲什麼不得到來自標籤的文本? –
不,因爲當'x'是一個元素時,它不等於一個字符串。 –