抓取卓越亚马逊amazon评论信息

让我们先看两个样本页面

  • 卓越亚马逊:http://www.amazon.cn/%E8%BD%A9%E8%BE%95%E5%89%91%E5%A4%96%E4%BC%A0%E4%BA%91%E4%B9%8B%E9%81%A5%E6%A0%87%E5%87%86%E7%89%88/dp/customer-reviews/B004ELBYA6/ref=dp_top_cm_cr_acr_txt?ie=UTF8&showViewpoints=1&customer-reviews.start=1#customerReviews
  • amazon:http://www.amazon.co.uk/product-reviews/B000B5KMSE/ref=pd_ts_vg_h__1_cm_cr_acr_txt?ie=UTF8&showViewpoints=1

我们准备从这两个页面上将所有评论信息抓取下来。评论文字可能很多,放在多个HTML <P>块中或者多个#text节点内,所以要给信息属性(用于存储抓取结果的字段)设置block特性,从网页上抓取整块内容的方法已经在《抓取网页文字内容片断》《抓取HTML网页片断》两篇文章中详细讲解过了,本文通过对比两个案例,说明抓取内容片断的另外一种方法:当网页上面没有可用的FreeFormat标志时,使用数据映射生成内容片断抓取规则。

注意1:本文不是入门教程,如果从来没有操作过MetaSeeker,请按章节顺序阅读《MetaSeeker速成手册》

注意2:读者可以使用MetaStudio加载本文提到的信息结构(用于自动生成抓取规则)以便更好地理解本文讲解的过程,但是,经过一定时间后,目标网页结构可能会变化,将导致信息结构加载不成功,如果遇到这种情况,可以参照《修改失效的抓取规则》修改信息结构。



1 抓取卓越亚马逊的评论

抓取目标:

  • 样本页面:http://www.amazon.cn/%E8%BD%A9%E8%BE%95%E5%89%91%E5%A4%96%E4%BC%A0%E4%BA%91%E4%B9%8B%E9%81%A5%E6%A0%87%E5%87%86%E7%89%88/dp/customer-reviews/B004ELBYA6/ref=dp_top_cm_cr_acr_txt?ie=UTF8&showViewpoints=1&customer-reviews.start=1#customerReviews
  • 主题demo_amazon_comments
  • 目的:从这个页面上将所有评论文字逐条抓取下来

抓取卓越亚马逊用户评论
图1

图1显示为了逐条抓取评论文字应该进行的主要步骤:

  1. 整理箱(存储抓取结果的数据结构)编辑区双击信息属性“内容”,弹出特性配置窗口
  2. 勾选block复选框,同时选择特定过滤器,并选择文本内容复选框,表示从HTML网页片断中将所有文字抓取下来。
  3. 为各信息属性作数据映射和FreeFormat映射,《MetaSeeker速成手册》前面章节已经详细讲解过操作过程,此文不再赘述。注意,不需要为“内容”作数据映射,因为设置了block特性,仅需要执行FreeFormat映射即可。
  4. 为了逐条抓取所有评论,即抓取多实例,需要为整理箱的顶层节点comments作FreeFormat映射。当然,也可以采用样例复制品映射方法抓取多实例,详细参见《抓取当当网站信息》

完成后可以将信息结构上载到MetaSeeker服务器,以便DataScraper随时随地使用抓取规则。



2 抓取amazon的评论

抓取目标:

  • 样本页面:http://www.amazon.co.uk/product-reviews/B000B5KMSE/ref=pd_ts_vg_h__1_cm_cr_acr_txt?ie=UTF8&showViewpoints=1
  • 主题:demo_amazon_comments_en
  • 目的:从这个页面上将所有评论文字逐条抓取下来

抓取amazon用户评论
图2

除了在视觉方面amazon与卓越亚马逊不同以外,用MetaStudio分析两者的DOM也会发现很大不同,在amazon网页上,商品评价部分的HTML几乎没有使用@class或者@id属性,这样就没有可用的FreeFormat标志用于精确定位抓取内容。只能将DOM中的包含被抓取内容的#text节点映射给各个信息属性,但是,用户评论分散在多个#text节点中,那么需要找到所有这些#text节点的父节点,将它映射给信息属性“内容”。图2显示如下步骤:

  1. 在整理箱编辑区双击信息属性“内容”,弹出特性编辑对话框
  2. 同上一节,设置block特性
  3. 除了信息属性“内容”以外,为其它信息属性做数据映射,将包含被抓取内容的#text节点分别映射给“标题”和“日期
  4. 选择节点号是1803的DIV节点,因为它包含所有评论文字,将其映射给信息属性“内容”。与上一节不同,这里做的是数据映射

另外,由于没有FreeFormat标志,为了抓取多实例,只有采用样例复制品映射方式。



3 总结

以前案例讲解的数据映射都是将单一的#text节点或者@href等HTML属性节点映射给某个信息属性,本文的案例不同,如果信息属性设置了block特性,就能够将其它类型的DOM节点(主要是HTML标签对应的DOM节点)映射给信息属性,可以将这个节点下的所有文字或者整个HTML片断抓取下来。

Comments

评论内容涉及到换行

评论内容涉及到换行的时候,代码中是采用br换行符,按照文中说的规则抓取到评论就没有换行了。怎样才能完整的抓下来这部分文字?

设置block特性

为这个信息属性设置block特性,而且选择"特定过滤器“和”所有节点“,就能将HTML片段抓下来

能把整个片段抓下来

能把整个片段抓下来,但是里面段落之间的换行符被自动删除了,有办法保留换行符吗?

换行符就是br吧?

换行符就是br吧?还有别的?

以html格式抓整块内容

以html格式抓整块内容的话,放到excel中也会识别回车,然后把回车下一段放到下一个表格中。怎样才能将整块内容所有段落放在一起存储

抓取整段的处理方式要改一下

EXCEL会解释所有html和xml标签,每个标签都放一个字段,所以不能直接用EXCEL解释,最好写一个程序处理这样的抓取结果。我们有专门的软件处理各种结果文件情况

block以文本形式抓取是怎么判断回车的

我用文本形式抓取整块内容,放到excel中,只有在不同节点之间加入了回车符,同一个节点内的BR没解释。可以通过更改什么地方来识别段落之间的BR标签吗? 例如设置抓取时遇到BR标签就加入一个回车符

抓取期间不能控制

我建议用block方式抓取html片段,然后用另外一个程序先做一次BR相关的转换,再导入EXCEL

明白了

也只有这样了,先对br进行转换,然后存储excel再转回来。我再看看excel对标签解释的规则吧,谢谢fuller !