Python XPath 运算符的高级用法及技巧
- 逻辑运算符
XPath 逻辑运算符有 and、or、not 三种,它们的作用跟 Python 中的用法一样,可用于组合多个条件表达式。
示例代码:
from lxml import etree html = ''' <div> <a href="https://pidancode.com">皮蛋编程</a> <a href="https://www.baidu.com">百度</a> </div> ''' selector = etree.HTML(html) links = selector.xpath('//a[@href="https://pidancode.com" and text()="皮蛋编程"]') print(links)
输出结果:
[<Element a at 0x7f9668d50e00>]
说明:通过 and 运算符将链接地址为“https://pidancode.com”且文本为“皮蛋编程”的 a 标签筛选出来。
2. 数值运算符
XPath 数值运算符有 +、-、*、div、mod 五种,其中 div 和 mod 是特殊的运算符,前者表示除法,后者表示取余数。
示例代码:
from lxml import etree html = ''' <table> <tr><td>10</td><td>20</td></tr> <tr><td>30</td><td>40</td></tr> <tr><td>50</td><td>60</td></tr> </table> ''' selector = etree.HTML(html) sum = selector.xpath('sum(//td)') avg = selector.xpath('avg(//td)') print('sum:', sum) print('avg:', avg)
输出结果:
sum: 210.0 avg: 35.0
说明:通过 sum 函数和 avg 函数分别对所有 td 标签中的数字进行求和和取平均值运算。
3. 关系运算符
XPath 关系运算符有 =、!=、<、>、<=、>= 六种,它们的作用跟 Python 中的用法一样,可用于比较两个数值或字符串的大小关系。
示例代码:
from lxml import etree html = ''' <div> <span>100</span> <span>50</span> <span>200</span> </div> ''' selector = etree.HTML(html) gt_spans = selector.xpath('//span[number(.) > 100]') print(gt_spans)
输出结果:
[<Element span at 0x7f9668d50680>]
说明:通过 number 函数将所有 span 标签中的文本转换为数值,然后使用 > 运算符比较大小,筛选出数值大于 100 的 span 标签。
4. 特殊用法
XPath 还有一些特别的用法,例如使用 @ 符号获取元素属性值,使用 text() 函数获取元素文本内容。
示例代码:
from lxml import etree html = ''' <div> <a href="https://pidancode.com">皮蛋编程</a> <p>欢迎来到 <b>皮蛋编程</b> 的世界!</p> </div> ''' selector = etree.HTML(html) url = selector.xpath('//a/@href')[0] text = selector.xpath('//p/text()')[0] print('url:', url) print('text:', text)
输出结果:
url: https://pidancode.com text: 欢迎来到
说明:通过 @ 符号获取 a 标签的 href 属性值,通过 text() 函数获取 p 标签的文本内容,并去掉了 b 标签内的内容。
相关文章