Python 使用html5lib将任何HTML解析为XML
我需要整理HTML页面并用Python将其转换为XML;如果需要,丢失一些“坏”部件 我使用了一段时间的标记,但它不理解新的“article”、“footer”标记,也不喜欢不在头部的“meta”;使生成的XML几乎无法处理 到目前为止,我喜欢html5lib的功能,但我的第五次测试(非常奇怪的测试)失败了;解析时Python 使用html5lib将任何HTML解析为XML,python,xml,html5lib,Python,Xml,Html5lib,我需要整理HTML页面并用Python将其转换为XML;如果需要,丢失一些“坏”部件 我使用了一段时间的标记,但它不理解新的“article”、“footer”标记,也不喜欢不在头部的“meta”;使生成的XML几乎无法处理 到目前为止,我喜欢html5lib的功能,但我的第五次测试(非常奇怪的测试)失败了;解析时 <div attr="val""> 这对于格式良好的xml来说不是一个好结果 当我作为treebuilder尝试html5lib+lxml时,我将其转换为 <
<div attr="val"">
这对于格式良好的xml来说不是一个好结果
当我作为treebuilder尝试html5lib+lxml时,我将其转换为
<div attr="val" U00022="">
哪一个更好,但问题是lxml会“吃掉”
标记的结束标记/斜杠,使它们在输出XML时只剩下
您建议使用什么?您可以使用
方法
将元素设置为自动关闭或不自动关闭,如下所示:
from lxml import etree
tree = etree.Element('div', attrib={'attr':'val', 'U00022':''})
etree.tostring(tree)
'<div U00022="" attr="val"/>'
# parse as self-closing tag
etree.tostring(tree, method='xml')
'<div U00022="" attr="val"/>'
# parse as normal HTML
etree.tostring(tree, method='html')
'<div U00022="" attr="val"></div>'
打印输出:
<html><head></head><body><div u00022="" attr="val"></div></body></html>
不知何故,method='html'没有帮助,但是method='xml'可以工作,谢谢。@alex29,这太奇怪了!无论如何,我很高兴它有帮助:-)
tree = html5lib.parse('<div attr="val" U00022="">', treebuilder='lxml', namespaceHTMLElements=False)
tree.write('yourfilename', method='html')
<html><head></head><body><div u00022="" attr="val"></div></body></html>