我需要整理 HTML 页面并用 Python 将它们转换为 XML;如果需要的话,丢失一些“坏”的部分。
我使用TagSoup有一段时间了,但它不理解新的“article”、“footer”标签,也不喜欢“meta”不在头部;使得生成的 XML 几乎无法处理。
我喜欢 html5lib 到目前为止所做的事情,但是我的第五次测试(非常奇怪的测试)失败了;解析时
<div attr="val"">
使用 html5lib + xml.dom 树构建器,我在生成的 XML 字符串中得到以下内容:
<div attr="val" "="">
这对于格式良好的 xml 来说不是一个好的结果。
当我尝试使用 html5lib + lxml 作为树构建器时,我将其转换为
<div attr="val" U00022="">
哪个更好,但问题是 lxml “吃掉” <link>
的结束标签/斜杠标签,使它们只是 <link ... >
输出 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>'
然后就可以做你想做的事了。
当您尝试从元素写入时,您还可以添加方法
:
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>
关于python - 使用 html5lib 将任何 HTML 解析为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717379/