Я немного запутался: у всех тегов есть метод 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
в своем коде, поэтому это хакерское решение неприемлемо, увы.
Итак, вопрос: как я могу удалить конкретный объект NavigableString
из дерева?