XPath 语法

https://www.w3school.com.cn/xpath/xpath_syntax.asp

  1. 层级
/直接子集   
//跳级   
./当前开始
  1. 属性
@属性访问
  1. 函数
contains(),
text()
  1. 条件
[ ]
  1. 常用xpath表达式
属性定位:
    #找到class属性值为song的div标签
    //div[@class="song"] 
层级&索引定位:
    #找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a
    //div[@class="tang"]/ul/li[2]/a
逻辑运算:
    #找到href属性值为空且class属性值为du的a标签
    //a[@href="" and @class="du"]
模糊匹配:
    //div[contains(@class, "ng")]
    //div[starts-with(@class, "ta")]
取文本:
    # /表示获取某个标签下的文本内容
    # //表示获取某个标签下的文本内容和所有子标签下的文本内容
    //div[@class="song"]/p[1]/text()   # 注意,不是p[1].text(),不是点,是/
    //div[@class="tang"]//text()
取属性:
    //div[@class="tang"]//li[2]/a/@href
  1. 例子
//div[@class="test"]//div[contains(@class,"text2")]
//div/@href                     #取div下的href属性
/bookstore/book[position()<3]   # 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//book/title | //book/price     # 选取 book 元素的所有 title 和 price 元素。

# xpath选择不包含特定子节点的节点
# xpath的(与或)用法
ret = response.xpath('//p[not (img)][not (a)][position()>5] | //div[contains(@class,"WB_text")]').extract()

//选择不包含class属性的节点
var result = node.SelectNodes(".//span[not(@class)]");
//选择不包含class和id属性的节点
var result = node.SelectNodes(".//span[not(@class) and not(@id)]");
//选择不包含class="expire"的span
var result = node.SelectNodes(".//span[not(contains(@class,'expire'))]");
//选择包含class="expire"的span
var result = node.SelectNodes(".//span[contains(@class,'expire')]");

原文地址:https://www.cnblogs.com/amize/p/13888848.html