XPath|掌握数据采集工具的核心技巧

您所在的位置:网站首页 简易网页采集器 XPath|掌握数据采集工具的核心技巧

XPath|掌握数据采集工具的核心技巧

2023-05-10 16:11| 来源: 网络整理| 查看: 265

简介

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。

在我所熟悉的国内几种采集器(如八爪鱼、后羿采集器和火车采集器)中都广泛使用XPath作为其核心网页标记定准工具。

因此,掌握XPath的话,再使用各种采集器软件便是小菜一碟。但是,这并要求对于XPath有非常彻底的掌握,但是也需要用户有一定的HTML与CSS选择器等基础;否则,还是比较困难的,无论工具官方怎么解释,都绕不过这个“槛”去!

语法

选取节点 XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取,即绝对路径表示方式。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式

结果

bookstore

选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book

选取属于 bookstore 的子元素的所有 book 元素。

//book

选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang

选取名为 lang 的所有属性。

标准函数

本文不再赘述有关XPath的各种使用细节,具体的知识各位可参考文后引用资料。

XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。

本文侧重介绍7个常用的XPath函数及其在上述采集工具中的应用。

1.text函数

第一个是text函数,是通过文本来定位网页元素的函数,它查找的是当前元素的文本。写法是[text)="文本]。

XPath|掌握数据采集工具的核心技巧_firefox

【注意】使用tex0=“文本"时,双引号内的文本必须和网页上的一模一样!

还有一个与text类似的函数是string函数。

text函数是通过文本来定位网页元素的函数,它查找的是当前元素的文本写法是[tex)="文本]。string函数则是用字符串来定位网页元素的函数,它查找的是当前元素及其包含的所有元素的文本。

【注意】string和text都要求双引号内文本和网页源码中的完全一样,稍有不同就会定位不到。为了实现更灵活的定位,一般都会配合 contains0函数来使用。

第二个是 contains0函数,是用来判断标签的文本中是否包含XX或者判断某个属性的属性值是否包含X×X写法是[ contains(text())文本或[ contains(@属性,属性值")。

2.contains函数

第二个是 contains函数,是用来判断标签的文本中是否包含XX或者判断某个属性的属性值是否包含X×X写法是[ contains(text())文本或[ contains(@属性,属性值")。

例如,对于上面的表达,可以写成如下形式:

Xpath可以这样写:// a[contains(text(),"后页")或/ a[contains( string(),"后页")]

含义即:超链接的文本标签中包含“后页”即是满足条件的超链接(也称为“锚”)标签。

【注意】使用 contains函数,text和 string双引号里的文本不需要和网页中的一模一样,只需填写一部分就可以。这可以避免因网站改版,如网页中少了大于号或前后多了空格,而定位不到的情况。

3.position函数

第三个是 position函数,它是用来定位节点的位置和范围,常用于控制循环列表的项。写法是:

[position()=数字]

使用举例,如下图:

XPath|掌握数据采集工具的核心技巧_XPath_02

注意到,我在调试面板的XPath表达式中输入了:

.//*[@id='managerBlogList']/div[position()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3