Python:将 HTML 片段分隔为段落

Posted

技术标签:

【中文标题】Python:将 HTML 片段分隔为段落【英文标题】:Python: Separating an HTML snippets to paragraphs 【发布时间】:2011-01-17 14:56:50 【问题描述】:

我有一个包含段落的 html 的 sn-p。 (我的意思是p 标签。)我想将字符串分成不同的段落。例如:

'''
<p class="my_class">Hello!</p>
<p>What's up?</p>
<p style="whatever: whatever;">Goodbye!</p>
'''

应该变成:

['<p class="my_class">Hello!</p>',
 '<p>What's up?</p>'
 '<p style="whatever: whatever;">Goodbye!</p>']

解决这个问题的好方法是什么?

【问题讨论】:

非常接近(如果您愿意,甚至可以相同)在此处复制:***.com/questions/972749/… 快速回答:使用 beautifulsoup 【参考方案1】:

如果您的字符串仅包含段落,您可以使用精心制作的正则表达式和re.split() 来摆脱困境。但是,如果您的字符串是更复杂的 HTML,或者并非总是有效的 HTML,您可能需要查看 BeautifulSoup 包。

用法如下:

from BeautifulSoup import BeautifulSoup 

soup = BeautifulSoup(some_html)

paragraphs = list(unicode(x) for x in soup.findAll('p'))

【讨论】:

正则表达式是错误的工具。 HTML 不是常规语言,因此正则表达式天生无法解析 HTML。使用 HTML 解析器,就像您在帖子的后半部分中展示的那样,更加健壮、更容易和可读。【参考方案2】:

使用lxml.html 将HTML 解析为您想要的形式。这与推荐 BeautifulSoup 的人的建议基本相同,只是 lxml 仍在积极开发中,而 BeatifulSoup 的开发已经放缓。

【讨论】:

【参考方案3】:

使用 BeautifulSoup 解析 HTML 并遍历段落。

【讨论】:

BeautifulSoup 也可以,但仅在 html 可能丑陋/无效时才需要。 stdlib etree 也可以做到这一点。我更喜欢 lxml 因为它更强大。曾经有人谈论将 BeautifulSoup 加入其中。我不知道它去了哪里。 xml.etree 可以解析XML,问题中的代码不是。 我相信我已经用它来解析 html。也许我记错了。但这似乎证实了我的记忆:effbot.org/zone/element-index.htm#usage 或者问题是我们这里只有一个 sn-p...?【参考方案4】:

xml.etree (std lib) 或 lxml.etree (enhanced) 使这很容易做到,但我不会得到答案,因为我不记得确切的语法。我一直把它和类似的包混在一起,每次都要重新查找。

【讨论】:

以上是关于Python:将 HTML 片段分隔为段落的主要内容,如果未能解决你的问题,请参考以下文章

关闭Wordpress中的wpautop(自动将双线分隔符转换为段落)

在 Javadoc 中应该使用哪个标签作为段落分隔符?

将逗号分隔的字符串转换为Python中的列表

正则表达式用双换行符分隔段落

如何使用BeautifulSoup中的Python将单行中多列分隔的数据导出为.csv或.xls?

Python partition() 方法