Я встретил одну ситуацию:
text here
div.remove(script)
удалит часть text here
, которую я не имел в виду.
после ответа здесь , я обнаружил, что etree.strip_elements
- лучшее решение для меня, которое вы можете контролировать, удаляете ли вы текст с параметром with_tail=(bool)
.
Но все же я не знаете, может ли это использовать фильтр xpath для тега. Просто укажите это для информирования.
Вот документ:
strip_elements (tree_or_element, * tag_names, with_tail = True)
Удалить все элементы с помощью предоставленные имена тегов из дерева или поддерева. Это приведет к удалению элементов и всего их поддерева, включая все их атрибуты, текстовое содержимое и потомки. Он также удалит хвостовой текст элемента, если вы явно не установите параметр аргумента ключевого слова
with_tail
в значение False.Имена меток могут содержать подстановочные знаки, как в
_Element.iter
.Примечание. что это не приведет к удалению элемента (или корневого элемента ElementTree), который вы передали, даже если он совпадает. Он будет относиться только к своим потомкам. Если вы хотите включить корневой элемент, проверьте его имя тега непосредственно перед тем, как вызвать эту функцию.
Пример использования ::
blockquote>strip_elements(some_element, 'simpletagname', # non-namespaced tag '{http://some/ns}tagname', # namespaced tag '{http://some/other/ns}*' # any tag from a namespace lxml.etree.Comment # comments )