一、方法描述
在 BeautifulSoup 库中,decompose()
方法会销毁当前元素及其子元素,因此该元素将从树中移除,擦除其自身及其所有子元素。您可以通过 decomposed
属性检查一个元素是否已被分解。如果已销毁,则返回 True
,否则返回 False
。
二、语法
decompose()
三、参数
此方法没有定义参数。
四、返回类型
此方法不会返回任何对象。
五、示例
示例 1
当我们对 BeautifulSoup 对象本身调用 decompose()
方法时,整个内容将被销毁。
html = '''
<html>
<body>
<p>The quick, brown fox jumps over a lazy dog.</p>
<p>DJs flock by when MTV ax quiz prog.</p>
<p>Junk MTV quiz graced by fox whelps.</p>
<p>Bawds jog, flick quartz, vex nymphs.</p>
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
soup.decompose()
print("decomposed:", soup.decomposed)
print(soup)
输出:
decomposed: True
document: Traceback (most recent call last):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str
由于 soup 对象已被分解,它返回 `True`,然而,如上所示您会得到 `TypeError`。
### 示例 2
下面的代码利用 `decompose()` 方法来移除 HTML 字符串中所有 `<p>` 标签的出现。
```python
html = '''
<html>
<body>
<p>The quick, brown fox jumps over a lazy dog.</p>
<p>DJs flock by when MTV ax quiz prog.</p>
<p>Junk MTV quiz graced by fox whelps.</p>
<p>Bawds jog, flick quartz, vex nymphs.</p>
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
p_all = soup.find_all('p')
[p.decompose() for p in p_all]
print("document:", soup)
输出:
document:
<html>
<body>
</body>
</html>
示例 3
在这里,我们从 HTML 文档树中找到 <body>
标签,并分解其前一个元素,即 <title>
标签。结果文档树省略了 <title>
标签。
html = '''
<html>
<head>
<title>Yoagoa</title>
</head>
<body>
Hello World
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
tag = soup.body
tag.find_previous().decompose()
print("document:", soup)
输出:
document:
<html>
<head>
</head>
<body>
Hello World
</body>
</html>