如何使用BeautifulSoup4删除XML声明


问题内容

我有一个结构如下的XHTML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html>

我正在使用BeautifulSoup,我想从文档中删除XML声明,所以我的样子是这样的:

<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html>

我找不到找到删除XML声明的方法。据我所知,它似乎不是Doctype,Declaration,Tag或NavigableString。有什么办法可以找到它来提取它吗?

作为一个工作示例,我可以使用以下代码删除Doctype(假设文档文本为变量“ html”):

soup = BeautifulSoup(html)
[item.extract() for item in soup.contents if isinstance(item, Doctype)]

问题答案:

您可以使用以下方法:

import bs4

soup = bs4.BeautifulSoup(html, 'html.parser')

for e in soup:
    if isinstance(e, bs4.element.ProcessingInstruction):
        e.extract()
        break

print(soup)

对于您的示例,这将为您提供更新的HTML:

<!DOCTYPE html>

<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html></html></html>