网页抓取工具软件增强

网页抓取/数据抽取/信息提取软件工具包MetaSeekerV4.0.0在线版已经发布,网页抓取精度和适应性大大提高,此前的版本,网页抓取的数据抽取规则是完全自动生成的,用户除了通过数据映射、FreeFormat映射和样例复制品映射操作指导MetaSeeker生成数据抽取规则以外,并不能手工编写某写信息属性(网页内容片断)的数据抽取规则。V4.0.0版本开始,用户可以为某些信息属性手工定制数据抽取规则,MetaSeeker中的数据抽取规则生成工具MetaStudio将自动生成的抽取规则和手工定制的规则融合在一起,生成一个XSLT指令文件,由MetaSeeker中的网页抓取和数据抽取工具DataScraper执行该指令文件,这样,网页抓取的适应性和精度大大提高。下面,我们讲解自定义规则的两种方法。



自定义XPath规则

数据抽取规则生成工具MetaStudio生成的XSLT文件,用xsl:template语句定义被提取内容块的信息结构,根据GooSeeker给出的定义,信息结构是由信息属性组成的,就像关系数据库表由字段组成的一样,但是,MetaSeeker进行了扩展,信息结构扩展成树状结构,表结构只是一个特例,实际上可以看成是信息属性的嵌套,根据GooSeeker给出的定义,在信息结构树中,如果某信息属性有孩子信息属性,那么这类信息属性在信息结构树中称为容器节点,而没有子信息属性的节点就是叶子节点。那么在数据抽取规则文件(XSLT文件)中,每个容器节点用xsl:template语句定义其子结构,形成一种嵌套结构,通过xsl:apply-templates, xsl:call-template和xsl:for-each进行嵌套抽取。

在V4.0.0及其以前版本,容器节点仅仅作为容器,而不用来存储抽取到的内容片断,只有叶子节点才存储抽取的内容片断,在规则文件中,叶子节点使用XPath定位,一般情况下,XPath表达式是由MetaSeeker自动生成的,用户进行了数据映射、FreeFormat映射和样例复制品映射后,MetaSeeker使用一个专利算法自动生成高精度抽取XPath表达式,但是,在一些复杂情况下,手工编写XPath表达式可以更灵活的抽取内容。

MetaSeeker利用了网页的结构(例如,HTML标签、class或者id属性)进行数据抽取,这跟基于正则表达式的数据抽取方法相比泾渭分明,正则表达式的方法可以将网页文本内容中的某个字符串作为定位标志,提高数据抽取精度,使用自定义的XPath定位规则,MetaSeeker也具有了类似正则表达式提取的特征,这样,MetaSeeker结合了基于DOM+XPath+XSLT的数据抽取和基于正则表达式的数据抽取两者的优点。

例如,提取GetACoder的项目信息的信息结构project.www.getacoder.com(该信息结构开放了读权限,MetaSeeker用户都可以加载并进行分析),该页面的结构十分自由,完全使用页面结构标志不足以确保信息提取的精度,为信息属性budget手动定义了一个XPath规则,如下:

following-sibling::table[position()=1]//*[@class='bordertable']//td[contains(preceding::td[1]/font/b/text(), 'Budget')]/small/text()

以网页上出现的文字字符串"Budget"作为参照标志提取预算数字。

上例可见XPath规则能够提高数据抽取的适应性和精度,但是,XPath表达式不能随便编写,因为手工定义的XPath规则需要与MetaStudio自动生成的整个信息结构集成在一起,所以必须与该叶子节点所属的容器节点的xsl:template定位规则匹配,也就是说XPath表达式是一个相对路径,相对于容器节点的位置。那么,就需要预先确知其容器节点定位到HTML DOM中的哪个节点了,这不需要手工察看,可以让MetaStudio告诉你。

在MetaStudioBucket Editor工作台上,为某个信息属性手工定义XPath规则时,需要设置该信息属性的block特性,然后在XPath编辑框中输入自定义的XPath规则。为了知道相对于容器节点的定位路径,可以先不设置block特性,而是进行普通的数据映射,然后按Bucket Editor工作台上的MAP按钮,可以看到MetaStudio生成的XSLT规则文件,找到该信息属性的那一条语句,里面有个XPath表达式,该表达式就是相对于其容器节点进行定位的,只要仿照这个表达式写一个自定义的即可。详细操作请查阅用户手册。



自定义XSLT规则

前一节我们已经讲了:使用xsl:template进行嵌套的结构化数据抽取,MetaStudio根据映射关系生成的XSLT规则可能不能完全满足精度要求,例如,为某个信息属性提取一整块HTML区域,同时还要滤除某些内容,这样必须手工编写xsl:template模板,MetaStudio可以将其集成到自动生成的XSL文件中,自定义XSLT规则同XPath规则一样,只能应用于叶子节点,同样需要设置block特性。

手工编写的xsl:template是一个命名的模板(以信息属性名命名),MetaStudio自动生成的XSLT文件中通过xsl:call-template调用该命名的模板。怎样使用XSLT抽取HTML页面上一段内容但是不要这一段中的某些内容?讲了一个详细的例子,此文不再赘述。

Comments

操作方法参见用户手册

MetaSeeker V4.x用户手册专门一节讲解了怎样使用自定义的XPath或者自定义的XSLT模板进行网页抓取,敬请参考。