抓取淘宝宝贝的成交记录

淘宝网是最活跃的电子商务网站之一,上面的众多信息值得挖掘,向来是商业团体、科研机构的研究对象。在《怎样抓取淘宝宝贝的用户评价详情》一文提到一个研究案例,事实上,还有更加实用的研究案例:挖掘淘宝宝贝的成交记录。淘宝宝贝网页采用大量AJAX/Javascript技术,普通的搜索引擎的网络爬虫难于抓取到评价详情和成交记录,而MetaSeeker具有极强的AJAX网页内容抓取能力,可以应对这些情形。读了前文后,读者会想:既然学会了抓取淘宝宝贝的评价详情,那么抓取成交记录的方法类推即可。很遗憾,DataScraper V4.11.2及其以前版本有个缺陷,竟然无法翻页抓取成交记录。V4.11.3版本进行了改进,本文将讲解怎样利用新增特性翻页抓取成交记录。

注释1:本文讲解的信息结构(待抓取数据的数据结构,用于生成抓取规则)已经共享在服务器上,读者可以加载到MetaStudio上,以提高阅读效果。随着时间的推移,信息结构有可能失效,导致加载失败,参看《修改失效的抓取规则》进行应对。

注释2:本文非入门教程,建议MetaSeeker的新用户按照章节顺序阅读《MetaSeeker速成手册》



1 抓取目标

样本页面:http://item.tmall.com/item.htm?id=2719519005&prc=2&is_b=1

这是一个典型的AJAX网页,我们设计了两级导航抓取,第一级抓取这个网页上的普通的产品信息,然后DataScraper自动模拟用户点击,点击网页上的“成交记录”标签(tab),促使内嵌浏览器从目标网站上将成交记录下载下来,以便导航到第二级。

  • 主题名
    • demo_TB_detail3:第一级,抓取淘宝宝贝的普通信息。需要抓取以下数据:
      • title:宝贝名称
      • price:宝贝价格
    • demo_TB_history:第二级,抓取成交记录。需要抓取以下数据:
      • 买家
      • 出价
      • 数量
      • 时间
  • 翻页抓取所有成交记录


2 定义网页抓取规则

用MetaStudio定义网页抓取规则的过程与《怎样抓取淘宝宝贝的用户评价详情》完全一样,所以,本节的文字比较简略,重点说明操作过程截图。


2.1 第一级抓取规则


图1

图1显示了数据映射和FreeFormat映射后的结果。为了从网页上抓取数据,数据映射是必须的,同时,为了提供抓取的精度,可以选择FreeFormat映射。


图2

图2显示了线索映射的过程,主要步骤如下:

  1. 创建一条线索后,指定该线索的类型为记号线索(marker clue)
  2. 指定为线内线索类型。线内线索的详细解释参见《翻页抓取当当网价格》,一般用于翻页,但是AJAX网页的导航也可以用线内线索
  3. 线索映射,限定抓取线索的范围
  4. 记号映射,将网页上的文字“成交记录(”作为定位记号
  5. 修改主题名。通常,指定线内线索类型时,自动将当前主题名填入该位置,这用于翻页的情形。在本文这种情形中,需要改成第二层主题名,实现AJAX导航。

2.2 定义第二级抓取规则

定义第二级抓取规则需要一点点技巧,因为AJAX网页导航一般不采用独立URL地址,经常局部修改网页内容,通过发送XMLHttpRequest请求获得数据。那么在导航抓取时就不能利用网页URL抓取第二级。MetaSeeker通过模拟点击抓取第二级。

定义抓取规则时,定义完第一级后,点击“成交纪录”标签(请注意,不能打开反向选择开关),激发网页局部修改过程,看到了成交纪录后,点击MetaStudio的菜单“文件”-〉“刷新DOM”,则局部修改的DOM内容显示在DOM树视窗中。然后,就可以创建新的工作台,开始第二级抓取规则的定义。详细过程参见《怎样抓取淘宝宝贝的用户评价详情》。下面看看操作过程截图。


图3

图3显示如下步骤:

  1. 在关闭反向选择开关的情况下,点击“成交纪录”标签,加载成交纪录信息
  2. 数据映射
  3. 采用样例复制品映射,抓取多实例,即多条成交纪录
  4. 进行FreeFormat映射,确保在网页上精确定位。



图4

为了翻页抓取所有成交纪录,需要进行线索映射,如图4所示:

  1. 指定线内线索类型
  2. 指定记号线索类型
  3. 线索映射
  4. 记号映射

至此,两级抓取规则都定义好了,实际上与《怎样抓取淘宝宝贝的用户评价详情》没有区别。区别在于操作DataScraper的方法。



3 用定时器触发抓取网页内容

如果按照《怎样抓取淘宝宝贝的用户评价详情》介绍的方法导航抓取这两级,当导航到第二级时,DataScraper一直以为网页内容没有加载完成,以至于一直等待到超时。必须利用定时器触发抓取过程,也就是说设置一个定时器,一到时间则执行抓取。手工批量抓取和周期性自动抓取都支持定时器触发模式。

在手工批量抓取情况下,选择DataScraper的菜单“配置”-〉“定时器触发”,勾选它则打开定时器触发模式。

在周期性自动抓取情况下,需要配置指令文件crontab.xml中的timerTriggered参数,设置为true则打开,设置为false或者没有这个参数,则为关闭。