为什么分页抓取当当网商品超时

MetaSeeker速成手册的前面几章都是关于当当网页抓取的。信息结构(对网页内容结构进行描述,用来生成网页抓取规则)demo_DD_list_1定义得比较完整,既从网页上抓取商品价格和其它信息外,还自动分页抓取。参照《分页抓取当当网价格》讲解的步骤,操作DataScraper将所有信息一页一页抓取下来。但是,细心的读者可能会发现,当翻到最后一页的时候,DataScraper就停顿了,一直等到DataScraper窗口下部的日志中提示超时。究其原因,demo_DD_list_1demo_DD_list_4都采用了记号线索定位用于翻页的超链接,网页底部的“下一页”就是记号。在最后一页上,“下一页”超链接是一段javascript代码,如下:

   javascript:void(0);

所以,点击最后一页的“下一页”按钮,什么反应也没有,DataScraper自动模拟用户点击这个按钮后还以为网络延迟造成加载缓慢,所以一直等到超时。

上述问题可以不用改正,因为所有网页数据都分页抓取下来了,只是因为等待造成总体抓取速度变慢而已。本文讲解另外一种用于分页抓取的线索类型——相对线索



使用相对线索定义分页抓取规则

我们以demo_DD_list_4为原型,将其加载到MetaStudio的工作台上后,改名为demo_DD_list_5Bucket Editor工作台上的映射关系保持不变,只在Clue Editor工作台上修改线索抓取规则。


图1

图1显示如下步骤:

  1. 转到MetaStudio的Clue Editor工作台
  2. 在DOM树上,节点DIV[@class='pagepanel']代表网页上的分页区,将这个节点映射给线索clue 0,而且这个线索设置成线内线索,详细参见《分页抓取当当网价格》
  3. 在MetaStudio下部的内嵌浏览器中可以看到网页的分页区,选择“1”“2”两个按钮作为相对线索的当前节点下一节点
  4. 在DOM的选中的当前节点上点击鼠标右键,弹出菜单
  5. 选择菜单项相对映射-〉当前节点,该节点的节点号将填写在Clue Editor工作台的当前节点位置。


图2

同样做下一节点映射,最后结果如图2所示。至此,信息结构定义完成,上载到MetaSeeker服务器上,以便DataScraper随时随地使用由此信息结构生成的分页抓取规则。

DataScraper使用这个规则分页抓取到最后一页,会发现当前节点后面没有下一节点,即定位不到翻页按钮,就会停止分页抓取过程。