Xpath常用规则
表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
. . 选取当前节点的父节点
text() 选取文本
@ 选取属性
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点
请看以下示例:
表达式 描述
bookstore 选取bookstore元素的所有子节点
/bookstore 选取根元素 bookstore。
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。
//title/text() 选取所有 title 元素的文本。
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。
属性匹配
我们在选取的时候,可以用@进行属性过滤,例如我们想要选取class为item-1的li节点时:
from lxml import etree
html = etree.HTML(text)
ret = html.xpath('//li[@class="item-1"]')
print(ret)
1
2
3
4
,通过中括号内加属性名和属性值的方式,过滤不要的东西,输出结果:
[<Element li at 0xf5b628>, <Element li at 0xf5b668>]