我有一个带有一些自关闭标签的html文件,但BeautifulSoup不喜欢它们。
from bs4 import BeautifulSoup
html = '<head><meta content="text/html" http-equiv="Content-Type"><meta charset="utf-8"></head>'
doc = BeautifulSoup(html, 'html.parser')
print doc.prettify()
打印
<head>
<meta content="text/html" http-equiv="Content-Type">
<meta charset="utf-8"/>
</meta>
</head>
我必须手动检查每个标签是否自动关闭并进行适当修改,还是有更好的方法来处理?
答案 0 :(得分:3)
您可能已经知道,可以指定BeautifulSoup
内部使用的不同解析器。并且,如BeautifulSoup
docs中所述:
HTML解析器之间也存在差异。如果你给美丽 汤是一个完美形成的HTML文档,这些差异无关紧要。 一个解析器会比另一个解析器更快,但他们都会给你一个 数据结构看起来与原始HTML文档完全相同。
但如果文档形式不完整,不同的解析器会 给出不同的结果。
在这种特殊情况下,lxml
和html5lib
都会生成两个单独的meta
标记:
In [4]: doc = BeautifulSoup(html, 'lxml')
In [5]: print(doc.prettify())
<html>
<head>
<meta content="text/html" http-equiv="Content-Type"/>
<meta charset="utf-8"/>
</head>
</html>
In [6]: doc = BeautifulSoup(html, 'html5lib')
In [7]: print(doc.prettify())
<html>
<head>
<meta content="text/html" http-equiv="Content-Type"/>
<meta charset="utf-8"/>
</head>
<body>
</body>
</html>