本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:
日志总数:8
评论数量:18
留言数量:0
访问次数:71218
建立时间:2009年4月22日




卓越网商品数据分级抓取 
原创空间,  电脑与网络

FullerHua 发表于 2011/1/7 10:29:44

前面我们已经讲解了当当网和京东商城的抓取案例: 当当百货价格抓取 京东商城价格抓取 要部署商品比价系统或者竞争情报分析平台,显然还需要抓取更多网站的商品价格。本文讲解卓越网站的抓取方案。 同前两篇文章不同,本文重点讲解分级抓取方法,分成以下两级: 先抓取商品类别信息网页,在那个网页上抓取每个类别的类别名和网页的URL地址 进入每个类别的网页,在此抓取所有商品列表,重点抓取商品名和价格 500)this.width=500'> 图1 实际上还可以有第三步,进行第二步的时候,能够抓取到每个商品的详细信息网页的URL地址,如图1的案例B,在第三步,进入这个详细信息页,抓取更多商品信息,例如,详细规格说明、用户评论等等。 层级还可以向另外一个方向延伸,如图1C,先在一个类别汇聚网页上抓取所有类别的URL,例如,卓越网 http://www.amazon.com.cn/gp/site-directory/ref=topnav_sad 就是这种网页。卓越网实际上将类别分成多级:大类别、小类别还有更小的类别。本文讲解案例A。 MetaSeeker可以抓取任何多级,因为 MetaSeeker跟其他网站抓取软件不同,内部有一个完整的网络爬虫,也就是说采用了搜索引擎的技术,网络爬虫可以深入抓取任何多级。而且像搜索引擎 那样,上级和下级的抓取在时间顺序上没有关联,下级可以在任何时候执行,这一点也跟很多网站抓取软件不同。这些特性赋予MetaSeeker强大的能力和 很高的性能。 《手机游戏网站抓取规划》系列文章用大篇幅文字详细说明了分级抓取的规划和执行过程,本文重点用屏幕截图直观地说明这些过程。 下面我们以卓越网作为目标网站: 第一级:在大类网页上抓取商品小类别,目的是抓取小类别的网页URL 样本网页:http://www.amazon.com.cn/gp/site-directory/ref=topnav_sad 主题名:demo_JY_mobile_category 第二级:在商品列表网页上抓取所有商品的价格和其他数据。第一级抓取的URL能够访问到一个网页,网页上罗列了所有属于某个小类别的商品,本级的抓取目标就是这个商品列表。 样本网页: 主题名:demo_JY_mobile_list 注释1:用MetaStudio定义网站抓取规则时不用考虑顺序,但是,为了写作的方便,我们先定义第一级再定义第二级。 注释2:本文不再为每一步做截图,MetaStudio的详细操作步骤参看《抓取当当网百货价格》。 1 抓取商品类别 500)this.width=500'> 图2 如图2,定义抓取商品类别的规则的步骤如下: 网页左侧的类别栏是本次抓取的目标,它对应DOM树上的DIV[@class='refinements']节点 将@class='refinements'作为FreeFormat标志映射给信息结构的顶层容器节点category,有关FreeFormat映射的详细过程参见《抓取京东商城价格》 在顶层容器节点下创建嵌套的容器节点list(参看下面的注释),并做样例复制品映射,有关样例复制品映射的详细过程参见《抓取当当百货价格》 在list容器中只有两个信息属性:page和name分别抓取网页URL和类别名,所以要进行数据映射和FreeFormat映射。 注释:本例创建了一个嵌套的容器,这不是必须的。创建容器节点category并将FreeFormat标志refinements映射给它的目的是:精确地在网页上将类别信息块定位出来,然后再在这个块内使用样例复制品规则抓取所有类别名和网址。 500)this.width=500'> 图3 图3显示整理箱中的信息属性page的各种特性,可以看到勾选了clue和url,表示抓取到的URL网址不仅仅被当成普通数据对待,而且在这个网址基础上创建一条线索,引导网络爬虫抓取下一级数据。如果设定了这两个特性,在Clue Editor工作台上自动创建了一个Info类型的线索。 2 定义下一级线索 500)this.width=500'> 图4 如图4,有如下步骤: 因为在Bucket Editor工作台上为信息属性page设定了clue和url特性,在Clue Editor工作台上会看到自动创建了一个编号为clue 0的线索,是Info类型,表示利用page字段的值创建一条线索 给下一级抓取主题起一个名字:demo_JY_list 至此,第一级的信息结构已经定义完成,参照《抓取当当网百货价格》上载信息结构和MetaStudio自动生成的网站抓取规则,DataScraper就可以随时随地对卓越网上的手机类别进行抓取了。 3 为下一级定义数据抓取规则 为了定义一个新的数据抓取规则,首先需要在MetaStudio上创建一个新的工作台(重新运行MetaStudio或者点击菜单文件-〉创建工作台), 然后在新工作台上定义数据抓取规则和线索抓取规则。为了定义下一级数据抓取规则,当然可以采用这个操作过程。还有另外一种方式:假设我们定义完第一级抓取 规则后,并没有立即定义第二级,而是运行了DataScraper,为第一级抓取数据,这样就为第二级抓取到了很多线索,此时,再用MetaStudio 定义第二级抓取规则时,MetaStudio自动从这些线索中找一个样本网页,而不用手工输入样本网页的地址。 3.1 抓取第一级 500)this.width=500'> 图5 在没有执行抓取第一级数据之前,我们看一下当前的主题状态,如图5: 转到Theme List工作台,并输入查询条件demo_JY* 看到下一级主题的状态是reserved 500)this.width=500'> 图6 用DataScraper为主题demo_JY_mobile_category抓取完数据后,再在MetaStudio上看主题demo_JY_list的状态,如图6: 状态变成torecognize,表示已经为第二级主题抓取到了很多线索,但是还没有为它定义抓取规则。 在MetaStudio的Theme List工作台上选中这个主题,点击鼠标右键,弹出菜单,选择菜单项识别,开始为下一级主题定义信息结构。首先会弹出一个告警框,提示您当前工作台不空,是否要清空,确认后发现MetaStudio自动选择了一个样本页面并加载到内嵌浏览器中,而且重新刷新了DOM树,并清空了各个工作台。 3.2 定义第二级的抓取规则 同《抓取京东商城价格》一样,我们要抓取下面的数据: 商品名:商品名称 商品网页:显示商品详细信息的网页地址,这个地址有很多用处,例如,用做导航,以便执行下一级采集(图1案例B)。 市场价格:卓越给出的市面价格 卓越价格:卓越的优惠价 500)this.width=500'> 图7 图7显示了数据映射和FreeFormat映射操作,有如下步骤: 将含有商品名的TEXT节点映射给信息属性商品名,这是数据映射 将含有商品详细信息页面网址的@href节点映射给信息属性商品网页,这也是数据映射 将@class='title'映射给信息属性商品名和商品网页,这是FreeFormat映射 将含有市面价格的TEXT节点映射给信息属性市场价格,这是数据映射 将@class='newPrice'映射给信息属性市场价格,这是FreeFormat映射 将含有卓越价格的TEXT节点映射给信息属性卓越价格,这是数据映射 将@class='price'节点映射给信息属性卓越价格,这是FreeFormat映射 最后,将@class='title'的节点映射给顶层容器节点商品,这是为了用FreeFormat方法抓取多实例,详细说明参见《抓取京东商城价格》。 点击MAP按钮查看生成的抓取规则,并点击TestThis测试抓取规则,发现只抓取了样例商品。这是因为卓越网页上有很多@id属性,每个商品都有唯一的@id,MetaStudio在缺省情况下优选@id作为FreeFormat标志,为了改变缺省行为,参看图8。 500)this.width=500'> 图8 图8有如下步骤: 在Bucket Editor工作台的整理箱tab标签上点击鼠标右键,弹出菜单 选择菜单项首选项,弹出一个窗口,DOM节点定位由偏好id改成偏好class 再次生成抓取规则,这次就能够将所有商品信息抓取下来了,因为网页上很多DOM节点拥有共同的class值,如果使用class值作为FreeFormat标志,就能抓取多实例。 上载信息结构后,再转去Theme List工作台看主题的状态,第二级主题状态也变成了ready 4 下一步做什么 两级抓取规则定义完成后,就可以用DataScraper进行数据抓取了。既可以用DataScraper的手工批量抓取功能一级一级地启动抓取过 程;也可以用周期性自动抓取功能自动启动抓取,而且可以将两级抓取放在两个不同的线程中并行抓取,甚至因为第二级数据比较多从而启动更多个线程或分布在多 台计算机上。详细说明参见《抓取当当网百货价格》。 卓越网上面商品类别很多,上文仅仅讲解手机类别的两级抓取,其它类别的数据抓取规则定义是否也这样从头做起?当然存在快捷方式: 方案1:采用图1C的方案,从一个总入口开始,先抓取大类别,然后抓取小类别,然后更小类别,直到商品详细信息网页。这是普通的网络爬虫模式,采用这种方式自动化程度高,按照本文一级级定义抓取规则即可。 方案2:采用图1A的方案,采用套用模板功能为其它类别定义抓取规则。这种方式自动化程度不高,但是,可以人工筛选商品类别。卓越网上同一个商品发布在多个不同类别中,而且这种重复现象大量存在,所以,手工选择类别可以大大降少抓取工作量。下一篇文章将讲解套用模板功能。


阅读全文(5304) | 回复(1) | 编辑 | 精华
 


回复:卓越网商品数据分级抓取
原创空间,  电脑与网络

徐涵(Han Xu)发表评论于2011/1/7 23:17:06

赞原创!


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144795937 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号