解析库XPath的语法
学习总结
XPath( XML Path Language),他是在html和xml中查找信息的语言,他是通过标签属性来查询
谷歌安装XPath插件和说明
名称XPath Helper




按Shift+鼠标上下可以调整位置
XPath语法
| 表达式 | 描述 |
|---|---|
| // | 查询的父标签,比如//div就是查询这个页面的全部是div的标签 |
| / | 查询的子标签,比如//div/span就会叫div标签下的span子标签 |
| [@xxx] | 指定标签里面属性来查询,比如//div[@class]就是查询div标签里面带class属性的 |
| /@xxx | 指定查询的属性内容,比如//a/img/@src 意思就是要a标签下的img里面的src属性的内容,可以用来提取照片 |
| . | 当前节点 |
| .. | 选取当前节点的父节点 |
//查询的父标签
比如我想查看他的上映日期,他的标签是span

那我语法就可以用//查询全部的的span标签里面的内容,
可以看见他会叫全部的span标签的全部的数据都显示出来了

/查询的子标签
上面的//他是输出的是全部
我们就可以用/指定输出里面的子标签
我们可以他的父标签是div子标签是span

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

[@xxx]指定查询属性
上面我们看见//指定父标签/指定子标签查询的结果还是有点多我们可以通过[@xxx]指定查询标签里面的属性来查询
可以看下面他有一个property="v:initialReleaseDate"属性我们就可以通过这个属性来查询了
语法
1 | [@要查询的属性名] |

可以看见这样就搜索出来时间了
1 | //div/span[@property="v:initialReleaseDate"] |

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

我们就可以这样写
1 | //div[@class="tags-body"]/a # div是父标签 class="tags-body"是父标签的属性 a是子标签 |

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

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"] |

比如我只想要第一个,我们就可以下面这样写
1 | //div/span[@property="v:initialReleaseDate"][1] |

比如我只想要第三个,我们就可以下面这样写
1 | //div/span[@property="v:initialReleaseDate"][3] |

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

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

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

[position()<n] 指定前面n个结果
[position()<n] 指定前面n个结果,比如[position()<4]就是指定输出前面3个
比如下面我只想要前面三个结果就可以用[position()<n] 指定前面n个结果
1 | //div[@class="tags-body"]/a |

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

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

如果我错一个他就不显示

or或
or 或,只有有一个成立的就显示那个成立的
俩个都正确都显示

如果错一个他也会显示

|和或者是与
这个|就是和或者是或,比如//a | //b意思是如果他俩都有都匹配,如果只有一个他也会匹配那个有点
测试
1 | //div/span[@property="v:initialReleaseDate"] |
我没有添加|他会匹配3个

如果我还想在匹配一个那我们就可以添加|来实现了
1 | //div/span[@property="v:initialReleaseDate"] | //div[@class="tags-body"]/a |
可以看见结果是11个

如果他其中一个是有问题的他也会匹配那个没有问题的这个就是或
1 | //div/spa| //div[@class="tags-body"]/a |
下面这个前面我故意写错可以看见他会匹配后面的




