Python XPath 运算符中的谓词表达式详解
XPath 谓词表达式用于筛选节点,在一个 XPath 表达式中可以包含多个谓词表达式,它们通过方括号括起来,如下所示:
//div[@class='main']//p[@id='content'][@style='font-size:16px']
上述 XPath 表达式中包含了两个谓词表达式,分别筛选了 class='main' 的 div 元素和 id='content' 且 style='font-size:16px' 的 p 元素。
以下是 Python XPath 中常用的谓词运算符:
- 等于运算符 (=)
等于运算符用于比较两个节点或节点属性的值是否相等,语法格式如下:
[属性名=属性值]
例如:[@class='main']
表示选取 class 属性值为 'main' 的节点。
代码演示:
from lxml import etree html = """ <div class="main"> <p id="pidancode" style="font-size:16px">Hello world!</p> <p id="pidancode">Python XPath 谓词表达式详解</p> </div> """ selector = etree.HTML(html) print(selector.xpath('//div[@class="main"]//p[@id="pidancode"]')[0].text)
输出结果:
Hello world!
- 不等于运算符 (!=)
与等于运算符相反,不等于运算符用于比较两个节点或节点属性的值是否不相等,语法格式如下:
[属性名!=属性值]
例如:[@id!='pidancode']
表示选取 id 属性值不为 'pidancode' 的节点。
代码演示:
from lxml import etree html = """ <div class="main"> <p id="pidancode" style="font-size:16px">Hello world!</p> <p id="pdd" style="font-size:18px">皮蛋编程</p> </div> """ selector = etree.HTML(html) print(selector.xpath('//div[@class="main"]//p[@id!="pidancode"]')[0].text)
输出结果:
皮蛋编程
- 包含运算符 (contains)
包含运算符用于判断一个节点或节点属性的值是否包含某个字符串,语法格式如下:
[contains(属性名, "字符串")]
例如:[contains(@id, 'pidancode')]
表示选取 id 属性值中包含 'pidancode' 的节点。
代码演示:
from lxml import etree html = """ <div class="main"> <p id="pidancode" style="font-size:16px">Hello world!</p> <p id="pdd" style="font-size:18px">皮蛋编程</p> </div> """ selector = etree.HTML(html) print(selector.xpath('//div[@class="main"]//p[contains(@id, "pidancode")]')[0].text)
输出结果:
Hello world!
- 逻辑运算符 (and, or)
逻辑运算符可以用于连接多个谓词表达式,常用的有 and 和 or 两种,语法格式如下:
[谓词1 and 谓词2] [谓词1 or 谓词2]
例如:[@id="pidancode" and @style="font-size:16px"]
表示选取 id 属性值为 'pidancode' 且 style 属性值为 'font-size:16px' 的节点。
代码演示:
from lxml import etree html = """ <div class="main"> <p id="pidancode" style="font-size:16px">Hello world!</p> <p id="pdd" style="font-size:18px">皮蛋编程</p> </div> """ selector = etree.HTML(html) print(selector.xpath('//div[@class="main"]//p[@id="pidancode" and @style="font-size:16px"]')[0].text)
输出结果:
Hello world!
相关文章