Python 使用html5lib将HTML片段转换为纯文本

Python 使用html5lib将HTML片段转换为纯文本,python,html,html5lib,Python,Html,Html5lib,有没有一种简单的方法可以使用Python库html5lib转换如下内容: <p>Hello World. Greetings from <strong>Mars.</strong></p> 使用lxml作为解析器后端: import html5lib body = "<p>Hello World. Greetings from <strong>Mars.</strong></p>" doc = h

有没有一种简单的方法可以使用Python库html5lib转换如下内容:

<p>Hello World. Greetings from <strong>Mars.</strong></p>

使用
lxml
作为解析器后端:

import html5lib

body = "<p>Hello World. Greetings from <strong>Mars.</strong></p>"
doc = html5lib.parse(body, treebuilder="lxml")
print doc.text_content()
如果您确实需要
html5lib
解析引擎:

from lxml.html import html5parser
doc = html5parser.fromstring(body)
print doc.xpath("string()")
我使用,它将其转换为纯文本(标记格式)

从html2text导入html2text
handler=HTML2Text()
html=“”Lorem ipsum door sit amet,Concetetur adipiscing Elite.

Nullam eget\r\n risus feugiat的拉维达精英:

  • 猫科动物是一种非野生动物。
  • Nam id lobortis felis。
  • 不允许使用空罐。
在马萨·坦普斯,基斯·奥迪奥·拉奥里特先生 text=handler.handle(html) >>>正文 你的知识是什么?你的知识是什么?你的知识是什么?你的知识是什么?你的知识是什么?你的知识是什么?你的知识是什么?你的知识是什么
您可以连接
itertext()
方法的结果

例如:

import html5lib
d = html5lib.parseFragment(
        '<p>Hello World. Greetings from <strong>Mars.</strong></p>')
s = ''.join(d.itertext())
print(s)
导入html5lib
d=html5lib.parseFragment(
“你好,世界。来自火星的问候。

”) s=''.join(d.itertext()) 印刷品
输出:

Hello World. Greetings from Mars.
你好,世界。来自Mars的问候。如果您没有被文档记录不良的html5lib所困扰,您可以调用doc.text_content()来完成此任务。@JasonChrista:Good know:)@Niklas您只需执行
doc.xpath('string()')
,就可以在没有连接的情况下以更短的方式编写它。另外,作为旁注,
lxml.html.HtmlMixin
类对@JasonChrista提到的
text\u content()
的调用基本上就是这样做的。@aculich:谢谢您提供的信息。可能会在某个时候派上用场:)我正在更新这个问题。@JasonChrista注意,
text\u content()
只适用于
lxml.html
,而不适用于
lxml.html.html5parser
。我不确定它是否是一个bug,但后者没有使用
lxml.html.HtmlMixin
定义
text\u content()
。比较这两个
lxml.html.fromstring(“foo

”).text\u content()
lxml.html.html5parser.fromstring(“foo

”).text\u content()
刚刚再试了一次,仍然对我有效。有什么问题吗?谢谢你的跟进。。这就是我得到的<代码>win32上的Python 2.7.2(默认值,2011年6月12日,15:08:59)[MSC v.1500 32位(英特尔)]键入“版权”、“信用”或“许可证()”,以了解更多信息。>>>>================================================重新启动==========================>>>回溯(最近一次调用):文件“D:/test/scraping/test.py”,第1行,从html2text导入html2text文件“D:/test/scraping\html2text.py”,第5行,在print doc.text\u content()中AttributeError:'lxml.etree.\u ElementTree'对象没有属性'text\u content'>>>很遗憾。。此页面中的其他代码也不起作用。。有相同或相似的错误。很抱歉我不知道如何修复这个故障。。或者把选票放回原来的位置。哦,天哪,别担心。我认为这个问题可能是一个与这个问题无关的bug。您可以考虑重新安装所有库的最新版本(或者尝试在一个新的VielalEnv中尝试),否则,这个问题可能属于一个单独的问题。祝你好运为什么会被否决?使用html2text是一个非常好的建议。
from html2text import HTML2Text
handler = HTML2Text()

html = """Lorem <i>ipsum</i> dolor sit amet, <b>consectetur adipiscing</b> elit.<br>
          <br><h1>Nullam eget \r\ngravida elit</h1>Integer iaculis elit at risus feugiat:
          <br><br><ul><li>Egestas non quis \r\nlorem.</li><li>Nam id lobortis felis.
          </li><li>Sed tincidunt nulla.</li></ul>
          At massa tempus, quis \r\nvehicula odio laoreet.<br>"""
text = handler.handle(html)

>>> text
u'Lorem _ipsum_ dolor sit amet, **consectetur adipiscing** elit.\n\n  \n\n# Nullam eget gravida elit\n\nInteger iaculis elit at risus feugiat:\n\n  \n\n  * Egestas non quis lorem.\n  * Nam id lobortis felis.\n  * Sed tincidunt nulla.\nAt massa tempus, quis vehicula odio laoreet.\n\n'
import html5lib
d = html5lib.parseFragment(
        '<p>Hello World. Greetings from <strong>Mars.</strong></p>')
s = ''.join(d.itertext())
print(s)
Hello World. Greetings from Mars.