Python XPath 运算符的高级用法及技巧

2023-04-17 00:00:00 运算符 用法 高级
  1. 逻辑运算符
    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 标签内的内容。

相关文章