怎样采集淘宝宝贝的用户评论信息

MetaSeeker速成手册从《卓越网翻页抓取不了怎么办》开始连续多章讲解采集AJAX网站的技巧。AJAX网站内容使用Javascript编程语言动态显示,给普通网络爬虫造成很大障碍,而网站采集器MetaSeeker嵌入了一个完整的web浏览器,理论上说,网页上能够看到的内容都能够采集下来。但是,Javascript是一个强大的编程语言,AJAX网页内容显示技巧千变万化,在不定制的情况下,几乎不可能存在一个能够应对所有AJAX情形的网站采集器。这也是MetaSeeker快速升级的原因:将最新出现的AJAX开发模式纳入其中。2010年5月,MetaSeeker再次为提升AJAX网站采集能力进行了升级,主要目的是采集淘宝宝贝的用户评论信息,中国人民大学某研究室的科研项目期望从淘宝宝贝的普通商品信息和用户评论信息中挖掘出某些关联规则。本文将详细解释淘宝宝贝的评论信息的采集规则的定义方法。

对采集目标的描述:

  • 样本页面:http://item.tmall.com/item.htm?id=8517156144&source=dou&prc=2&cm_cat=50029375
  • 主题名
    • demo_TB_detail:采集淘宝宝贝的普通信息
    • demo_TB_comment:采集用户评论信息
  • 采集的内容
    • 采集商品信息
      • 商品名
      • 商品价格
    • 采集所有用户评论
      • 内容
      • 日期
      • 买家
      • 买家网址
    • 翻页采集所有评论信息

注释1:目标网站的网页结构可能会改变,一些重大改变将影响信息结构的可用性,如果加载本文提到的信息结构时发现某些信息属性(用于存储采集到的数据的字段)定位失败,请参照《修改失效的采集规则》调整信息属性的映射关系。

注释2:本文非入门教程,所以,不会将操作步骤一步步分解开并用屏幕截图显示出来,如果需要入门知识,请顺序阅读《MetaSeeker速成手册》。



1 分析样本页面

在淘宝宝贝网页上,用户评论显示在“评价详情”标签(Tab)下,点击这个标签时,网页使用Javascript从淘宝服务器上将评价信息下载并显示出来。下面我们做个实验。


图1

图1有如下步骤:

  1. 将样本页面加载到MetaStudio的内嵌浏览器中
  2. 等待网页加载完成,此时,MetaStudio底部的状态条上显示“完成”字样。
  3. 关闭反向选择,即复选框(checkbox)不要勾选。
  4. 点击网页上的“评价详情”标签,可以看到网页内容改变了,用户评论信息显示了出来
  5. 设置反向选择,以便快速定位DOM节点。
  6. 选择一条评论信息,用鼠标点击它
  7. 弹出一个对话框,显示“Error: Cannot find the node”,说明MetaStudio没有在DOM树上定位到对应于被点击的用户评论的DOM节点。如果定位成功,DOM树应该自动展开,并且在对话框中显示定位到的DOM节点号。

此时,选择MetaStudio的菜单“文件”-〉“刷新DOM”,再点击网页上的用户评论,成功定位到DOM节点。这说明一开始加载的网页上没有用户评论,用户评论是后来通过Javascript程序异步加载上来的。这是判断是否用AJAX显示网页内容的重要准则。



2 定义采集规则

为了采集用户评论信息,DataScraper必须模拟用户点击“评价详情”标签,所以,需要定义两个信息结构:第一个从样本页面上采集普通信息并模拟用户点击;第二个从用户评论列表中采集信息。这跟层级导航采集的原理一样,但是,普通的层级采集是导航到其它网页,而本例没有导航到其它网页,仅仅局部修改网页内容。


2.1 定义第一级采集规则


2.1.1 数据采集规则


图2

图2有如下步骤:

  1. 为所有信息属性作数据映射和FreeFormat映射,FreeFormat映射虽然不是必须的,但是可以大大提高采集规则的适应度,即使目标网站的网页结构修改了,采用FreeFormat技术可以在一定限度内确保采集规则不失效。
  2. 为整个整理箱做FreeFormat映射,用以提高定位精度,其原理说明参见《采集新蛋网商品价格》
  3. 注意:第一级一定要打开AJAX抓取规则,即设置积极模式和延长模式,这样DataScraper抓取时滚屏功能才能生效,因为,如果不滚屏,累计用户评价不会加载和显示

2.1.2 层级导航规则


图3

