麦迪逊邦官网:卓越网商品数据分级抓取 | GooSeeker
来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 09:28:42
卓越网商品数据分级抓取
Sun, 12/26/2010 - 11:24 — Fuller前面我们已经讲解了当当网和京东商城的抓取案例:
- 当当百货价格抓取
- 京东商城价格抓取
要部署商品比价系统或者竞争情报分析平台,显然还需要抓取更多网站的商品价格。本文讲解卓越网站的抓取方案。
同前两篇文章不同,本文重点讲解分级抓取方法,分成以下两级:
- 先抓取商品类别信息网页,在那个网页上抓取每个类别的类别名和网页的URL地址
- 进入每个类别的网页,在此抓取所有商品列表,重点抓取商品名和价格
图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 抓取商品类别
图2
如图2,定义抓取商品类别的规则的步骤如下:
- 网页左侧的类别栏是本次抓取的目标,它对应DOM树上的DIV[@class='refinements']节点
- 将@class='refinements'作为FreeFormat标志映射给信息结构的顶层容器节点category,有关FreeFormat映射的详细过程参见《抓取京东商城价格》
- 在顶层容器节点下创建嵌套的容器节点list(参看下面的注释),并做样例复制品映射,有关样例复制品映射的详细过程参见《抓取当当百货价格》
- 在list容器中只有两个信息属性:page和name分别抓取网页URL和类别名,所以要进行数据映射和FreeFormat映射。
注释:本例创建了一个嵌套的容器,这不是必须的。创建容器节点category并将FreeFormat标志refinements映射给它的目的是:精确地在网页上将类别信息块定位出来,然后再在这个块内使用样例复制品规则抓取所有类别名和网址。
图3
图3显示整理箱中的信息属性page的各种特性,可以看到勾选了clue和url,表示抓取到的URL网址不仅仅被当成普通数据对待,而且在这个网址基础上创建一条线索,引导网络爬虫抓取下一级数据。如果设定了这两个特性,在Clue Editor工作台上自动创建了一个Info类型的线索。
2 定义下一级线索
图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 抓取第一级
图5
在没有执行抓取第一级数据之前,我们看一下当前的主题状态,如图5:
- 转到Theme List工作台,并输入查询条件demo_JY*
- 看到下一级主题的状态是reserved
图6
用DataScraper为主题demo_JY_mobile_category抓取完数据后,再在MetaStudio上看主题demo_JY_list的状态,如图6:
- 状态变成torecognize,表示已经为第二级主题抓取到了很多线索,但是还没有为它定义抓取规则。
- 在MetaStudio的Theme List工作台上选中这个主题,点击鼠标右键,弹出菜单,选择菜单项识别,开始为下一级主题定义信息结构。首先会弹出一个告警框,提示您当前工作台不空,是否要清空,确认后发现MetaStudio自动选择了一个样本页面并加载到内嵌浏览器中,而且重新刷新了DOM树,并清空了各个工作台。
3.2 定义第二级的抓取规则
同《抓取京东商城价格》一样,我们要抓取下面的数据:
- 商品名:商品名称
- 商品网页:显示商品详细信息的网页地址,这个地址有很多用处,例如,用做导航,以便执行下一级采集(图1案例B)。
- 市场价格:卓越给出的市面价格
- 卓越价格:卓越的优惠价
图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。
图8
图8有如下步骤:
- 在Bucket Editor工作台的整理箱tab标签上点击鼠标右键,弹出菜单
- 选择菜单项首选项,弹出一个窗口,DOM节点定位由偏好id改成偏好class
再次生成抓取规则,这次就能够将所有商品信息抓取下来了,因为网页上很多DOM节点拥有共同的class值,如果使用class值作为FreeFormat标志,就能抓取多实例。
上载信息结构后,再转去Theme List工作台看主题的状态,第二级主题状态也变成了ready
4 下一步做什么
两级抓取规则定义完成后,就可以用DataScraper进行数据抓取了。既可以用DataScraper的手工批量抓取功能一级一级地启动抓取过程;也可以用周期性自动抓取功能自动启动抓取,而且可以将两级抓取放在两个不同的线程中并行抓取,甚至因为第二级数据比较多从而启动更多个线程或分布在多台计算机上。用户对两级抓取可能一开始理解的不正确,请注意:DataScraper并不能自动从第一级导航到第二级,而是像搜索引擎的网络爬虫一样同等对待这两级,所以这两个可以并行在两个线程中分别抓取。请注意阅读本文后面的讨论。详细说明参见《抓取当当网百货价格》。
卓越网上面商品类别很多,上文仅仅讲解手机类别的两级抓取,其它类别的数据抓取规则定义是否也这样从头做起?当然存在快捷方式:
- 方案1:采用图1C的方案,从一个总入口开始,先抓取大类别,然后抓取小类别,然后更小类别,直到商品详细信息网页。这是普通的网络爬虫模式,采用这种方式自动化程度高,按照本文一级级定义抓取规则即可。
- 方案2:采用图1A的方案,采用套用模板功能为其它类别定义抓取规则。这种方式自动化程度不高,但是,可以人工筛选商品类别。卓越网上同一个商品发布在多个不同类别中,而且这种重复现象大量存在,所以,手工选择类别可以大大降少抓取工作量。下一篇文章将讲解套用模板功能。
- Login or register to post comments
Comments
Thu, 10/06/2011 - 13:40 — yangyangyang关于抓取商品详情后,xml文件合并的问题
我在第一级主题(yesky_test)中抓取了列表和指向产品详情的url之后按照上文介绍的方法 添加url线索 定义了另一个主题(yeskey_detail),用于抓取商品具体详情。
商品列表采取分页抓取,每页20个商品,一共10页,然后用DataScraper 抓取yeskey_detail商品详情 发现生成的的xml文件 200个,每个商品详情占用一个xml,想把每个商品详情都存放在一个xml文件里; 怎么解决xml的数据合并问题,是不是我抓取方示不对?
- Login or register to post comments
抓取结果文件合并方法
DataScraper抓取网页时,每个网页生成一个XML文件,如果需要合并,则需要自己编写程序。如果是比较复杂的而且数据量很大的项目,可以购买配套的数据入库和清洗软件,这个软件可以与DataScraper配套,自动将抓取结果存入数据库,而且在存入过程中,根据规则进行数据清洗和转换,最后还可以导出成各种格式的文件。
- Login or register to post comments
可以更改第二步默认的样本页么?
我进行完第一步。为第二步抓取建立了许多线索。可是我识别后添加的默认样本页面里的内容是不完整的。无法让我完成映射。我想换一个内容完整的页面来作样本页面。可是我直接换URL 再映射就提示我位置已经改变了。 请问我如何才能更改默认的样本页。或者还有什么其他的解决方法?
- Login or register to post comments
换了样本页面后需要分析页面
MetaStudio的菜单"文件"->"分析页面",然后再映射就不会有问题了
- Login or register to post comments
信息属性list无法进行映射
在学习这个教程中,在第一步“抓取商品类别”的过程中,我设置了一个Freeformat“category”,然后照着指示,创建“list”包容在“category”中,当我希望将list和对应的节点的映射建立起来,系统却提示“Info: No FreeFormat available”,请问这是哪里出错了呢?
- Login or register to post comments
没有重现这个问题
我照着你的描述重做了一遍,没有遇到这个问题,能否将步骤说得更清楚一些,比如,第一步做什么;第二步做什么;到哪一步出现上述问题。这样我好定位
- Login or register to post comments
请问如何使用DataScraper抓取第二级网页?具体的操作方法?
我在第一级主题(yesky_test)中抓取了列表和指向产品详情的url;
之后按照上文介绍的方法 添加url线索 定义了另一个主题(yeskey_detail),用于抓取详情。
规则定义好了,请问如何使用DataScraper来启动抓取呢?如何在抓取时把这2个主题联系起来?我提取yesky_test这个,仍然只是有产品列表的数据。
是否需要配置什么文件?
谢谢
- Login or register to post comments
两层主题分别抓取
无论定义多少级,每个主题抓取时是互不相关的,但是抓取时最好先第一级,再第二级,不然的话,先抓第二级可能没有线索可用。具体操作方法参看《DataScraper批量抓取方法》。如果像本教材所说的要建立一个比价系统,应该采用教材中介绍的周期性自动化抓取方法,将抓取调度指令放在crontab.xml中。例如:
true 5 3600 false demo_JY_mobile_category demo_JY_mobile_category true 100 -1 -1 false 0 demo_JY_mobile_list true 100 -1 -1 false 0
- Login or register to post comments
fuller,你好:批量抓取
fuller,你好:
批量抓取中使用的marker类型线索,教材中说明的很清楚,这个很明白。我的问题是:对于生成的info线索(指定了其新页面的抓取规则),这2个主题是如何联系起来呢?
比如:主题a是产品列表页的抓取主题,在其中定义了marker线索(用来翻页抓取),又定义了info线索(用来链接到具体的产品页,用于抓取具体的产品信息)。
主题b是定义的具体产品页的抓取规则。
那么具体操作如何做呢?使用DataScraper的批量抓取方法,只是抓取的列表页,没有关于产品详情页
- Login or register to post comments
抓取结果关联方法
将第一层和第二层的抓取结果文件打开看看就会发现:第一层文件的内容有产品详情页的网址,第二层文件的头部也有详情页的网址。两个匹配在一起就可以了。
- Login or register to post comments
根据详情页的网址进行关联
上面我给的crontab.xml例子就是抓两层的,两个主题在同一个线程(thread)中按顺序抓取,放在两个step中。
你定义的用于翻页的marker类线索因为指定为线内线索类型,只有这种类型会一口气导航抓取到底。其它非线内线索类型(例如本例的info类型)都需要另行安排DataScraper进行抓取。抓取第一层的时候只是将第二层的线索保存了下来,不会自动导航到第二层。上面给的crontab.xml是将两层放在同一个线程中顺序抓取,也可以放在不同线程中并行抓取。如果采用手工方法,则在DataScraper主题列表中先找到第一层主题,执行抓取,再找到第二层主题,进行抓取,抓取前应该先查询一下有多少可用线索,然后输入一个合适的数字。
- Login or register to post comments
关于第二层翻页抓取的问题
想咨询一下,我通过线索进入到第二层抓取的时候,由于第二层又是一个分页抓取的,我在第二层规则中按翻页抓取的规则进行定义,但就是无法抓取到第二层第二页以后的内容,不知该如何抓取?
我在第二层翻页规则中,采取的像当当网的方式,把翻页区作为线索,把“下一页”作为标记节点。
- Login or register to post comments
要看具体的信息结构
主题名是什么?我们可以一起分析一下
- Login or register to post comments
我也遇到了同样的问题
在二级抓取过程中设置了类似当当的线索,但还是不能翻页。
一级主题:demo_JY_category2
二级主题:demo_JY_list2
- Login or register to post comments
卓越网用了一些AJAX技术
参照demo_JY_list_1试试,看本手册关于AJAX抓取的章节
- Login or register to post comments
谢谢
问题解决了
- Login or register to post comments