Как я могу удалить NavigableString из дерева? - PullRequest
1 голос
/ 20 сентября 2019

Я немного запутался: у всех тегов есть метод 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 из дерева?

1 Ответ

2 голосов
/ 20 сентября 2019

Используйте extract() вместо decompose()

extract() удаляет тег или строку из дерева.

decompose() удаляет тег из дерева.

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

Чтобы узнать больше об этом, пожалуйста, проверьте следующую ссылку, где вы найдете более подробную информацию. BeautifulSoup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...