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

如何在Python lxml中使用XPath选择多class属性的元素?

使用lxml.html.xpath()选择多class元素的正确方法

针对多class元素的选择问题,这里给出两种可靠的解决方案:

1. 鲁棒的XPath写法(避免子串匹配漏洞)

你测试4里的contains写法存在隐患——如果页面中有类似infobox这类包含info子串的class,也会被误匹配。正确的写法是给class属性前后拼接空格,确保匹配完整的class名称:

page.xpath('//a[contains(concat(" ", @class, " "), " info ") and contains(concat(" ", @class, " "), " text-center ")]')

原理是通过concat(" ", @class, " ")把目标class属性转换成" info text-center "的形式,再用contains匹配带空格包裹的完整class名,彻底避免子串误匹配的问题。

2. 更简洁的CSS选择器(推荐)

lxml原生支持CSS选择器,处理多class元素比XPath更直观,直接用.连接多个class即可:

page.cssselect('a.info.text-center')

这种写法和浏览器开发者工具的选择逻辑一致,简洁且不易出错。

你的测试写法失效原因

  • 测试1/2://a[@class="info text-center"]是精确匹配class属性的完整字符串,只有当HTML里class的顺序、空格和你写的完全一致时才会生效,若页面渲染时class顺序调换(比如变成text-center info),就会匹配失败。
  • 测试3://a[@class="info.text-center"]完全错误,这里把.当成了class的一部分,但实际HTML里class是用空格分隔的。
  • 测试4:单纯用contains会匹配到包含目标class子串的其他类,导致结果不准确。

内容的提问来源于stack exchange,提问作者Ajay Pun Magar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:10:18