« | 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 访问次数:71067 建立时间:2009年4月22日 |

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