lxml 按序选择
有时候,我们在选择的时候某些属性可能同时匹配多个节点,但我们只想要其中的某个节点,如第二个节点或者最后一个节点,这时可以利用中括号引入索引的方法获取特定次序的节点:
from lxml import etree text1=''' <div> <ul> <li class="aaa" name="item"><a href="link1.html">第一个</a></li> <li class="aaa" name="item"><a href="link1.html">第二个</a></li> <li class="aaa" name="item"><a href="link1.html">第三个</a></li> <li class="aaa" name="item"><a href="link1.html">第四个</a></li> </ul> </div> ''' html=etree.HTML(text1,etree.HTMLParser()) result=html.xpath('//li[contains(@class,"aaa")]/a/text()') #获取所有li节点下a节点的内容 result1=html.xpath('//li[1][contains(@class,"aaa")]/a/text()') #获取第一个 result2=html.xpath('//li[last()][contains(@class,"aaa")]/a/text()') #获取最后一个 result3=html.xpath('//li[position()>2 and position()<4][contains(@class,"aaa")]/a/text()') #获取第一个 result4=html.xpath('//li[last()-2][contains(@class,"aaa")]/a/text()') #获取倒数第三个 print(result) print(result1) print(result2) print(result3) print(result4) # ['第一个', '第二个', '第三个', '第四个'] ['第一个'] ['第四个'] ['第三个'] ['第二个']这里使用了last()、position()函数,在XPath中,提供了100多个函数,包括存取、数值、字符串、逻辑、节点、序列等处理功能