1

我需要整理 HTML 页面并在 Python 中将它们转换为 XML;如果需要,丢失一些“坏”部分。

我用了一段时间的TagSoup,但是它不理解新的“文章”、“页脚”标签,并且不喜欢不在头部的“元”;使生成的 XML 几乎无法处理。

到目前为止,我喜欢html5lib所做的事情,但是我的第五次测试(非常奇怪的测试)失败了;解析时

<div attr="val"">

使用 html5lib + xml.dom treebuilder,我在生成的 XML 字符串中得到以下内容:

<div attr="val" "="">

对于格式良好的 xml,这不是一个好的结果。

当我尝试将 html5lib + lxml作为树生成器时,我将其转换为

<div attr="val" U00022="">

哪个更好,但问题是lxml “吃掉”标签的结束标签/斜线<link>,使它们仅<link ... >在输出 XML 时。

你会推荐使用什么?

4

1 回答 1

2

您可以使用method将元素设置为自动关闭或不自动关闭,如下所示:

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>'

然后做任何你想做的事。当您尝试从元素中写入时,您还可以添加method

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>
于 2014-11-03T15:35:53.647 回答