学习XPath助力爬取中秋各大电商平台数据
我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛
目录
- XPath是什么?
- 浏览器插件: XPath Helper
- XPath节点
- XPath语法
- XPath运算符
- 实战案例
XPath是什么?
- XPath是一门在XML文档中查找信息的语言。
- XPath提供的路径表达式方便我们在XML文档中选取节点或节点集合。
- XPath提供了大量的标准函数,如:处理字符串,数值,日期,时间,节点,逻辑关系等。
- XPath符合W3C标准。
浏览器插件: XPath Helper
我们通过浏览器插件来验证我们的写XPath语句是否成功更为方便。
- 在Chrome浏览器的商店搜索XPath Helper并添加。
- 打开目标网站后点击我们的插件图标呼出操作栏
- 操作栏左侧为XPath语句
- 操作栏右侧为匹配结果
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>
选取节点:
- 选取文档所有节点:Root node name
- 从根节点选取:
/
- 从任意位置选择:
//
- 选取当前节点:
.
- 选取当前节点的父节点:
..
- 选取属性:
@
- 案例:
- 选取根元素:
/html
- 从根元素开始选取div下的所有子元素:
/html/body/div
- 从根元素开始选取div下的所有h3元素:
/html/body/div//h3
- 从任意位置选取h3元素:
//h3
- 从任意位置选取style属性:
//@style
- 选取根元素:
谓语:
缩小节点的选取到指定位置
- 选取div下第一个h3:
/html/body/div/h3[1]
- 选取div下最后一个h3:
/html/body/div/h3[last()]
- 选取div下倒数第二个h3:
/html/body/div/h3[last()-1]
- 选取div下前两个h3:
/html/body/div/h3[position()<3]
- 选取所有带style属性的h3:
/html/body/div/h3[@style]
- 选取所有带style属性且值为600磅的h3:
/html/body/div/h3[@style="font-weight: 600;"]
- 选取title元素和div下的所有子元素:
/html/head/title | /html/body/div
选取未知节点:
- 匹配未知元素:
*
- 匹配未知属性:
@*
- 匹配任何类型的节点:node()
XPath运算符
运算符 | 描述 | |
---|---|---|
计算两个节点集 | ||
+ | 加法 | |
- | 减法 | |
* | 乘法 | |
div | 除法 | |
= | 等于 | |
!= | 不等于 | |
< | 小于 | |
<= | 小于或等于 | |
大于 | ||
>= | 大于或等于 | |
or | 或 | |
and | 与 | |
mod | 计算除法的余数 |
利用中秋各大电商平台页面实战
目标:
- 获取搜索到的第一件商品的信息。
- 获取搜索到的前三件商品的信息。
- 获取搜索到的最后一件商品的信息。
- 获取搜索到的价格大于200元的商品信息。
淘宝平台实战:
商品各字段匹配:
- 匹配商品名称:
//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
匹配搜索到的第一个商品: //div[@data-category="auctions"][1]
匹配搜索到的前三个商品: //div[@data-category="auctions"][position()<=3]
匹配搜索到的最后一个商品: //div[@data-category="auctions"][last()]
//div[@class="price g_price g_price-highlight"][strong>200]/../../..
备注: 我们也可以通过浏览器的开发者工具来直接获得XPath后再手工调整来节省时间,如下图所示。
- Copy XPath:
//*[@id="bd672fe6-3dd0-475e-96db-4b0fe71f72eb"]/div[2]/div/div[1]/div/div/div/div[1]/a
- 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等,选择自己习惯用的就可以了,熟练的选取元素节点为你的爬虫添砖加瓦吧~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)