python - 这个 html5lib 脚本是怎么回事?

标签 python html5lib

尝试处理一个非常简单的 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 会改变输出,但它仍然很损坏。

最佳答案

所以关键似乎是 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>
>>>

关于python - 这个 html5lib 脚本是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107649/

相关文章:

python - 根据第二个数据帧中的日期范围对一个数据帧中的值求和

python - BeautifulSoup 用户的 html5lib/lxml 示例?

python - 无法在 Python 中打开 html5lib

Python BeautifulSoup 错误

python - 如何使用 html5lib 解析 HTML,并使用 XPath 查询解析后的 H​​TML?

python - 将 Ruby 移植到 Python

python - 在 Windows 10 上安装 fbprophet Python

python - Pandas to_datetime 未将日期时间值格式化为所需格式 (dd/mm/YYYY HH :MM:SS AM/PM)

javascript - 有没有办法在网页中集成用Python编写的处理草图?