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属性的 | 有id或者class属性的 | 没有id属性的 |
释 | div | div | 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 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
网友评论