使用 Python 将 html 转换为文本

新手上路,请多包涵

我正在尝试使用 Python 将 html 块转换为文本。

输入:

 <div class="body"><p><strong></strong></p>
<p><strong></strong>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. <a href="http://example.com/" target="_blank" class="source">Some Link</a> Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p>
<p>Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa</p></div>

期望的输出:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit。 Aenean commodo ligula eget dolor。埃尼亚马萨

Consectetuer adipiscing 精英。一些 Link Aenean commodo ligula eget dolor。埃尼亚马萨

Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit。 Aenean commodo ligula eget dolor。埃尼亚马萨

Lorem ipsum dolor sit amet, consectetuer adipiscing elit。 Aenean commodo ligula eget dolor。埃尼亚马萨

Consectetuer adipiscing 精英。 Aenean commodo ligula eget dolor。埃尼亚马萨

我尝试了 html2text 模块但没有成功:

 #!/usr/bin/env python

import urllib2
import html2text
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('http://example.com/page.html').read())

txt = soup.find('div', {'class' : 'body'})

print(html2text.html2text(txt))

txt 对象生成上面的 html 块。我想将其转换为文本并打印在屏幕上。

原文由 Aaron Bandelli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 773
2 个回答

soup.get_text() 输出你想要的:

 from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
print(soup.get_text())

输出:

 Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Some Link Aenean commodo ligula eget dolor. Aenean massa
Aenean massa.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa
Consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa

要保留换行符:

 print(soup.get_text('\n'))

为了与您的示例相同,您可以用两个换行符替换一个换行符:

 soup.get_text().replace('\n','\n\n')

原文由 root 发布,翻译遵循 CC BY-SA 4.0 许可协议

可以使用 python 标准 html.parser

 from html.parser import HTMLParser

class HTMLFilter(HTMLParser):
    text = ""
    def handle_data(self, data):
        self.text += data

f = HTMLFilter()
f.feed(data)
print(f.text)

原文由 FrBrGeorge 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题