经过上面章节介绍的步骤,针对某个样本页面的抓取网页数据的规则已经定义好了,如果预览和验证抓取网页数据的规则时发现没有达到预想效果,可以采用本节介绍的方法微调抓取网页数据的规则,本节的方法仅仅是“微调”,即,使用不同的HTML DOM节点的XPath表达式的生成原则,微调定位算法。如果是因为定义的信息结构不合理或者进行了错误的映射,应该采用本手册开头介绍的“分析-验证-再分析”循环过程修正信息结构。
在图形用户界面(GUI)上,通过一些可配置项,用户可以干预MetaStudio计算网页数据抓取规则的过程,这些可配置项称为首选项,本版本的首选项只有一类:XPath定位表达式的生成原则。而XPath表达式用于在确定的页面位置上抓取网页数据,那么通过修改此首选项可以干预网页数据的抓取效果。
从V3.x版本,开始引入了FreeFormat专利技术,实际上就是利用网页上的一些HTML的结构性标志定位被抓取的网页数据,这些标志可以是特定的HTML标签,也可以是HTML元素(element)的属性,当前版本主要使用HTML元素的id和class属性,这些属性在HTML页面上一般作为CSS selector与特定的显示样式挂钩,因为特定的显示样式一般为了突出显示特定的语义,所以,这些标志很有价值。在此,我们称这些标志为FreeFormat标志,与Microformat对应,而Microformat是FreeFormat的特例,如果页面含有Microformat标志,抓取网页数据操作是最高效和最直接的。
MetaStudio在生成XPath表达式时,将使用这些标志,而不总是生成绝对定位的表达式,例如,从html节点开始的绝对的XPath定位路径。定位表达式从id或者class属性节点开始将大大降低页面结构变化造成的影响,例如,从FreeFormat标志节点上溯到html节点之间的任何结构变化都不影响原先生成的抓取网页数据的规则。
但是,一些复杂状况需要一定范围的人工干预,例如:
- 如果从网页上抓取多块相同语义结构的数据,例如,从商品列表页面上抓取多个商品信息,如果每一块在HTML页面上都用不同的id标志,如果id标志作为FreeFormat标志,那么一个XPath定位规则只能抓取网页上的一块数据。
- 如果使用网页上的class属性作为定位标记,但是class属性使用得很泛滥,很有可能会抓取到一些错误的数据。例如,一些比较老的论坛网站,无论论坛帖子还是其它页面数据块,可能都用了相同的class属性,如果参照class属性抓取论坛帖子就会抓到错误的数据。
上面略举两例,为了保证抓取网页数据的精确性,MetaStudio允许用户修改XPath表达式生成原则,可以选择下面的定位原则之一:
- 绝对定位:DOM节点的定位表达式是一个绝对路径的XPath表达式,这种定位方法灵活性很差,目标页面结构变化会导致定位表达式失效,但是在没有FreeFormat标志或者无效的情况下应该使用该选项
- 任何一个:DOM节点的定位表达式是从最近的拥有class或者id特性的HTML节点开始的
- 偏好id:计算DOM节点的定位表达式时,尽量找最近一个拥有id特性的HTML节点作为定位表达式的起点,如果没有找到,则找最近的拥有class特性的HTML节点,这是缺省设置。
- 偏好class:计算DOM节点的定位表达式时,尽量找最近一个拥有class特性的HTML节点作为定位表达式的起点,如果没有找到,则找最近的拥有id特性的HTML节点。
- 只用id:计算DOM节点的定位表达式时,找最近一个拥有id特性的HTML节点作为定位表达式的起点,如果没有找到,不会使用拥有class特性的HTML节点。
- 只用class:计算DOM节点的定位表达式时,找最近一个拥有class特性的HTML节点作为定位表达式的起点,如果没有找到,不会使用拥有id特性的HTML节点。
所谓最近,是从当前HTML DOM节点开始,向顶层html节点方向计算。
上述首选项可以全局设置,也可以为某个信息结构特别设置。
- 全局配置,在系统菜单配置下有一个菜单项首选项,全局定位标签页中的配置项设定好以后存储在MetaStudio本地,无论编辑哪个信息结构,都采用该规则,但是,优先级比信息结构特定配置低,会被后者覆盖,也就是说在没有后者的情况下才使用全局配置。但是,当前版本生成的信息结构都有特定的配置项,所以,全局配置主要为了兼容以前版本生成的信息结构。另外,还有一个标签页,是关于线索定位规则的,将在下一章讲解。
- 信息结构特有配置,在Bucket Editor工作台的信息结构标签上有鼠标右键弹出菜单,其中有菜单项首选项,可以为当前信息结构设置定位原则,该配置存储在信息结构描述文件中。