同网站不同网页结构怎样采集

精确采集网站数据的方法与搜索引擎的网络爬虫采集数据的方法不同,普通网络爬虫将所有文本内容采集下来即可,精确采集要求只采集指定的内容,并且进行结构化转换,可以将采集结果存入数据库、EXCEL表格之中。如果需要大批量地从目标网站采集数据,那么要求目标网站的网页结构是确定的,而且不同结构的数量是有限的。如果每个网页都是手工编写的HTML文档,精确采集的经济性很差。好在现在的网站大部分采用CMS(Content Management System)或者现成的论坛和博客系统,网站的所有网页都套用有限的几个网页模板,使得批量精确采集变得可行。即便如此,如果采集的精度要求很高,网页上的细微变化有可能导致采集规则失效。例如,《MetaSeeker速成手册》讲解的大量案例都属于采集电子商城价格建设商品比价系统的范畴,这种采集属于高精度采集。

本文将讲解怎样应对网页结构的细微变化,MetaSeeker有一套独特的理论和方法。MetaSeeker将HTML这种半结构化的内容转换成结构化数据,存储在一个容器中,称为整理箱,整理箱的结构描述、内容的转换规则等等信息包装在一起称为信息结构,每个信息结构都代表特定语义,即所谓的主题。可见,按顺序前者被后者包容。如果属于同一主题的一组网页的HTML存在细微的差别,可以用多个信息结构进行描述,这些信息结构的主题名是一样的,用辅名予以区别。下面将讲解使用方法。

注释1:本文不是入门教程,如果读者刚开始学习MetaSeeker的使用方法,请按照《MetaSeeker速成手册》的章节顺序阅读。

注释2:随着时间的推移,本文讲到的信息结构可能会失效,即无法完全正确地加载到MetaStudio的工作台上,请参照《修改失效的采集规则》予以调整



1 采集目标

读者可以将本文提到的信息结构加载到MetaStudio的工作台上,实际体验一下可以提高阅读效果。

  • 样本页面:新蛋网的 http://www.newegg.com.cn/SubCategory/978.htm
  • 主题名:demo_NE_list_1
  • 信息结构辅名1:default
  • 信息结构辅名2:second
  • 要采集的商品信息
    • 商品网页
    • 商品名
    • 新蛋价格
  • 翻页采集每个分页上的所有商品


2 定义信息结构


图1

图1显示了定义数据采集规则的步骤:

  1. 为采集数据进行数据映射和FreeFormat映射,其中FreeFormat映射不是必须的,为了提高采集规则的适应性和精度进行适当选择
  2. 为采集多实例进行FreeFormat映射。所谓多实例,就是一个网页上有很多商品,每个商品就是一个实例。为了采集多实例,还可以采用样例复制品规则,详细参见《采集当当网百货价格》
  3. 为精确定位进行FreeFormat映射,这样做可以大大提高采集规则的适应性,抵御网页结构变化对采集规则的影响。详细参见《精确提取新蛋网商品价格信息》

翻页采集我们不再赘述,请参见《精确提取新蛋网商品价格信息》

信息结构定义好以后,采用主题名:demo_NE_list_1,辅名:default,上载该信息结构,保存到MetaSeeker服务器上。



3 发现网页结构变化

DataScraper利用该信息结构翻页采集新蛋网的商品价格信息时,发现翻页到最后一个分页,信息结构不符合网页结构,采集失败。


图2

我们将第一个分页和最后一个分页的DOM放在一起,很容易发现两者的差别,仅仅是FreeFormat标志不一样。在图1显示的第二步中,我们采用FreeFormat映射采集多实例,就用了这一个FreeFormat标志,看来,如果我们一开始采用样例复制品规则采集多实例,也许不会遇到这个问题。但是,这并不说明不应该采用FreeFormat映射,FreeFormat在精确定位方面仍然有优势,我们只要解决这个网页结构变化问题即可,按照图3和图4讲解的步骤定义另一个同主题的信息结构。


图3

假设我们已经成功加载了信息结构 demo_NE_list_1 / default,按照图3进行如下步骤:

  1. 将网页结构有变的网页地址输入地址输入框,回车后,等待网页加载
  2. 看到工具条中部的图标变成红色的,表示新网页完全加载完了
  3. 选择MetaStudio菜单“文件”-〉“分析页面”,用当前工作台上的信息结构分析新加载的网页,会有一些对话框弹出来,告知某某信息属性分析不成功。
  4. 修正数据映射和FreeFormat映射关系


图4

紧接着进行图4的步骤:

  1. 转到Theme Editor工作台,修改辅名
  2. 点击工具条上的按钮schema,上载新信息结构。


至此,我们在同一主题下定义了两个信息结构,不必操心DataScraper的操作方法,一切照旧,DataScraper能够自动找到一个合适的信息结构。