首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用html5lib解析任何html5lib

使用html5lib解析任何html5lib
EN

Stack Overflow用户
提问于 2014-11-03 15:27:09
回答 1查看 1.2K关注 0票数 1

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

我使用了TagSoup一段时间,但是它不理解新的“文章”、“页脚”标记,并且不喜欢"meta“(当它们不在头上时);这使得生成的XML几乎无法处理。

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

代码语言:javascript
复制
<div attr="val"">

使用html5lib + xml.dom树构建器,我在生成的XML字符串中获得了以下内容:

代码语言:javascript
复制
<div attr="val" "="">

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

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

代码语言:javascript
复制
<div attr="val" U00022="">

这样做更好,但问题是lxml“吃”了<link>标记的结束标记/斜线,使得它们在输出<link>标记时只使用<link ... >

您推荐使用什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 15:35:53

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

代码语言:javascript
复制
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

代码语言:javascript
复制
tree = html5lib.parse('<div attr="val" U00022="">', treebuilder='lxml', namespaceHTMLElements=False)
tree.write('yourfilename', method='html')

打印:

代码语言:javascript
复制
<html><head></head><body><div u00022="" attr="val"></div></body></html>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26717379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档