学习总结

XPath( XML Path Language),他是在html和xml中查找信息的语言,他是通过标签属性来查询

谷歌安装XPath插件和说明

名称XPath Helper

image-20210820104511190

image-20210820104544136

image-20210820104555070

image-20210820105845926

按Shift+鼠标上下可以调整位置

XPath语法

表达式 描述
// 查询的父标签,比如//div就是查询这个页面的全部是div的标签
/ 查询的子标签,比如//div/span就会叫div标签下的span子标签
[@xxx] 指定标签里面属性来查询,比如//div[@class]就是查询div标签里面带class属性的
/@xxx 指定查询的属性内容,比如//a/img/@src 意思就是要a标签下的img里面的src属性的内容,可以用来提取照片
. 当前节点
.. 选取当前节点的父节点

//查询的父标签

比如我想查看他的上映日期,他的标签是span

image-20210820143934513

那我语法就可以用//查询全部的的span标签里面的内容,

可以看见他会叫全部的span标签的全部的数据都显示出来了

image-20210820144247618

/查询的子标签

上面的//他是输出的是全部

我们就可以用/指定输出里面的子标签

我们可以他的父标签是div子标签是span

image-20210820145652208

那我们就可以用//指定父标签/指定子标签,可以看见下面的查询的结果就少了

语法

1
//要指定的父标签/要指定的子标签

image-20210820150113015

[@xxx]指定查询属性

上面我们看见//指定父标签/指定子标签查询的结果还是有点多我们可以通过[@xxx]指定查询标签里面的属性来查询

可以看下面他有一个property="v:initialReleaseDate"属性我们就可以通过这个属性来查询了

语法

1
[@要查询的属性名]

image-20210820152347021

可以看见这样就搜索出来时间了

1
//div/span[@property="v:initialReleaseDate"]

image-20210820152445231

父标签也是可以指定的

比如想要豆瓣成员常用的标签 · · · · · ·的标签,我们就可以下面这样写

image-20210820153520090

我们就可以这样写

1
//div[@class="tags-body"]/a  # div是父标签 class="tags-body"是父标签的属性  a是子标签

image-20210820153917538

@指定查询的属性内容

1
`//a[class="nbgnbg"]/img/@src`  # 意思就是要`a`标签里面有`class="nbgnbg"`属性下的`img`里面的`src`属性的内容

image-20210821185317596

XPath表达式

更详细的https://www.w3school.com.cn/xpath/xpath_operators.asp

表达式 描述
[n] 指定查询我想要的,他这个和列表是一样的比如xxxx[1],这个是从1开始的不是0
[last()] 指定最后一个,一个你查询的结果太多我就想要最后一个就可以用last()
[position()<n] 指定前面n个结果,比如[position()<4]就是指定输出前面3
and 与,比如有一个点不成立就没有显示
or 或,只有有一个成立的就显示那个成立的
| 这个|就是和或者是或,比如`//a
* * 代表匹配所有节点

[]指定查询我想要的

可以看见的时间有好几个但是我只想要一个怎么办,我们就可以用[]来指定了,这个是从1开始的不是0

1
//div/span[@property="v:initialReleaseDate"]

image-20210820154434322

比如我只想要第一个,我们就可以下面这样写

1
//div/span[@property="v:initialReleaseDate"][1]

image-20210820154632239

比如我只想要第三个,我们就可以下面这样写

1
//div/span[@property="v:initialReleaseDate"][3]

image-20210820154746770

我们也可以指定父目录比如//div[3]/span[@property="v:initialReleaseDate"]我就不演示了

他还可以用多个[]

image-20210821183122580

[last()]指定最后一个

[last()] 指定最后一个,一个你查询的结果太多我就想要最后一个就可以用last()

下面我只想要最后一个就可以用last()

image-20210820155509253

1
//div[@class="tags-body"]/a[last()]

image-20210820155559049

[position()<n] 指定前面n个结果

[position()<n] 指定前面n个结果,比如[position()<4]就是指定输出前面3

比如下面我只想要前面三个结果就可以用[position()<n] 指定前面n个结果

1
//div[@class="tags-body"]/a

image-20210820160037782

1
//div[@class="tags-body"]/a[position()<4]

image-20210820160130203

and与

and 与,比如有一个点不成立就没有显示

image-20210825120451131

如果我错一个他就不显示

image-20210825120521450

or或

or 或,只有有一个成立的就显示那个成立的

俩个都正确都显示

image-20210825120642286

如果错一个他也会显示

image-20210825120728818

|和或者是与

这个|就是和或者是或,比如//a | //b意思是如果他俩都有都匹配,如果只有一个他也会匹配那个有点

测试

1
//div/span[@property="v:initialReleaseDate"] 

我没有添加|他会匹配3个

image-20210821181852860

如果我还想在匹配一个那我们就可以添加|来实现了

1
//div/span[@property="v:initialReleaseDate"] | //div[@class="tags-body"]/a

可以看见结果是11个

image-20210821182029158

如果他其中一个是有问题的他也会匹配那个没有问题的这个就是或

1
//div/spa| //div[@class="tags-body"]/a

下面这个前面我故意写错可以看见他会匹配后面的

image-20210821182241449