首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个html5lib脚本是怎么回事?

这个html5lib脚本是怎么回事?
EN

Stack Overflow用户
提问于 2012-02-02 13:35:30
回答 1查看 722关注 0票数 1

尝试处理一个非常简单的html5脚本并使用html5lib呈现它

代码语言:javascript
复制
import html5lib

html = '''<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Hi</title>
    </head>
    <body>
        <script src="a.js"></script>
        <script src="b.js"></script>
    </body>
</html>
'''

parser = html5lib.HTMLParser(tree = html5lib.treebuilders.getTreeBuilder("lxml"))
walker = html5lib.treewalkers.getTreeWalker("lxml")
serializer = html5lib.serializer.htmlserializer.HTMLSerializer()

document = parser.parse(html)
stream = walker(document)
theHTML = serializer.render(stream)

print theHTML

输出如下所示:

代码语言:javascript
复制
<!DOCTYPE html><html lang=en><head>
        <title>Hi</title>
    </head>
    <body>
        <script src=a.js></script>
        <script src=b.js></script>

是啊。它只是在中途中断了。将树构建器从lxml更改为dom不会执行任何操作。调整HTML会改变输出,但它仍然相当糟糕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 13:51:17

所以关键似乎是omit_optional_tags=False,遗漏了它会吃掉输出的末尾。

代码语言:javascript
复制
parser = html5lib.HTMLParser(tree = html5lib.treebuilders.getTreeBuilder("lxml"))
document = parser.parse(html)    
walker = html5lib.treewalkers.getTreeWalker("lxml")
stream = walker(document)
s = serializer.htmlserializer.HTMLSerializer(omit_optional_tags=False)
output_generator = s.serialize(stream)
for item in output_generator:
         print item


<!DOCTYPE html>
<html lang=en>
<head>


<title>
Hi
</title>


</head>


<body>


<script src=a.js>
</script>


<script src=b.js>
</script>




</body>
</html>
>>>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9107649

复制
相关文章

相似问题

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