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


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


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地址 第二级:在特定类别的商品列表网页抓取所有商品信息,也就是本章讲解的过程。 我们将在《分级抓取》教程中讲解分级抓取方法和套用模板方法。


阅读全文(5100) | 回复(0) | 编辑 | 精华
 



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



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

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