zl程序教程

您现在的位置是:首页 >  Java

当前栏目

学习XPath助力爬取中秋各大电商平台数据

2023-02-18 16:41:30 时间

目录

  1. XPath是什么?
  2. 浏览器插件: XPath Helper
  3. XPath节点
  4. XPath语法
  5. XPath运算符
  6. 实战案例 XPath是什么?
  7. XPath是一门在XML文档中查找信息的语言。
  8. XPath提供的路径表达式方便我们在XML文档中选取节点或节点集合。
  9. XPath提供了大量的标准函数,如:处理字符串,数值,日期,时间,节点,逻辑关系等。
  10. XPath符合W3C标准。 浏览器插件: XPath Helper 我们通过浏览器插件来验证我们的写XPath语句是否成功更为方便。
  11. 在Chrome浏览器的商店搜索XPath Helper并添加。
  1. 打开目标网站后点击我们的插件图标呼出操作栏
    1. 操作栏左侧为XPath语句
    2. 操作栏右侧为匹配结果

XPath节点

对于XPath来说也是包含了节点,值,节点间的关系三部分。节点有元素,属性,文本,命名空间,指令,注释和根节点7类,节点间的关系有父子关系,兄弟关系,先辈关系,后代关系。

XPath语法

// 案例演示使用

<!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>
选取节点:
  1. 选取文档所有节点:Root node name
  2. 从根节点选取:/
  3. 从任意位置选择://
  4. 选取当前节点:.
  5. 选取当前节点的父节点:..
  6. 选取属性: @
  7. 案例:
    1. 选取根元素:/html
    2. 从根元素开始选取div下的所有子元素:/html/body/div
    3. 从根元素开始选取div下的所有h3元素:/html/body/div//h3
    4. 从任意位置选取h3元素://h3
    5. 从任意位置选取style属性://@style谓语: 缩小节点的选取到指定位置
  8. 选取div下第一个h3:/html/body/div/h3[1]
  9. 选取div下最后一个h3:/html/body/div/h3[last()]
  10. 选取div下倒数第二个h3:/html/body/div/h3[last()-1]
  11. 选取div下前两个h3:/html/body/div/h3[position()<3]
  12. 选取所有带style属性的h3:/html/body/div/h3[@style]
  13. 选取所有带style属性且值为600磅的h3:/html/body/div/h3[@style="font-weight: 600;"]
  14. 选取title元素和div下的所有子元素:/html/head/title | /html/body/div 选取未知节点:
  15. 匹配未知元素:*
  16. 匹配未知属性:@*
  17. 匹配任何类型的节点:node() XPath运算符 图表来源:https://www.runoob.com/xpath/xpath-operators.html

运算符

描述

+

加法

-

减法

*

乘法

div

除法

=

等于

!=

不等于

<

小于

<=

小于或等于

>

大于

>=

大于或等于

or

and

mod

计算除法的余数

利用中秋各大电商平台页面实战

目标:
  1. 获取搜索到的第一件商品的信息。
  2. 获取搜索到的前三件商品的信息。
  3. 获取搜索到的最后一件商品的信息。
  4. 获取搜索到的价格大于200元的商品信息。

淘宝平台实战: https://s.taobao.com/search?q=中秋月饼

商品各字段匹配:

  1. 匹配商品名称: //div[@data-category="auctions"]/div[2]/div[2]/a
  2. 匹配价格: //div[@data-category="auctions"]/div[2]//div[@class="price g_price g_price-highlight"]/strong
  3. 付款人数: //div[@data-category="auctions"]/div[2]/div[1]/div[2]
  4. 匹配封面: //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后再手工调整来节省时间,如下图所示。

  1. Copy XPath://*[@id="bd672fe6-3dd0-475e-96db-4b0fe71f72eb"]/div[2]/div/div[1]/div/div/div/div[1]/a
  2. Copy full XPath:/html/body/div/div/section/section/main/div[2]/div/div/div[2]/div/div[1]/div/div/div/div[1]/a

结语

通过浏览器的开发者工具我们可以看到选取节点的方式有selector,JSPath等,选择自己习惯用的就可以了,熟练的选取元素节点为你的爬虫添砖加瓦吧~~~