【问题标题】:What is going on with this html5lib script?这个 html5lib 脚本是怎么回事?
【发布时间】:2012-02-02 05:35:29
【问题描述】:

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

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

输出如下:

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

是的。它只是中途切断。将树构建器从 lxml 更改为 dom 没有任何作用。调整 HTML 会更改输出,但它仍然很损坏。

【问题讨论】:

    标签: python html5lib


    【解决方案1】:

    所以关键似乎是 omit_optional_tags=False 不知何故缺少它会吃掉输出的结尾。

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

    【讨论】:

    • 无法使用您的代码重现。 's' 甚至没有在您的代码中定义。想要使用不会出错的代码编辑您的回复?
    • 啊。所以关键似乎是 omit_optional_tags=False - 不知何故,缺少它会吃掉输出的结尾。
    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 2011-06-28
    • 2020-04-03
    • 2018-06-20
    • 2011-08-25
    • 1970-01-01
    • 2022-07-18
    • 2011-07-06
    相关资源
    最近更新 更多