使用 BeautifulSoup 解析未关闭的 `<br>` 标签

Posted

技术标签:

【中文标题】使用 BeautifulSoup 解析未关闭的 `<br>` 标签【英文标题】:Parsing unclosed `<br>` tags with BeautifulSoup 【发布时间】:2012-11-20 20:19:08 【问题描述】:

BeautifulSoup 具有关闭连续 &lt;br&gt; 标记的逻辑,这些标记并不能完全满足我的要求。例如,

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

html 将呈现为

one
two
three
four

我想将其解析为字符串列表['one','two','three','four']。 BeautifulSoup 的标签关闭逻辑意味着当我请求所有 &lt;br&gt; 元素时,我会得到嵌套标签。

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

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

【问题讨论】:

有没有办法克服的这种行为?它正在破坏兄弟结构。 【参考方案1】:
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']

【讨论】:

不知道这个功能。很好的答案。 可能是因为我使用的是bs4,但这不起作用。它会选择第一个项目 (one),但不会选择其他项目。

以上是关于使用 BeautifulSoup 解析未关闭的 `<br>` 标签的主要内容,如果未能解决你的问题,请参考以下文章

BeautifulSoup库未写明解析器警告

beautifulsoup 解析文件夹 webscraping 中的每个 html 文件 [关闭]

一个快速的python HTML解析器[关闭]

在 Python 中解析 HTML [关闭]

使用 HTML 解析器获取特定 div 的内容 [关闭]

Python BeautifulSoup库使用