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(自动将双线分隔符转换为段落)