解决如何提取网页数据的问题

如何提取网页数据?MetaSeeker软件工具包提供了按照“规则”提取网页数据的解决方案,这与基于“自适应算法”的自动语义识别方案不同,虽然看起来没有后者高级,但是,MetaSeeker能够有效地解决实际问题而不仅限于实验室研究、提取网页数据的精确度是确定的而不是仅仅给出一个概率估计、网页数据提取速度很高而不是缓慢的数学运算。当然,MetaSeeker拥有的这些优点也是用一些代价换来的,最大的代价是需要操作员协助MetaStudio(MetaSeeker软件工具包中的一个工具)定义提取网页数据的规则,好在MetaStudio强大的图形用户界面和专利算法将操作员从手工编写网页数据提取规则的劳动中解放出来,而且避免手工编写引入错误。本章将详细讲解如何定义网页数据提取规则,然后,将MetaStudio自动生成的提取规则交给网络爬虫工具DataScraper,执行这些规则文件,最终回答如何提取网页数据的问题。

从V3.x版本开始引入的FreeFormat整理箱,使提取网页数据的规则定义操作大大简化,如果被提取的HTML文档本来就有规整的语义结构,例如,采用Microformat标准的页面,定义网页数据提取规则的操作可能只需点击几次鼠标。操作复杂性的降低并没有损害MetaSeeker工具包的能力,相反,网页数据的提取规则的适应性、兼容性和准确性大大提高,这都有赖于专有的FreeFormat技术,因此,MetaStudio (在线版)从V3.x开始只提供FreeFormat整理箱,完全替代了以前版本的ListBucket整理箱。

FreeFormat整理箱是树状结构,树中的每个节点(信息属性)分成两类:

  • 容器节点:拥有子节点
  • 叶子节点:没有子节点
我们以信息结构Product_Category_mdiChina/default(在MetaStudio的Schema List工作台上可以加载这个信息结构)为例,讲解FreeFormat整理箱的特性:

  • 容器可以嵌套
  • 容器及其包容的内容代表模块化语义结构的子模块
  • 容器代表的子模块可以是单实例的也可以是多实例的。
  • 单实例是指在页面上具有此子模块结构的信息块只有一块,例如,Product_Category_mdiChina整理箱的顶层容器category
  • 多实例是指在页面上具有此子模块结构的信息块有多块,例如,Product_Category_mdiChina整理箱的子容器d1有多个实例
  • 叶子节点只有单实例
  • 为了提取多实例网页数据,有多种方法:
    • 使用FreeFormat标记:将HTML文档元素的class特性作为FreeFormat标记,一个页面上具有相同class值的元素可能存在多个。详细参见FreeFormat映射
    • 使用样例复制品映射技术:样例复制品是MetaSeeker专有的用于计算多实例重现参数的技术,将作为样例的两个DOM节点映射到同一个信息属性上,详细参见样例复制品映射

说明:样例复制品是从MetaStudio V2.x版本开始引入的技术,用于提取多实例信息块,例如,在产品列表页面上多个产品信息,需要把两个样例复制品都映射到同一个信息属性上,然后由MetaStudio计算出重复周期参数,这样操作很繁琐,因为在V2.x版本中,要为每个信息属性都映射两次;而且使用ListBucket整理箱只能提取二维表格。MetaStudio 从V3.x开始使用FreeFormat整理箱,改进了样例复制品算法,不必为每个信息属性都重复映射两次,而只需要为多实例容器节点映射两次;同时,FreeFormat整理箱能够提取树状网页数据结构。这些特点在接下来的章节中将会充分展现。