5

我有一个带有一些自闭合标签的 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>

我必须手动检查每个标签是否自动关闭并进行适当修改,还是有更好的处理方法?

4

1 回答 1

5

您可能已经知道,您可以指定BeautifulSoup内部使用的不同解析器。并且,如BeautifulSoup 文档中所述:

HTML解析器之间也存在差异。如果你给 Beautiful Soup 一个格式完美的 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>
于 2015-11-01T01:37:22.113 回答