« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
暂无公告... |
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的方案,采用套用模板功能为其它类别定义抓取规则。这种方式自动化程度不高,但是,可以人工筛选商品类别。卓越网上同一个商品发布在多个不同类别中,而且这种重复现象大量存在,所以,手工选择类别可以大大降少抓取工作量。下一篇文章将讲解套用模板功能。
|
|
» 1 »
|