You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除lxml.etree._Element前2个元素且不转列表以正常使用XPath

问题原因

直接对lxml.etree._Element类型对象执行切片操作,返回的是子节点组成的Python原生列表,列表本身没有xpath方法,自然会抛出属性错误。

解决方案

方案1:直接删除目标元素的前2个子节点

该方案会修改原p元素的结构,适合后续需要用到修改后p元素的场景:

root = etree.HTML(res.text)
p = root.xpath('//div[@id="J"]/p')
target_p = p[0]
# 遍历删除前2个子节点,原对象仍为Element类型
for child in target_p.getchildren()[:2]:
    target_p.remove(child)
# 正常调用xpath方法
p_content = target_p.xpath('string(.)')

方案2:通过XPath语法直接过滤前2个节点,无需修改原对象

该方案不会改动原元素结构,仅在提取内容时跳过前2个子节点,更轻量化:

root = etree.HTML(res.text)
p = root.xpath('//div[@id="J"]/p')
# position()从1开始计数,position()>2就跳过前2个节点,直接提取目标内容
# 仅过滤元素节点可将node()替换为*
p_content = p[0].xpath('string(./node()[position()>2])')

内容的提问来源于stack exchange,提问作者Trinidad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:04