用BeautifulSoup解析未封闭的`<br/>`标签

时间:2012-11-20 20:19:08

标签: python html beautifulsoup

BeautifulSoup具有关闭连续<br>标记的逻辑,这些标记不能完成我想要它做的事情。例如,

>>> from bs4 import BeautifulSoup
>>> bs = BeautifulSoup('one<br>two<br>three<br>four')

HTML将呈现为

one
two
three
four

我想将其解析为字符串列表['one','two','three','four']。 BeautifulSoup的标记关闭逻辑意味着当我要求所有<br>元素时,我会获得嵌套标记。

>>> bs('br')
[<br>two<br>three<br>four</br></br></br>,
 <br>three<br>four</br></br>,
 <br>four</br>]

有没有一种简单的方法可以得到我想要的结果?

1 个答案:

答案 0 :(得分:9)

import bs4 as bs
soup = bs.BeautifulSoup('one<br>two<br>three<br>four')
print(soup.find_all(text=True))

产量

[u'one', u'two', u'three', u'four']

或者,使用lxml

import lxml.html as LH
doc = LH.fromstring('one<br>two<br>three<br>four')
print(list(doc.itertext()))

产量

['one', 'two', 'three', 'four']