Xpath基础
Xpath基础
1. 单点.和双点..的概念
2. /和//的概念
3. 属性检索
- 根据属性具体判断某一个标签,可以通过
标签名[属性值判断式]来定位,例如:.//div[@id="content"]
- 这段xpath的具体意思就是全局检索id等于content的div标签。
- 属性值可以为标签内的任何属性,例如div、class、style、href等,包括自定义属性。
4. 包含检测
- 由于html是标记语言,所以他是没有报错机制以及严格的格式检测。但是
xpath有极其严格的语言和检测,所以xpath的书写通常需要包容html的不规则语言。
- html标签的id属性具有唯一性,class具有通用性,而且空格是可以随意添加的。如果不能精确匹配到某一个具体的字符串,xpath可以采用包含检测的函数来指定大致的标签。
- 举例:
.//div[contains(@class,"content")]
- 如果id为content的div标签,content字符串前后有多个空格,且很不规则,这里可以使用contains函数对id属性的值检测,只要里面包含了content字符串,就是我们需要的目标标签。
5. 与 或 非
- 在爬虫的编写过程中,html都不会是特别简短的,而且大多特别的长,又乱。class的通用性,导致一个contains检测会拿到非常多不需要的标签,所以常常需要更严格的筛选操作。
- xpath同样支持与或非的操作,通过 与 或 非 contains的组合使用,大部分的需要都是可以实现的。
|逻辑| 与 | 或 | 非 |
|:------:|:------:|:------------:|:------------:|
|关键字| and | or | not() |
|示例|
.//div[@id and @class]|.//div[@id or @class] | .//div[not(@id)]|
|示例解释| 同时拥有id和class属性的div | 有id或者class属性的div| 没有id属性的div|
6. 选取特定位置的标签
- 通过属性来选取标签,都是通配的标签,只要符合要求,就可以获取。当然还有一种的话,就是一排标签,只有第几个或者某个范围的标签可用,这样的话就需要指定位置或者对位置进行判断。
1. 方式一:[1]
- 通配标签返回的是一个列表,里面为空或者一些元素。xpath支持取具体值,例如去列表的第一个元素,
[1]就可以拿到;第二个值就是[2]。
- 注意列表的下角标从1开始,不像python那样从0开始。
2. 方式二:position()
- position函数会返回当前的位置值,拿到值之后就可以对值进行判断选取。
- 举例:
.//div[position()>1]
- 选取当前位置下的所有div标签,然后去掉第一个,取出从2开始,一直到最后一个div标签。
3. 方式三:last()
- 这个是最简单的,就是取列表的最后一个元素。
- 举例:
.//div[last()]
7. xpath的轴
- 其实这里有很多,xpath不仅仅只对html有效,还有xml。
- 但是在html中,一部分xpath轴是无效的,有一部分轴是非常有用的,这里列举下:
- following 选取文档中当前节点的结束标签之后的所有节点。
- preceding 选取文档中当前节点的开始标签之前的所有节点。
- ancestor 选取当前节点的所有先辈(父、祖父等)。
- descendant 选取当前节点的所有后代元素(子、孙等)。
- descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。