前面几节讲述了完整的使用MetaStudio软件工具定义信息结构并生成网页提取规则的流程,本节专门讲述提高网页提取能力的V4.x版本新增功能的使用方法,该新特性的原理记录于文章《网页提取工具软件增强》。
语义结构定义和网页提取规则生成工具软件MetaStudio的最大优势在于:图形用户界面(GUI)免除操作员编写复杂的网页提取规则文件,避免引入编码错误。但是,完全使用GUI必然约束网页提取规则的适用力,如果网页结构十分复杂,例如,页面上的与主题有关的应该被提取的数据与无关数据穿插在一起,这样需要在HTML网页上一块区域中将不需要的内容逐一挖掉,必须编写复杂的XSLT模板(template)。MetaStudio V4.x版本对网页提取能力进行了增强,引入了两个级别的自定义网页提取规则片断的手段:
注意:当前版本的MetaSeeker只为信息结构树中的叶子节点提取网页数据,所以,只能为叶子节点定制网页提取规则。
上图是为了从GetACoder项目网站上提取结构化项目信息定义的信息结构,为信息属性budget定制了一个XPath定位表达式,因为在这个网页上,FreeFormat标志几乎没有,无法通过FreeFormat标志映射达到精确提取网页内容的目的,如果单纯使用数据映射,网页提取规则又容易受网页结构变化的影响,所以,不得不求助于页面上的文字标志,有点像使用正则表达式进行网页提取,此例,利用了页面上的文字“Budget”,定义了XPath表达式:
表示,从网页上的文字"Budget"后提取出预算数字。
操作步骤如下:
其中,第1~3步看似多余,实际上是要确定自定义的XPath表达式的定位路径从哪个DOM节点开始,上例是从following-sibling::table[position()=1]开始的,而不是从顶层的html节点开始,也就是说自定义的XPath表达式必须能够无缝嵌入MetaStudio自动生成的网页提取规则框架文件中。
上图是为了从GetACoder项目网站上提取结构化项目信息定义的信息结构,为信息属性description定制了一个XSLT模板,因为在这个网页上,FreeFormat标志几乎没有,无法通过FreeFormat标志映射达到精确提取网页内容的目的,而且关于项目的信息没有放在一个单独的HTML DOM节点下(例如,DIV元素节点),而是和其它无关网页内容并列存放,所以,需要定制一个XSLT模板,将提取网页上黑体Description到黑体Reminder之间的文字,包括Reminder及其后面的文字都滤除掉,XSLT模板如下:
<xsl:template name="description">
<xsl:copy>
<xsl:apply-templates select="node()" mode="copy-description"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()" mode="copy-description">
<xsl:copy>
<xsl:apply-templates select="node()" mode="copy-description-deeper"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()" mode="copy-description-deeper">
<xsl:copy>
<xsl:apply-templates select="node()" mode="copy-description-deeper"/>
</xsl:copy>
</xsl:template>
自定义XSLT模板进行网页提取的配置过程要比自定义XPath表达式简单一些,不用确定XPath定位路径的起始HTML DOM节点,步骤如下:
注意:为信息属性定义的模板一定是一个命名模板,并且以信息属性名命名该模板