【问题标题】:Converting HTML to plain text while preserving line breaks在保留换行符的同时将 HTML 转换为纯文本
【发布时间】:2015-03-11 11:27:03
【问题描述】:

我在 Python 中使用 Beautiful Soup 尝试将一些相当垃圾的 HTML 转换为纯文本,同时保留 HTML 的一些格式,特别是换行符。

这是一个例子:

from bs4 import BeautifulSoup

html_input = '''
<body>
<p>Full
Name:
John Doe</p>
Phone: 01234123123<br />
Note: This
is a 
test message<br>
It should be ignored.
</body>
'''

message_body_plain = BeautifulSoup(html_input.replace('\n', '').replace('\r', ''))
print (message_body_plain.get_text())

有时我得到的 HTML 有换行符而不是空格(参见上面的“全名”),有时没有。我已经尝试取出所有换行符并用换行文字替换 HTML 换行符,但是当我遇到以我没有考虑过的方式编写的 HTML 换行符时,它会中断。肯定有一个解析器可以为我做这件事吗?

这是我的首选输出:

Full Name: John Doe
Phone: 01234123123
Note: This is a test message
It should be ignored.

请注意,唯一的换行符是如何来自 HTML 标记的。有谁知道实现我想要的最佳方式?

【问题讨论】:

  • 看看这个帖子stackoverflow.com/questions/13337528/…。我没有标记为重复(尽管我应该这样做),因为html2text 是第 3 方库,它不附带 vanilla Python。但它是一个很好的库,可以满足您的需求。
  • 谢谢。这确实完全符合我的要求。我不知道为什么我没有先找到它。也许我太专注于 Beautiful Soup,它显然(主要)是一个解析器。随意标记为骗子!

标签: python html beautifulsoup


【解决方案1】:

住在BS你也可以试试

soup = BeautifulSoup(html_input , "html.parser")

for elem in soup.find_all(["a", "p", "div", "h3", "br"]):
            elem.replace_with(elem.text + "\n\n")

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2014-09-08
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多