lxml.etree.HTML中子元素xpath查询返回整页内容问题求解
lxml 子节点xpath返回全文档匹配结果问题解决
问题原因
XPath语法规则中,以//开头的查询表达式默认的查询范围是整个文档的根节点,和你调用xpath方法的所属节点无关。因此你在l2(单个卡片元素)上执行//开头的xpath时,不会限定在l2的内部范围查询,而是直接返回整个页面的所有匹配结果,这是语法规则导致的正常现象,不是lxml的异常。
解决方法
只需要在xpath表达式开头添加.,代表查询范围限定为当前节点的内部,将原有的//替换为.//即可。
修改后的代码如下:
from lxml.etree import HTML from requests import Session z = Session() z.params = {"filter[entry_type]": "business"} x = z.get("https://www.local.ch/it/q", params={"where": 'Chiasso'}).text x = HTML(x) l1 = x.xpath("//*[starts-with(@class, 'js-entry-card-container')]") for l2 in l1: # 开头加. 限定在l2内部查询 l3 = l2.xpath(".//*[starts-with(@class, 'lui-margin-vertical-zero')]")
内容的提问来源于stack exchange,提问作者Marco Ocram
相关产品推荐
相关产品推荐

