如何从树中删除NavigableString?

时间:2019-09-20 10:44:58

标签: python beautifulsoup

我有点困惑:所有标签都有一个decompose()方法,该方法允许从树中删除标签。但是,如果我想删除NavigableString怎么办?它没有这样的方法:

>>> b = BeautifulSoup('<p>aaaa <span> bbbbb </span> ccccc</p>', 'html.parser')
>>> b.p.contents[0]
'aaaa '
>>> type(b.p.contents[0])
<class 'bs4.element.NavigableString'>
>>> b.p.contents[0].decompose()
Traceback (most recent call last):
...
AttributeError: 'NavigableString' object has no attribute 'decompose'

我有一种方法设法从树中删除NavigableString:通过从内容列表中删除它:

>>> b.p.contents.pop(0)
'aaaa '
>>> b
<p><span> bbbbb </span> ccccc</p>

问题在于它仍然存在于strings方法响应中:

>>> list(b.strings)
['aaaa ', ' bbbbb ', ' ccccc']

这表明这是错误的方法。此外,我在代码中使用了strings,所以这种hacky解决方案是不可接受的,


所以问题是:如何从树中删除特定的NavigableString对象?

1 个答案:

答案 0 :(得分:2)

使用extract()代替decompose()

extract()从树中删除标签或字符串。

decompose()从树中删除标签。

b = BeautifulSoup('<p>aaaa <span> bbbbb </span> ccccc</p>', 'html.parser')
b.p.contents[0].extract()
print(b)

要了解更多信息,请检查以下链接,您将在其中找到更多详细信息。 BeautifulSoup