2014-11-03 51 views
1

我需要整理HTML页面并将它们转换为Python中的XML;如果需要,会丢失一些“不好”的部分。使用html5lib解析任何HTML到XML

我用TagSoup一段时间,但它不理解新的“文章”,“页脚”标签,并不喜欢“元”,当他们不在头上;使得产生的XML几乎不可能处理。

我喜欢什么html5lib到目前为止,但我的第五个测试(很奇怪的测试)失败;解析

<div attr="val""> 

使用html5lib + xml.dom的 TreeBuilder作为的时候,我得到了生成的XML字符串中的以下内容:

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

这是不是格式良好的XML一个不错的结果。

当我试图html5lib + LXML作为TreeBuilder作为,我得到的转换为

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

哪个更好,但问题是,LXML“吃”关闭标签/斜杠<link>标签,在输出XML时使它们仅为<link ... >

您会推荐使用什么?

回答

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> 
+0

莫名其妙方法= 'HTML' 没有帮助,而且方法='XML '工作,谢谢。 – alex29 2014-11-04 07:06:57

+0

@ alex29,这很奇怪!无论如何,我很高兴它有助于:-) – Anzel 2014-11-04 08:55:55