Python lxml 如何撤消 addnext()

Python lxml how to undo an addnext()

我正在 Python 使用 lxml 执行网络抓取。找到我认为有用的标签后,我使用以下命令对其进行标记:

myelement.addnext(etree.XML("<p>"+RandomString+"</p>"))

其中 RandomString 是固定长度的随机字符串。现在经过一定的分析,我意识到这不是要提取的标签,我想撤销addnext()命令。

这是我尝试做的:

myelement.getparent().remove(etree.XML("<p>"+RandomString+"</p>"))

但是,我收到以下错误:

ValueError: Element is not a child of this node.

简单的说,如何反转addnext命令?

请注意,我只想要涉及 lxml 的答案,不想要任何建议我转向 Beautifulsoup

的解决方案

如果我没理解错的话,要到达那里,您需要撤消 addnext() 的效果。通过该方法添加的新元素会立即添加到原始 myelement 旁边;这就是您要删除的目标:

myelement.addnext(etree.XML("<p>"+RandomString+"</p>"))
target = my_element.getnext()
target.getparent().remove(target)