Python 使用html5lib将HTML片段转换为纯文本
有没有一种简单的方法可以使用Python库html5lib转换如下内容: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
<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.