图3显示了很多步骤,并不是采集淘宝宝贝信息所特有的,而是我们期望通过这个案例讲解更多使用技巧。步骤如下:

  1. 转到Clue Editor工作台,并点击newClue按钮创建一条线索(用于指导网络爬虫采集其它网页)
  2. 设置成线内线索类型,但是不是为了翻页导航采集,而是为了导航到用户评论。关于线内线索和翻页采集请参见《批量采集当当网价格》
  3. 点击Marker单选钮(radio button),表示根据网页上的记号定位线索,本例的记号就是文字“评价详情
  4. 通常情况下,一旦设置成线内线索,目标主题名称一栏就填入了当前主题名,可以参看翻页采集案例,但是,点击“评价详情”后,网页内容被局部修改了,而且要采集的用户评论显然与当前主题采集的商品信息属于不同语义范畴,所以,应该另起一个主题名,即填入:demo_TB_comment
  5. 设置反向选择模式,以便快速定位DOM节点
  6. 点击“评价详情”标签。因为设置了反向选择模式,所以,内嵌浏览器并没有向淘宝服务器发起下载评论信息的请求,相反,自动定位到DOM树上的对应节点
  7. 在DOM树上找到代表整个标签条的那个节点,并作线索映射,表示在这个网页区域内定位线索
  8. 在DOM树上找到包含内容“评价详情”的那个TEXT节点,做记号映射。应该注意到:这个记号的完整内容是“评价详情(”,后面的括号是不需要的
  9. 设置记号模式,不勾选这个复选框,表示只要网页上出现记号值就表示符合规则,这叫包含模式,而不需要网页节点内容与记号完全一致,这叫相同模式,这是为了配合第8步和第10步。
  10. 编辑记号值,删除后面的括号。第8、9、10三步是可选操作,察看生成的导航采集规则(点击viewSCE按钮)可以看到差别。

2.1.3 上载采集规则

点击MetaStudio工具条的schema按钮,将信息结构和MetaStudio自动生成的采集规则上载到服务器上,以便DataScraper随时随地采集网络内容。


2.2 定义第二级采集规则


2.2.1 准备工作

首先选择MetaStudio的菜单项“文件”-〉“创建工作台”清空工作台。


图4

清空工作台后,参照图4进行如下步骤:

  1. 填写主题名demo_TB_comment
  2. 将样本页面的网址手工拷入Theme Editor工作台的页面地址输入栏
  3. 如果前面设置了反向选择模式,需要关闭这种模式
  4. 因为关闭了反向选择模式,点击网页上的“评价详情”标签将激发浏览器从淘宝服务器上下载用户评论信息并显示在网页上。一直等待评论信息显示全了再进行下面的步骤
  5. 选择菜单项“文件”-〉“刷新DOM”,刷新DOM树。此时设置反向选择模式并点击网页上的评论不会遇到图1显示的“Cannot find the node”错误。

2.2.2 数据采集规则


图5

图5显示如下步骤:

  1. 为所有信息属性做数据映射和FreeFormat映射
  2. 为了采集多条评论信息,采用样例复制品映射方法,详细说明参见《采集当当百货价格以建立比价系统》
  3. 为了能够在网页上精确定位,定义了一个嵌套的整理箱,有两层容器节点,分别是评论list,并且为顶层容器节点作FreeFormat映射,这并不是必须的,在2.1.1节已经详细说明了为什么要这么做。


图6

图6显示怎样设置AJAX采集模式,即勾选菜单项“延长模式”和“积极模式”,详细参见《卓越网翻页抓取不了怎么办》


2.2.3 分页采集规则


图7

图7显示如下步骤:

  1. Clue Editor工作台上创建一条线索
  2. 设置成线内线索类型
  3. 设置记号线索类型,网页上的“下一页”字样作为记号。
  4. 进行线索映射
  5. 进行记号映射
  6. 将记号识别模式设置成包含模式
  7. 编辑记号值,将“下一页>>”中的两个大于号删除


图8

MetaSeeker采用的FreeFormat技术能够提高采集规则的适应性,所以,即使没有显式作FreeFormat映射,MetaStudio缺省情况下计算采集规则时也会自动选择FreeFormat标志,在网页上存在很多@class和@id属性,它们都有可能被自动选用,但是,有时候自动选用的不太合适,需要手工调整,一般遵从就近原则。手工调整方法是设置节点定位首选项。图8显示设置步骤:

  1. 选择菜单“配置”-〉“首选项”。
  2. 在首选项弹出对话框中选择“线索定位”标签
  3. 选择“偏好class”,就会优选@class='show-rate-table',而不选@id='reviews',前者更靠近表示翻页区的DOM节点HTML TFOOT

注释:如果不采用就近原则,而是采用缺省设置,MetaStudio会自动选择@id='reviews',实测发现有时候翻页不成功,很有可能网页的动态修改部分的结构有变化,如果不就近选择的话,可能在节点@id='reviews'和@class='show-rate-table'之间动态插入了其它HTML DOM节点,造成定位失败。如果采用就近原则,动态插入其它DOM节点的几率大大降低。

至此,两个信息结构都定义完了,上载后可供DataScraper使用。



3 DataScraper运行方法

如果手工执行批量采集任务,在DataScraper的主题列表中只对主题名demo_TB_detail执行采集操作即可,DataScraper会自动从第一个主题导航到第二个主题。参看《批量采集当当网价格》介绍的操作方法。自动周期性批量采集方法一样,只需为第一个主题指定周期性采集指令即可。



4 信息结构加载方法

如果想修改以前定义的信息结构,例如,目标网页结构变了需要修改采集规则,需要先将其加载到MetaStudio的工作台上。第一个信息结构是普通的网页采集信息结构,加载方法没有什么不同。第二个信息结构用于采集AJAX显示的内容,需要执行“后续分析”操作。


图9

图9显示demo_TB_comment的加载过程:

  1. Schema List工作台上选中待加载的信息结构,并点击鼠标右键,弹出菜单
  2. 选择菜单项“加载”,开始加载信息结构
  3. 能够看到网页已经完全加载到内嵌浏览器上了,而且弹出一个对话框,提示用户进行后续分析
  4. 关闭反向选择模式
  5. 在网页上点击“评价详情”,激发网页从淘宝服务器上下载并显示用户评论信息
  6. 等看到评论信息已经显示了,选择菜单“文件”-〉“后续分析

注意:MetaStudio有个缺陷:如果两个信息结构使用相同的样本页面,而且第一个信息结构已经加载到工作台上了,然后加载第二个,则MetaStudio的加载过程会一直等待。本例这两个信息结构就符合这个条件,如果demo_TB_detail已经加载到工作台了,现在需要看demo_TB_comment,加载会一直处于等待状态。从内部实现原理角度进行分析,MetaStudio是在等待第二个样本页面加载到浏览器上,事实上第二个样本页面与第一个相同从而已经在浏览器上了,MetaStudio却不知道,所以,一直等下去。该bug将在以后版本修改。当前,需要避开这个bug,可以重新运行MetaStudio再加载第二个信息结构。



5 进一步阅读

下面是相关的更多阅读材料。

Comments

Suitable data schema cannot

Suitable data schema cannot be found for cluied 98939450 in 0st inthread cycle 为什么会出现这个错误??

分级抓取淘宝网用户评论 处理器名称 ValidateDelayedPage

请教一个问题
我定义了一个分级抓取淘宝用户评论的规则,分为三级:
第一级主题名:LastData 这一级抓的很快
第二级主题名:LastDet 这一级也貌似没有问题
第三级主题名:LastReview 这一级虽然可以实现抓取用户评论,但是一直会有ValidateDelayedPage这样的消息出来,每次翻评论页需要花费大量的时间,每翻一页就会Validate一次,不知如何解决提高效率
非常感谢!!

我的用户名:pinqinshen
PS:验证码难度好高,填了十几次........................

Jan. 6th 2015

没有“加载”选项,如何将定义好的采集规则加载到工作台上?

您好,我想请教一个问题,我用的浏览器版本为32.0.3,与之对应的MetaStudio版本是32.x,将设置好的采集规则加载到的工作台上时,右键没有“加载”这一项,有三个选项分别是“信息”、“浏览”、“识别”,那么如何进行加载?
试了一下“识别”,会提示“该主题已被识别”,但是无法进行后续分析,点菜单栏中的“编辑”->"信息结构"->“加载”->“按线索”,但是不知道“线索ID”是什么。
还有这个验证码难度太大了。。。

抓取天猫用户评论失败

我定义了三个级别,第一级是从商品列表提取出商品的连接;第二级则在商品的详细页面定义了“累积评价”的clue;第三级则抓取用户的评论。可是运行第一级之后页面就一直停止在顶部不动了,没有任何反应;我也试过了滚屏设置,页面就是一直滚下去,滚完了就没有反应了。我从第二级直接运行曾经又一次把一个商品的所有评论都抓取了,但是之后就不行了。求熟悉的高手指导,谢谢

每一级是各自独立的

第一级和第二级是各自独立的,抓取完第一级不可能自动进入第二级,要么手动启动第二级,要么在周期性调度文件中管理第二级的启动时间。从第二级到第三级,可以用线内线索方式,可以自动进入第三级。

如果一个线索成功抓取完一遍,则不能再次抓取,需要先激活该线索。在周期性调度文件中有一个step名字是renewClue

使用相同方法来获取新浪新闻评论出现问题

很感谢Fuller及时耐心的回复,现在我又遇到了问题。详细如下
我想抓取某条新浪新闻的评论,评论页面为:http://comment5.news.sina.com.cn/comment/skin/default.html?channel=gn&newsid=1-1-27677901,这个页面有一个按钮:”显示更多评论“,要想抓取所有评论应该模拟点击这个按钮,但是等到加载到最后一屏是这个按钮的显示为:“已是最后一页,回到首页”。到这页抓取并不停止,而是继续回到第一屏又一轮的抓取。引文新浪新闻评论的翻页不在一个范围内,怎么定义线索呢?
我的主题是:sina_mjc
帮我看看吧,一上午了都在琢磨这个问题!

要手工调整翻页规则

新浪新闻评论虽然翻到最后一页,“显示更多评论”这个按钮虽然没有显示出来,这个按钮实际还在网页上,所以DataScraper就以为还需要翻页。

在线版用户在crontab.xml文件中设置depth可以在翻页到某个特定数量后停止,但是,有些新闻可能有更多的评论,就抓不到这个数量后面的评论了。

其实到最后一页虽然这些按钮还在网页上,但是,class属性或者DOM树结构会有些修改,才能不显示“显示更多评论”而显示“已是最后一页,回到首页”,企业版用户可以手工微调翻页抓取规则,判断这些变化,就能在最后自动停止

那在线版能解决这个问题吗

我不想抓取特定数量的评论,想全部抓取! 你能帮我看看sina_mjc这个主题吗?是不是我的主题有问题呢?非常感谢您及时详细的回复。

新浪新闻评论抓取已经测试过了

测试发现,即使翻页到最后,还能点击翻页按钮,在线版只能用depth参数限制翻页数量

恩, 那depth参数是针对整个主题的吗?

如果depth是针对整个主题的,那就不合理。能使用其他的方法获取评论数据吗?

depth针对整个主题

暂时还没有其它办法获取评论数

哦,谢谢您的回复

我用depth试试吧,谢谢你的及时的回复!对了,还要问一下,有crontab.xml这方面的详细教程吗?不胜感激!!!!!!
还有一个问题:能否更改已建主题的url,如何更改成为另一个url,这两个url有相同的结构,有这样的方法吗?
能详细介绍下dupRatio这个参数吗?

抓取淘宝累计评价需要AJAX抓取选项

最近淘宝和天猫的网页又改版了,如果不滚屏,累计评价就不显示,所以,要打开DataScraper的自动滚屏功能,而该功能只对设置了AJAX抓取选项的信息结构才有效,所以,用MetaStudio定义信息结构是二级信息结构都需要设置AJAX抓取选项

淘宝宝贝累计评价抓取技巧

比如这个样本页面:http://detail.tmall.com/item.htm?spm=1003.2.1000024.N.rnWxGv&id=22234928919&scm=1003.3.03037.0&acm=03037.1003.244.203.22234928919_1

detail(第一级),可能因为DataScraper抓取这一级的速度太快,此时“累计评价”超链接相关的代码还没有就绪,那么无法进入第二级。如果出现这个问题,可以想办法放慢第一级的速度,比如,设置延长模式和积极模式(AJAX抓取模式),然后,在DataScraper上设置滚屏抓取模式,这样可以大大放慢第一级的抓取速度。由于该样本页面上的图太多,滚屏参数more pages设置成2即可

看了一下版面发觉又改版了

发现这种商业性强的网站挺麻烦的, 真的要学习一下编写习惯,另外网址基本都挺长。

天猫的评价及购买记

天猫的评价及购买记录怎么显示都是零啊

抓取天猫要打开AJAX选项

天猫上面很多内容都是用AJAX显示的,需要打开AJAX抓取选项才能抓下来

首先非常感谢Fuller!

首先非常感谢Fuller!
我想抓取天猫及淘宝的评价及交易记录

我设置了AJAX选项后,还是原先情况,即淘宝店铺显示评价数目但是点击评价Tab没反应(没有勾选反向选择)不显示用户评论,天猫显示评价数目为0且点击也没反应。

请把网址帖出来

请把网址帖出来,我们会研究一下原因

网址http://detail.tmall.com

网址http://detail.tmall.com/item.htm?spm=a1z10.1.w18247738119.2.Kp1Uh3&id=16172995307

不要选择“禁止JS”菜单

您是不是选择了MetaStudio的“禁止JS”菜单了?选择后就不会执行网页上的javascript代码了

我的是在线版的,就

我的是在线版的,就没有"禁止JS"选项啊

我的版本比较低,我

我的版本比较低,我下一个高版本的试试,谢谢啊

昨天MetaSeeker支持Firefox 20.0.1

昨天发布的MetaSeeker软件,支持Firefox最新版本20.0.1