抓取京东商城商品价格
时间:2010-12-26 来源:geo898
《抓取当当网商品价格》一文讲解了怎样使用MetaStudio的基本功能,GooSeeker拥有多项发明专利,其中一项有关怎样提高网站抓取规则的适应性,也就是说当网站的网页结构变化了,对抓取规则的影响尽量降到最低。GooSeeker称其为FreeFormat技术。本文讲解怎样使用这个技术。
1 MetaSeeker运行
MetaSeeker工具包中的MetaStudio和DataScraper的运行方法不再赘述,如果不知道如何启动,请参看
- 《MetaSeeker安装》
- 《抓取当当网商品价格》
2 定义京东商品价格数据抓取规则
本节讲解的过程基本上与《抓取当当网商品价格》相同,但是增加了FreeFormat映射,以提高数据抓取的精度和适应度。
- 样本网页:http://www.360buy.com/products/737-794-870-0-0-0-0-0-0-0-1-1-1.html
- 主题名:demo_JD_list_1
- 抓取目标
- 在商品列表网页抓取如下商品信息
- 商品名:商品名称
- 商品网页:显示商品详细信息的网页地址,这个地址有很多用处,例如,用做导航,以便执行多级采集。
- 市场价格:京东给出的市面价格
- 京东价格:京东的优惠价。注意:我们只抓取价格图片的URL地址,需要另外的程序下载价格图片,并进行识别,例如,网络上共享的一个软件。
- 翻页抓取
- 在商品列表网页抓取如下商品信息
2.1 命名抓取主题
图1
如图1,进行如下步骤:
- 输入样本网页地址,并且回车,然后等待,观察下面的2-5步,直到他们都自动完成,再进行第6步
- 观察网页加载到内嵌浏览器
- 在DOM树视窗中看到DOM树被生成了
- 在MetaStudio底部的状态条上看到“完成”字样
- 在Theme Editor工作台上,网页地址被自动填入页面地址输入框中。
- 在工作台的主题名输入框中输入:demo_JD_list_1
- 点击Bucket Editor标签进行2.2节的步骤
2.2 定义商品数据抓取规则
下面分成多个小节讲解怎样定义商品价格数据的抓取规则,除FreeFormat映射外文字内容不多,因为与前一个教程基本一样,如果不熟悉这些名词和术语,可以先阅读前一个教程。
2.2.1 创建整理箱
图2
如图2,进行如下步骤:
- 点击newBckt按钮,创建整理箱。
- 在弹出窗口中输入整理箱名字
2.2.2 丰富整理箱的内容
图3
如图3,给整理箱创建很多字段,我们称其为信息属性,有如下步骤:
- 在整理箱编辑区选中刚才创建的整理箱demo_JD_list_1
- 在整理箱编辑区点击鼠标右键,弹出整理箱编辑菜单
- 选中菜单项包容,表示在整理箱内部创建一个字段。
图4
执行到图3的最后一步时,会弹出一个对话框,如图4,您需要编辑信息属性的特性,有如下步骤:
- 给信息属性起名:商品名
- 为这个信息属性设定key特性
小技巧:网站抓取器DataScraper运行模式有多种组合,最常用的是区分成普通模式和非普通模式(在GooSeeker网站上搜索“AJAX”可以看到讲解其它模式的文章),后者可以大大加快京东价格信息的抓取速度,为了使用后者,一定要给至少一个信息属性设定key特性,详细参见《编辑整理箱结构》。如果您使用的是企业版DataScraper,还能够进一步加快抓取速度,尤其对那些含有大量图片和视频的网页最有效,参看《怎样提高采集京东商城商品价格的速度》。
重复进行上述步骤,创建所有信息属性,弹出菜单中有如下菜单项:
- 包容
- 其前
- 其后
分别表示新建立的信息属性与被选中的信息属性的相对关系。如果为一个信息属性创建包容的信息属性,就产生了一个嵌套结构,这样可以抓取更复杂的数据结构,而不局限于二维表格,这是MetaSeeker相对于其它网站抓取软件的技术优势。
2.2.3 指定将哪些数据抓取到整理箱中
为了能够顺序抓取所有商品而不遗漏,需要将第一个商品作为样例,下面的映射操作都是在这个商品上进行的。所谓映射,就是告诉MetaStudio将网页上的什么数据抓取到整理箱的什么信息属性中,MetaStudio据此自动计算出数据抓取规则。
图5
如图5,有如下步骤:
- 打开反向选择开关,打开后只要在内嵌浏览器上点击看到的内容,就能自动在DOM树上找到对应节点
- 点击第一个商品的描述信息
- 看到一个弹出框,显示定位到的DOM节点的顺序号
- DOM树被自动展开,而且被选中的节点的背景是蓝色或者灰色(当窗口焦点不在DOM树上时)
注意:DOM树展开后可能没有自动滚动到被选中的那个节点,需要根据节点号手工拖动DOM树视窗上的卷滚条,找到那个节点。
图6
如图6,如下步骤:
- 点击第一个商品的商品名
- MetaStudio在DOM树视窗上自动定位到一个A节点
- 展开A节点,找到text节点并选中
- 可以看到该text节点的内容与内嵌浏览器上显示的内容一致,说明选择对了
- 在DOM树视窗上点击鼠标右键,弹出菜单
- 选中菜单项“商品名”,完成text节点到信息属性的映射
图7
图7显示执行完图6的步骤后信息属性映射结果:将节点号6257的text节点映射给“商品名”。还可以看到怎样将@href节点映射给“商品网页”,用以抓取URL地址。
图8
如图8,验证抓取规则是否正确,有如下步骤:
- 点击MAP按钮,让MetaStudio自动生成抓取规则,即MAP文件
- 在MetaStudio下部的MAP文件窗口可以看到生成的抓取规则,实际上是一个XSLT程序。
- 点击TestThis按钮,验证本整理箱的抓取规则的有效性。相反,如果点击TestAll,而且在工作台上创建了多个整理箱,则验证所有整理箱的抓取规则。
- 抓取结果显示在输出信息窗口中。
同《抓取当当网价格数据》教 程不同,到这一步只抓取了一个商品实例,而没有将商品列表完全抓取下来,必须要手工指定多实例抓取规则。可以采取两种方案:1,用样例复制品;2,用 FreeFormat。《抓取当当网价格数据》教程使用了样例复制品,抓取京东商品同样可以使用样例复制品,但是,为了说明FreeFormat的用法, 本教程使用FreeFormat抓取多实例。
2.3 FreeFormat映射
FreeFormat技术主要为了提高抓取网页的精度和适应度。例如,用SliceProfile部署企业竞争情报分析系统时,一定要很精确地抓取需要的数据,例如,抓取帖子评论数、发布时间等等,抓取不准确会干扰分析结果。提高了适应度可以延长抓取规则的寿命,因为受到目标网页结构变化的影响变小了,维护抓取规则的频度和工作量也随之减少。
2.3.1 信息属性的FreeFormat映射
图9
京东商城的网页上有很合适的FreeFormat标志,如图9所示,进行如下步骤:
- 第一个商品样例的DOM块中有个DIV节点,它的@class 值 p-name 作为FreeFormat标志
- 在DOM树视窗中点击鼠标右键,弹出菜单
- 执行FreeFormat映射,将p-name映射给信息属性商品名
图10
图10显示所有的信息属性都进行了FreeFormat映射,需要说明的是:
- 没有必要为每个信息属性都做FreeFormat映射,而是有合适的FreeFormat标志才使用
- FreeFormat标志一定要位于商品样例DOM块内部,而不应该将其它商品DOM块内的标志映射给样例商品
- 同一个FreeFormat标志可以映射给多个信息属性,例如,为商品名和商品网页抓取的数据都位于DOM节点DIV[@class='p-name']下,而且不存在其它的能够区别两者的不同的FreeFormat标志,则共享同一个FreeFormat标志
经过FreeFormat映射后,生成的抓取规则只有稍许改变,而且点击TestThis按钮看到的抓取结果没有改变:只抓取了样本商品。
2.3.2 多实例的FreeFormat映射
图11
观察DOM树,每个商品都放在HTML LI块中,相互之间结构相同,内部具有相同的FreeFormat标志,如图11,还是使用第一个样例商品,将代表商品名的DIV节点的@class值p-name作为FreeFormat标志,映射给整理箱中的容器节点(最顶层节点)“商品”,再看抓取规则,已经改变了,点击TestThis按钮,看到将所有商品抓取了下来。
为什么能用FreeFormat标志抓取多实例?因为HTML网页上所有商品都有这个@class属性。所以,有下面的结论:
- 只能用@class抓取多实例,而不能用@id,因为@id一般是唯一的
- @class可以选择商品信息DOM块中的某一个@class,而且所有商品都有这个@class
- 并不是商品信息块中的任何一个@class都行,映射后需要按TestThis测试一下。如图11,p-img就不行
小技巧:定义多实例抓取规则时,通常FreeFormat映射优选,而样例复制品映射次选。
3 定义翻页抓取规则
京东商城上的商品很多,分成多个网页,翻页抓取可以从头到尾将所有商品价格抓取下来。为了达到这个目的,我们创建了一个marker类型的线索,而且该线索的类型是线内线索。关于这些概念的详细说明参见《翻页抓取当当网价格》。下面用图例说明怎样定义翻页抓取规则。
3.1 创建线索
图12
如图12,采用以下步骤创建翻页抓取线索:
- 转到Clue Editor工作台
- 点击newClue按钮,创建一条线索,线索自动编号为clue 0
- 设定该线索的类型:记号线索。在内嵌浏览器的网页上,可以看到“下一页”超链接,这就是记号。
- 指定为线内线索,用于翻页的线索一般都是线内线索,详细说明参见《翻页抓取当当网价格》
- 由于指定为线内线索,目标主题名和当前主题名相同,自动填入该输入框。
3.2 线索映射
图13
图13显示如下步骤:
- 打开反向选择,以便快速定位DOM节点
- 在内嵌浏览器上点击翻页区
- MetaStudio自动定位到翻页区的DOM节点。注意:并不一定自动定位到包含整个翻页区的那个DOM节点,很有可能定位到内部某个节点,需要人工向上层找到它。
- 进行线索映射,将代表翻页区的DOM节点映射给线索clue 0
- 可以看到映射结果。
图14
以“下一页”作为记号定义翻页抓取规则,如图14,有以下步骤:
- 在DOM树上选中作为记号的节点,即网页上“下一页”对应的text节点
- 在DOM树视窗上点击鼠标右键,选中弹出菜单项记号映射
- 能够看到作为记号的节点号和节点值分别填入到工作台上
- 点击viewSCE按钮,查看MetaStudio自动生成的线索抓取规则
至此,所有操作都已经做完,接下来需要将定义好的信息结构及其规则上载到服务器,以便随时随地使用它抓取京东商城的商品价格。
4 保存信息结构
图15
图15显示怎样保存信息结构及其抓取规则,有如下步骤:
- 点击工具条上的schema按钮,启动上载过程
- 在MetaStudio的下部的工作流文件窗口能够看到生成的工作流指令文件。
5 执行抓取操作
上面只是讲解定义抓取规则过程,大批量和自动化抓取操作由DataScraper执行,《翻页抓取当当网价格数据》一文有详细讲述,不再赘述。
6 下一步做什么
京东商城上的商品很多,被分成很多商品类,上述章节只讲述了一个商品类中的价格数据抓取,如果要将所有类别抓取下来,需要分成两级进行抓取:
- 第一级:抓取各类别的商品列表网页的URL地址
- 第二级:在特定类别的商品列表网页抓取所有商品信息,也就是本章讲解的过程。
我们将在《分级抓取》教程中讲解分级抓取方法和套用模板方法。