爬虫(5) - 网页数据解析(1) | XPath在爬虫中的应用
2023-02-18 15:49:50 时间
什么是XPath
- XPath即为XML路径语言(XML Path Language)
- XPath可以用于定位XML文本的节点
- 实际上,XPath也适用于定位HTML中的节点
节点及节点间的关系
- 在HTML中,节点就是一个个HTML标签
- 分析节点间的关系也就是要清楚HTML文档中各标签间的关系
- 理清这些关系对于书写XPath路径表达式来说非常重要
节点分类
- 先辈节点
- 父节点
- 兄弟节点
- 子节点
- 兄弟节点
XPath路径表达式
XPath使用路径表达式来选取XML文档(或是HTML文档)中的节点或节点集;在节点后加上带有数字的方括号,可以根据兄弟节点在文档中出现的先后次序选择元素(数字1为第一个以此类推)
通过在节点后加上带有属性名-值对的方括号,可以筛选出需要的节点
属性值的写法为:@属性名=“属性值”
路径表达式 | 描述 |
/div /span |
从根节点开始选取div节点 从根节点开始选取span节点 |
//a | 选取文档中所有a节点而不考虑其位置 |
@class | 选取名为class的属性 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
/div/a | 从根节点开始选取div节点下的a节点 |
/div/a[2]/img | 从根节点开始选取div节点下的第二个a节点下的img节点 |
//div[@class='header-wrapper'] | 选取所有属性class的值为header-wrapper的div节点 |
//* | 选取文档中所有元素 |
//@* | 选取文档中所有带属性的元素 |
/div/p/text() | 选取p节点的文本内容 |
//div[contains(@class,"post")] |
选取带有class属性且包含“post”的所有div节点 取反//div[not(contains(@class,"post"))] |
/div/p[last()-1] | 选取div下倒数第二个p节点 |
/div/p[position()>1] | 选取div下第二个p节点后的所有兄弟节点 |
/div/a|div/p | 选取div下的a节点和div下的p节点 |
相关文章
- Redis 中的 BitMaps(位图)命令详解
- Redis 概述安装
- Redis 配置文件
- Redis 发布和订阅
- Redis 持久化操作
- Redis 新数据类型
- Redis Java整合
- Redis 缓存问题
- Redis 事务与锁
- Redis 6.0新功能
- 安卓项目五子棋代码详解(三)
- 安卓项目五子棋代码详解(二)
- 安卓项目五子棋代码详解(一)
- 3xx HTTP状态码的终极指南
- React报错之React.Children.only expected to receive single React element child
- React报错之Element type is invalid
- React报错之Too many re-renders
- React报错之Function components cannot have string refs
- 如何发布一个 TypeScript 编写的 npm 包
- 如何使用zx编写shell脚本