网页抽取规则失效怎么办

网页抽取软件系统MetaSeeker采用了多项发明专利,例如,确保有很高适应性的FreeFormat技术,当目标网页结构发生改变时,该技术能够尽可能确保以前定义好的网页抽取规则有效。但是,如果目标网站大规模改版,无法避免网页抽取规则失效。此时,MetaSeeker还有最后一道防线:降低修改规则的复杂度,用可见即可得(WYSISYG)的方式修正以前的规则,就像操作MS Word编辑文字文档一样简单。

下面,我们用主题名demo_JD_list_1信息结构为例说明怎样修改失效的抽取规则。修改后的信息结构的主题名是demo_JD_list_2,以资区别。

注释1demo_JD_list_1是在写作本文之前不久定义好的信息结构,详细步骤参见《抽取京东商城网页数据》,这说明引起加载失效的原因不是目标网页结构改变,而是因为网页语义信息块的定位不精确。但是,本文我们仍然以它为例,仅仅用以说明怎样编辑失效的网页抽取规则,所以,修正后的信息结构仍然可能因为定位不精确而不能被成功加载。关于怎样精确定位,请参见《抽取新蛋网页数据》

注释2:本文非入门教程,所以,不会将操作步骤一步步分解开并用屏幕截图显示出来,如果需要入门知识,请参考《抽取当当网页数据》

注释3:即使信息结构无法成功被MetaStudio加载,此信息结构生成的网页抽取规则可能仍然有效,因为MetaStudio和DataScraper采用不同的定位规则。所以,不必急于用MetaStudio对其重新修改,可以直到DataScraper在运行期间显示出错日志再采取行动。

注释4:连续加载两个使用相同样本页面的信息结构会失败,观察MetaStudio底端的状态条,能够看到MetaStudio加载过程停顿了,状态条上没有显示“完成”字样。这是MetaStudio的bug,要避免,或者重启MetaStudio后再加载同一个信息结构。



1 加载信息结构


图1

如图1,有下面的步骤:

  1. 将MetaStudio工作台转换到Schema List
  2. 输入查询条件,可以包含多个通配符“*”
  3. 选中主题名是demo_JD_list_1的信息结构,点击鼠标右键,弹出一个菜单,选择加载
  4. 在加载该信息结构时,MetaStudio遇到麻烦,编号3的信息属性(用于存储抽取到的网页数据的字段)无法定位

即便如此,我们仍然点击确认按钮,将加载过程进行到底,以便修改信息结构。



图2

图2分析失败原因:

  1. 我们看到信息属性市场价格定位到的节点号是-1,表示没有定位成功
  2. 《抽取京东商城网页数据》教程中,我们本来选择商品列表中的第一个商品作为样例,但是,重新加载时错误地使用了热卖推荐中的第一个商品,而且这个商品没有市场价格信息,也就是说丧失了作为样例的代表性,导致加载信息结构失败。

下面,我们将重新编辑信息结构。



2 重新做映射

MetaStudio通过网页内容映射方式描述网页抽取规则,您可以不用关心真正的抽取规则指令,由MetaStudio自动生成,您只需要告诉MetaStudio:网页上的哪块数据需要抽取。直观友好的图形界面利于快速定义和低成本管理网页抽取规则。


2.1 清除映射关系

因为MetaStudio自动选择的样例不合适,所以,为所有信息属性定位到的网页数据都不合适,首先需要清除这些映射关系。


图3

如图3,挨个选择信息属性,然后点击鼠标右键,看到弹出菜单,进行如下步骤:

  1. 清除FreeFormat映射
  2. 清除数据映射,清除后节点号变成-1

2.2 重新映射


图4

如图4,选择正确的样例后重新做数据映射和FreeFormat映射,步骤如下:

  1. 选择正确的样例,即商品列表中的第一个商品
  2. 为每个信息属性做数据映射和FreeFormat映射,详细过程参见《网页抽取软件MetaSeeker速成手册》,前面几章都是讲解映射过程的。
  3. 为了抽取多个商品实例,采用FreeFormat映射方法,详细过程参见《抽取京东商城网页数据》;也可以用样例复制品方法抽取多实例,详细参见《抽取当当网页数据》

2.3 上载修改后的信息结构


图5

假设没有更改主题名,上载后,新信息结构覆盖老的,会有如图5的提示:

  1. 点击工具条上的schema按钮启动上载过程
  2. 弹出一个对话框,询问是否要覆盖,如果不覆盖,则终止上载过程

本案例,我们修改了主题名demo_JD_list_2,用户可以对照两个信息结构研究其不同。



3 对DataScraper的影响

上载信息结构时,MetaStudio将自动生成的网页抽取规则同时上载到了MetaSeeker服务器,假设现在有DataScraper正在运行,会有什么影响呢?

根据《批量抽取当当网页数据》,DataScraper有两种批量抽取模式:

  1. 手工启动的批量抽取
  2. 周期性自动启动的批量抽取

当DataScraper以第一种模式运行时,正在抽取的网页不会使用新规则,但是,当用户开始新一批抽取时,DataScraper会再次向服务器查询抽取规则,所以,会使用新规则。

相反,当DataScraper以第二种模式运行时,新规则永远不会被采用,只得重新运行DataScraper才行。



4 还要做什么

经过上面步骤以后,信息结构被修改了,但是,本例仅仅为了讲解修改信息结构的过程,并没有解决实际问题。实际问题是:本例的信息结构不能加载的原因是因为没有精确定位,而不是网页结构变化。请参考《抽取新蛋网页数据》彻底解决精确定位问题。