如何删除lxml中的标签?

How to remove tag in lxml?

首先我遵循了this question,但我仍然对删除方法有疑问。

tag.getparent().remove(tag)

我使用这段代码 删除具有属性 name="2" 和 id = "2" 的有问题的锚标记在这个 webpage

并且在执行该行时我仍然能够看到标签及其属性,并且当我遍历所有子项时我仍然能够看到我删除的元素

remove 方法到底做了什么,为什么删除的标签仍然存在?

这是执行该行后调试器的屏幕截图。

当您从其父节点中删除一个节点时,该节点本身仍然存在,但只是与父节点分离。这允许您将 "deleted" 节点附加到不同的父节点。但是如果你不把这个节点追加到一个新的父节点上,那么从根节点的角度来看,这个节点就相当于被删除了。

要保留被删除的标签节点的子节点,您可以像这样在相同的索引处将它们修剪为标签的父节点:

parent = tag.getparent()
index = parent.index(tag)
for child in tag.getchildren()[::-1]: # in reverse order so that we can keep inserting at the same index while preserving the original order
    tag.remove(child)
    parent.insert(index, child)
parent.remove(tag)

或者您可以简单地使用 drop_tag 方法:

tag.drop_tag()