如何在lxml中删除标签?

时间:2018-10-17 06:30:42

标签: python xml web-scraping lxml lxml.html

首先,我遵循了this question,但是remove方法仍然存在问题。

tag.getparent().remove(tag)

我在这段webpage <中使用了这段代码删除有问题的锚标签,这些锚标签具有属性 name =“ 2”和id =“ 2” / p>

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:2)

从父节点中删除节点时,该节点本身仍然存在,但仅与父节点分离。这使您可以将“已删除”节点附加到其他父节点。但是,如果您不将节点附加到新的父节点上,那么从根节点的角度来看,该节点是很好的删除对象。

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

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()