持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
学习原因
前几天学习并且在项目里用python爬虫给数据库插入初始数据,需要查询返回网页里的标签,因此学习了一个和CSS选择器语法不一样的新的xml选择器——xPath。
xPath是啥
xpath可以使用路径表达式在XML上选取节点,从而达到确认元素的目的。
xPath语法
我们用html来举例。
| 表达式 | 作用 |
|---|---|
| nodename | 就是div等内容,标识标签名 |
| / | 代表子节点,如果前面没有东西就从根结点开始选 |
| // | 子孙结点,不需要是儿子 |
| . | 当前结点 |
| .. | 上一级结点 |
| @ | 选取属性,类比CSS中div[class='xxx'] |
| [n] | 选取第n个符合条件的结点 |
我们举个例子
//div[@class="d"][1]
意思是选取第1个class为d的div
注意中括号内部下标从1开始。
获取文本或属性
| 方法 | 效果 |
|---|---|
| /text() | 获取标签下直系的标签内容 |
| //text() | 获取标签中所有的文本内容 |
| string() | 获取标签中所有的文本内容 |
| @t | 获取标签t属性的内容 |
如果仅仅爬虫获取数据的话,上文已经足够我们使用,不过xpath也提供了更丰富的操作。
| 通配符 | 作用 |
|---|---|
| * | 匹配任何元素节点。 |
| @* | 匹配任何属性节点。 |
| node() | 匹配任何类型的节点。 |
| 路径表达式 | 结果 |
|---|---|
| /bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
| /bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
| /bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
xPath也提供了上百个函数供我们使用,一些常用的数学函数比如abs都可以直接使用。
chrome插件
为了方便爬取数据,我们可以使用XPath Helper直接在浏览器使用xPath语法匹配元素。 安装后在页面按shift+CTRL+x打开黑框
左侧书写xPath语法,右侧可以直接给出查询结果。 也可以按住shift移动鼠标到希望选区的标签上,就可以获取表达式。