pus*_*kin 5 python beautifulsoup
我有一个带有一些自关闭标签的 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()
Run Code Online (Sandbox Code Playgroud)
印刷
<head>
<meta content="text/html" http-equiv="Content-Type">
<meta charset="utf-8"/>
</meta>
</head>
Run Code Online (Sandbox Code Playgroud)
我必须手动检查每个标签是否自动关闭并进行适当修改,还是有更好的方法来处理这个问题?
您可能已经知道,您可以指定BeautifulSoup内部使用的不同解析器。并且,如BeautifulSoup 文档中所述:
\n\n\nHTML 解析器之间也存在差异。如果您为 Beautiful\n Soup 提供一个格式完美的 HTML 文档,这些差异\xe2\x80\x99 并不重要。\n 一个解析器将比另一个更快,但它们\xe2\x80\x99 都会为您提供\n 数据结构看起来与原始 HTML 文档完全相同。
\n\n但如果文档的格式不完美,不同的解析器将给出不同的结果。
\n
在这种特殊情况下, 和lxml都会html5lib产生两个单独的meta标签:
In [4]: doc = BeautifulSoup(html, \'lxml\')\nIn [5]: print(doc.prettify())\n<html>\n <head>\n <meta content="text/html" http-equiv="Content-Type"/>\n <meta charset="utf-8"/>\n </head>\n</html>\n\nIn [6]: doc = BeautifulSoup(html, \'html5lib\')\nIn [7]: print(doc.prettify())\n<html>\n <head>\n <meta content="text/html" http-equiv="Content-Type"/>\n <meta charset="utf-8"/>\n </head>\n <body>\n </body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n