对于XPath来说也是包含了节点,值,节点间的关系三部分。节点有元素,属性,文本,命名空间,指令,注释和根节点7类,节点间的关系有父子关系,兄弟关系,先辈关系,后代关系。
// 案例演示使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<h3 style="font-weight: 500;">Hello XPath 1</h3>
<h3 style="font-weight: 600;">Hello XPath 2</h3>
<h3 style="font-weight: 600;">Hello XPath 3</h3>
</div>
</body>
</html>
/
//
.
..
@
/html
/html/body/div
/html/body/div//h3
//h3
//@style
谓语:
缩小节点的选取到指定位置
/html/body/div/h3[1]
/html/body/div/h3[last()]
/html/body/div/h3[last()-1]
/html/body/div/h3[position()<3]
/html/body/div/h3[@style]
/html/body/div/h3[@style="font-weight: 600;"]
/html/head/title | /html/body/div
选取未知节点:
*
@*
运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
div | 除法 |
= | 等于 |
!= | 不等于 |
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
or | 或 |
and | 与 |
mod | 计算除法的余数 |
淘宝平台实战: https://s.taobao.com/search?q=中秋月饼
商品各字段匹配:
//div[@data-category="auctions"]/div[2]/div[2]/a
//div[@data-category="auctions"]/div[2]//div[@class="price g_price g_price-highlight"]/strong
//div[@data-category="auctions"]/div[2]/div[1]/div[2]
//div[@data-category="auctions"]/div[1]//img/@src
```shell 匹配搜索到的第一个商品: //div[@data-category="auctions"][1]
![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7da4a5ec0660461a8816466435e4411a~tplv-k3u1fbpfcp-zoom-1.image)
```shell
匹配搜索到的前三个商品:
//div[@data-category="auctions"][position()<=3]
匹配搜索到的最后一个商品:
//div[@data-category="auctions"][last()]
//div[@class="price g_price g_price-highlight"][strong>200]/../../..
备注: 我们也可以通过浏览器的开发者工具来直接获得XPath后再手工调整来节省时间,如下图所示。
//*[@id="bd672fe6-3dd0-475e-96db-4b0fe71f72eb"]/div[2]/div/div[1]/div/div/div/div[1]/a
/html/body/div/div/section/section/main/div[2]/div/div/div[2]/div/div[1]/div/div/div/div[1]/a
通过浏览器的开发者工具我们可以看到选取节点的方式有selector,JSPath等,选择自己习惯用的就可以了,熟练的选取元素节点为你的爬虫添砖加瓦吧~~~