当前,一些大型社会性媒体(social media)网站(例如,博客、论坛、社交网)大量采用AJAX/Javascript,网页内容动态生成,而且同一个网页上的内容从多个信息源获得,这给网页信息抓取造成了障碍。下面以抓取新浪评论为例讲解怎样使用MetaSeeker抓取Ajax动态内容。现在,很多网站的新闻文章都允许评论,例如,新浪、搜狐、凤凰网等等,下面介绍的方法适用于其它类似网站。
安装了网页抓取规则生成工具MetaStudio以后,可以在Schema List工作台上查找主题名为demo_comment_sina的信息结构,通过这个信息结构,可以生成网页抓取规则。
实际上新浪评论抓取是一个比较简单的任务,可能相对比较复杂的是抓取新浪博客的博文和评论,我们将在另一个篇文章中讲解。在此,我们重点讲解定义这个信息结构需要注意的几点。
适当避开HTML id属性
用MetaStudio的DOM视窗可以看到样本页面上很多HTML元素使用了id属性,很多网站的网页HTML中的id不但是某个网页内唯一,而且整个网站唯一,例如,博客文章有唯一的id,当使用MetaSeeker的FreeFormat技术高精度抓取网页内容时,如果不经意使用了某个id,生成的抓取规则可能仅仅对本网页有效。所以,如果使用某个id属性进行FreeFormat映射,需要检查其有效性,如果发生所述问题,可以在“配置信息属性的特性”弹出窗口中勾选class,而不勾选id。当然class不一定合适,因为class是多值的,在一个网页上可能出现重复值,会干扰信息抓取定位,定义完信息结构后需要验证。
另外,虽然在定义信息结构时没有使用id进行FreeFormat映射,但是,MetaStudio会在自动计算网页抓取规则时将id考虑进去。例如,本例在Clue Editor工作台上定义了一个线索,用于翻页,缺省情况下生成的抓取规则使用了“下一页”节点的父节点的id=_PAGE_LIST_BOTTOM_,但是翻到第二页时,用这个规则就不适合了。所以,需要点击菜单“配置”-〉“首选项”,在线索定位参数中选择偏好class或者任何一个,这样生成的抓取规则使用了class=pagebox_next。
缺省情况总是优选id,而不是class,因为id有唯一性特征(不总是),所以,抓取定位会更准确。
选择AJAX抓取模式
AJAX抓取是MetaSeeker的特长,同样AJAX抓取也是比较复杂的,首先必须掌握MetaSeeker的抓取模式,可以在 http://www.gooseeker.com 上搜索“AJAX”并阅读所有原理介绍文章。
本例设置了延长模式和积极模式,都在MetaStudio的菜单“配置”下。设置了延长模式后,以后再次用MetaStudio加载这个信息结构时,信息结构不是一步加载到位的,需要用户观察网页上的待提取内容是否都显示出来了,再点击菜单“文件”-〉“后续分析”完成加载。