一、常见使用场景

在日常使用八爪鱼采集数据时,偶尔会出现一些特殊情况,比如说某个采集步骤因为网页或八爪鱼识别的问题,定位发生了偏差,导致自动生成的XPath有点问题,采集出错。这个时候需要我们手写XPath来定位想要设置的步骤,而八爪鱼有个内置的XPath工具,可以帮助大家写一些简单的XPath定位(除了打开网页步骤没有XPath工具以外,其他步骤都有)。

 

二、XPath工具位置

XPath工具可以在两个地方打开。

一个入口是:登陆进去后的软件首页-工具箱里可以直接打开。

 

另一个入口是:流程中步骤的“自定义”按钮,点击进入 

点击“自定义”按钮后,点击“不懂XPath,试试XPath工具”

 

三、XPath工具界面介绍

打开XPath工具,该工具界面主要分为五个部分:

左上是填写网址

左中是浏览器

左下是页面HTML源码(由于XPath工具的网页源码层次不分明,查看源码的话建议使用火狐浏览器的插件Firebug和FirePath,火狐浏览器54版或之前版本才支持这两个插件,Chrome浏览器有类似插件XPath Helper。以下是XPath的入门教程,新用户请稍后学习下:http://www.bazhuayu.com/tutorial/gnd/XPath

右上是定位参数(工具将根据你填写的参数生成XPath)

右下是按要求点击生成后匹配到的XPath

 

1、我们来看一下定位参数

 

 

1)元素标签名称:火狐里所有的蓝色字体就是元素标签名称,如下:span, a, h, br等,具体填什么参数名需到火狐里看你要定位的那行代码最前面的标签是什么,这里就写什么,火狐里看得比较清楚:

 

2)元素位置:默认填了1,这个位置的意思就是第几个,一般用得较少,因为火狐里自动生成的XPath很多都是用位置定位的,要用这个不如用火狐生成来得快;

 

3)元素ID属性值,元素name属性值,元素class属性值:属性值就是一行源码内用<>尖括号括起来的参数,会有很多,这里的三个属性值是大部分网页都会有的属性值,这里只有三种,但改也是可以的,例如:

 

 

该a标签下有class,href和target三个属性。如果你想以属性class定位,就直接把class=后面引号内部的参数复制出来粘到格子里,点击生成就会自动生成以class属性值定位的XPath路径。

 

如果你想定位的属性不是这三个,比如说target,也可以直接把target=后面引号里的属性值复制一下,随便放入到一个属性里面

 

这时候是匹配不到的,需要将生成的XPath里的属性改成target,即对图中@与=之间的属性进行更改:

 

4)元素文本:是火狐里的所有黑色字体,一般是会在网页显示出来我们可以直接看到的字体,如果要填这一格,填的必须是全部的文本,少一个空格标点符号,全角半角不一致都会导致定位不到,不过要是是纯文字的那就没问题;

 

5)元素文本包含字符串:包含,顾名思义就是只要文本里有就可以。含有这一串内容的某几个连续的字,就会定位出来,不用管什么标点符号空格;

 

6)元素文本开始字符串:就是前几个字,如果源码里是以什么空格标点符号之类的开头的,如果这里没写,就定位不到;


2、看完了右上角的参数设置,我们来看一下右下角的元素之间的层级关系

父级元素,子级元素,这两个是相对应的,

前面元素,后面元素也是相对应的。

这里我们去火狐里截取一小段源码,来简单说明一下:

 

红框里,a元素的父级元素是div,div的子级元素是a。a,span,div三个都是同胞元素(或兄弟元素),span的前面元素是a,a的后面元素是span,以此类推。

这几个参数的主要功能是当你想要的数据没有可定位的参数,或者有参数但是不可用的时候,可以先定位到该元素的附近,再看看是父子关系还是前后(同胞)关系,从而定位到最终想要的数据位置。

 

四、XPath工具操作示例

这边XPath工具的基本功能点就讲完了,下面我们来看一个实例。

 

1、操作示例

需求:无下一页,只有数字的页面怎么实现翻页

示例URL:http://stock.cngold.org/news/index.html

 

2、操作步骤

这类网站都是没有下一页,翻页的地方只有数字,但是当前页在源码里查看是有标识的,或者说当前页的元素跟下一页的元素都是不一样的,所以每次定位到当前页的下一页即可实现翻页的步骤。

首先,我们去火狐浏览器里打开Firebug,从源码可以看到,当前页的标签是span,跟下一页的标签a不一样,而且它的属性是class,class属性的属性值是thisclass,下面的a标签都没有class属性,只有href。

 

从而,我们就可以用thisclass为标识先定位到当前页,

 

再定位到当前元素span的下一个元素,点一下后面元素

 

因为需要定位到后面元素的第一个a标签,所以在工具里按图设置一下,就大功告成了,

 

把该XPath复制一下放入到火狐里面去检查一下,任何页面都是可以匹配到下一页的

当前页是第1页,通过此条XPath,定位到第2页:

 

 

当前页是第4页,通过此条XPath,定位到第5页:

 

就这样,循环翻页的XPath就大功告成了,到八爪鱼里,手动创建一个循环,然后选择单个元素,把该XPath放入,再拖一个点击元素进去,勾选循环,这样,翻页循环就创建好了,后续的步骤用户可以自行设置,不懂的话也可以先看一下我们的自定义模式新手教程,快速上手:http://www.bazhuayu.com/tutorial/xsksrm/rmjccz

 

五、重要补充

XPath工具除了解决网页数字翻页这类问题外,还可以解决一些其他比较常见的问题:最后一页死循环 (这类问题一般都是网页翻到最后一页后,八爪鱼还能识别到下一页的元素位置,导致死循环,这时也得先去火狐里查看一下源码里下一页位置在正常页与最后一页标签的元素跟属性值的不同,从而来设置XPath),简单的字段定位等等。

用户可以先使用XPath工具来设置一些简单的XPath,慢慢熟悉上手后,可以去火狐里手动创建更为复杂的XPath,来帮助自己使用八爪鱼采集到任何复杂页面的数据,做个采集达人!