抓取腾讯应用宝用户评论

我对http://android.app.qq.com/android/appdetail.jsp?appid=35511&icfa=15144196000112001000&lmid=2031进行爬取,分别设置了相对线索和marker线索进行翻页(主题为:百度地图评论 ),在MAP窗口的TestThis进行检测,输出信息中还能抓取到当前页面的用户评论,但是使用DataScraper进行抓取生成的XML文件却无法抓取到任何评论内容,请问为什么?

要设置key特性

在整理箱中,为“文本”这个信息属性设置key特性。

另外,可以把DataScraper的滚屏抓取打开。因为这个网页的内容是js动态加载的,有些网页要求滚屏到那里才显示内容,即使不是这样,滚屏也会给数据抓取提供更宽裕的时间,防止漏抓

抓取不完全

首先谢谢Fuller的及时回复。设置后可以进行翻页抓取了,但是4000+的评论只抓了两百多条就停了,而且抓取过的页面里似乎有挺多漏抓的,应该如何解决?

我遇到了相似的问题。翻页抓取亚马逊网站上客户评论,也抓取不完全。

您好!我在抓取时也遇到了相似的问题。翻页抓取亚马逊网站上客户评论,抓取不完全就停止。报错信息为“Suitable data schema cannot be found for clueid 63809020 in 1st inthread cycle.”我留意了下,好像因为有些评论的结构不同,有的由“多少人认为此评论有用”开头,有的直接标题评论。请问这种情况怎么处理?谢谢哈~

提高抓取规则的适应性

可以实验多种方法:
1,可以修改信息结构和映射关系,想办法适应两种情况
2,一些信息属性不要设置key特性,只为最关键的信息属性设置key特性
3,在同一个主题下定义两个信息结构,第二个专门用于适用翻页后的情况,参看《同网站不同网页结构怎样采集》

又遇新问题

您好!上次您解答后我提取出所有评论,可在后来的实验中发现,后面结构发生变化的页面上评论信息属性没提取完全,只提取出“评论内容”,“评论者”和“日期”等都没提取出,我创建的主题名是“Amazon_reviews_new2”,能麻烦您帮忙看看吗?多谢!

参看我的主题

我的主题名都是加了后缀_fuller。

亚马逊评论提取的难度在于
1)没有可用的FreeFormat标志,只有一个reviewText
2)评论相关的信息分别放在一个DIV中,有些评论会缺少一些DIV,比如,有用性投票。少了一个DIV以后,排序就变了。

当缺少一个DIV,排序就变了,信息结构就不合适了。最好的解决方案是为每个信息属性定义自定义XPath,可以手工精细调整定位规则,这样比较花时间。

第二个方案是把每个DIV的内容都提取出来,然后,再用另一个程序分拣出各个字段,缺点是要编写后期处理程序

本例采用第三个方案,是调整现有的信息属性的顺序,把“内容”调到最前面,整个信息结构采用的FreeFormat映射可以与第一个信息属性的一样。同时定义了两个同主题名的信息结构。这样在为“内容”以外的信息属性生成定位规则的时候能够参照第一个FreeFormat,能够提高适应型。

这个方案并不是完美的。当选择第几个信息结构的时候,DataScraper用评论列表中的第一条评论进行验证,如果选择了辅名为default的,那么如果这个网页上有符合second的评论,就漏掉了,反之亦然

无果后的再次请教

您好!非常感谢您这么细致的解答,我按照您说的步骤修改了,可还是没有看到预期的效果,能否与您邮件或qq详细沟通交流?我想截几张图给您看看,我的qq号是786630261。谢谢~

最好用自定义XPath

抓取亚马逊的评论信息的难度在于:一条评论中含有的信息条目不一样。每段都用一个div存储,但是div的数量不一样。好在div的顺序保持一致,那么就有办法定义一个适应所有情况的信息结构。

自动化生成的采集规则采用了绝对定位方法,比如,定位有用性投票的表达式是preceding-sibling::div[position()=3]/text(),里面的position()=3就会影响适应性。如果采用自定义xpath表达式,就能通过思考把这些绝对定位的参数去掉,变成这样preceding-sibling::div/text()[contains(.,'人认为此评论有用')],也就是说用网页上的字符串'人认为此评论有用'作为相对定位标志,只要遇到这个标志的就抓取。

其它几个字段也做类似处理。

“自定义XPath”的实用方法有很多文章介绍,在本网站上搜索这个关键词就能看到。基本方法是:
1,首先自动生成抓取规则
2,在界面下部的“MAP文件”标签窗口中看到生成的抓取规则
3,针对每个字段,修改他们的xpath表达式,比如“有用性投票”的抓取规则是xsl:value-of select="preceding-sibling::div[position()=3]/text()",XPath表达式是preceding-sibling::div[position()=3]/text(),像上面说的,改成preceding-sibling::div/text()[contains(.,'人认为此评论有用')]
4,不是在“MAP文件”标签窗口中直接改,而是双击“有用性投票”这个信息属性,在弹出的窗口中,为其选择isBlock,就能看到可以选择XPath过滤器,然后选择“文本内容”,在“内容提取表达式”中输入修改后的XPath,如果这个表达式兼作定位,那么就选择“兼作定位”

我定义的主题名是Amazon_reviews_new2_fuller,因为您没有修改我的信息结构的权限,要想用我的信息结构做验证,需要修改主题名,两处需要修改:Theme Editor和Clue Editor中的主题名都要修改。

分级提取评论者排名

fuller,您好!

根据您的建议和指导,已经成功提取出同一页面上的评论属性信息,现尝试提取每位评论者的排名,需点击评论者标识后跳转到另一页面。我参照网站上关于分层提取”的相关教程,定义了主题名分别为“test_yangviv”和"test_rank_yangviv"的规则。出现以下几个问题:

1.我在原有规则基础上,将评论者下“包容”了两个属性——“标识”和“链接”。我没能理解您为评论者自定义xpath的语法preceding-sibling::div/div/div[contains(preceding-sibling::div[1], '评论者')]/a[position()=1]/span/text()是什么意思,“链接”属性没有找到合适的相对路径表示方法,所以提取时还是发生了不完全的结果;
2.第二级抓取时,只提取出第一位评论者的排名,没有实现依次按照规则提取所有评论者的排名信息。

还请fuller多多指点,谢谢你~

请用新版本MetaSeeker

请下载Firefox 29.0,以及与Firefox配套的新的DataScraper和MetaStudio。新的MetaStudio允许同时设置isClue和isBlock。

请参看我的主题:test_yangviv_fuller

主要改动
1,删除了“评论者”这层,因为它有子信息属性,那么它的isBlock设置的自定义XPath就没有意义。删除这层时MetaStudio会询问怎样删除,不要选择删除整个分支,而是选择只删除本节点,那么这层下的子信息属性就被保留下来
2,给“标记”和“链接”设置isBlock,自定义XPath分别是preceding-sibling::div/div/div[contains(preceding-sibling::div[1], '评论者')]/a[position()=1]/span/text()和preceding-sibling::div/div/div[contains(preceding-sibling::div[1], '评论者')]/a[position()=1]/@href

Many thanks!

Dear Fuller,感激之情无于言表!按照您一次次的解答和指导,目前所有想要的评论属性均已提取,感谢,感动~

非常感谢!

太谢谢你了!尝试了你建议的第二种方法,成功了!谢啦~

已经抓取完了

不好意思,原来一个文件是一页的评论,所以它已经抓去完全了,谢谢。这软件很好用,而且你们的回复相当迅速,赞