如何自动滚屏抓取AJAX网站数据

   注意:本功能是DataScraper V4.11.1版本新加的

AJAX网站数据抓取技巧在GooSeeker社区已经讨论了很多(在GooSeeker社区网站搜索AJAX可以看到所有相关技巧),但是,随着AJAX的广泛采用,出现了很多网站数据采集的难题,本功能主要解决下述难题:

   网页上显示的内容是用AJAX/Javascript机制异步从服务器上加载,而且并不是在加载HTML网页的同时
   或者之后就开始AJAX数据的加载,而是用户滚动浏览器屏幕内容时,滚屏到哪才加载并显示到哪。

本功能重点应对滚屏加载问题。例如,抓取新浪微博数据,微博的评论数和转发数就是这样加载的,必须解决该问题。

又如,京东商城的商品图片也是滚屏后加载的,但是,如果仅仅抓取商品图片的URL地址,可以采用《采集京东商城网站的产品信息的技巧》一文介绍的技巧,而不需要滚屏。

首先,DataScraper显示的屏幕要有足够大的尺寸,因为AJAX程序根据窗口大小计算哪行数据需要加载了,浏览器窗口越大,AJAX一次加载的行数越多,所以,需要调整DataScraper的内嵌浏览器的尺寸。如果采用手动批量抓取,直接手工调整DataScraper的窗口大小即可,但是,如果采用周期性自动批量抓取,缺省情况下,内嵌浏览器窗口是最小的,如果同时运行多个窗口,一个个调整很繁琐。从V4.11.1开始,增加了一个菜单项:配置-〉全屏显示,这是一个乒乓菜单,如果勾选了,下次启动DataScraper时,所有DataScraper窗口将是最大化的。

其次,应该设置滚屏参数,滚屏参数跟屏幕最大化不一样,后者是全局参数,前者既能够全局设置,又可以在周期性抓取指令文件中为特定主题个别设置,而且特定设置将覆盖全局设置。

滚屏参数有两个:

  • 额外滚屏次数:缺省值是0,表示不滚屏。DataScraper能够自动计算应该翻滚多少屏,但是为了等待异步加载的AJAX数据完整加载好,需要设置额外滚屏次数,相当于增加了一个时延,如果滚屏时延取值2的话,额外滚屏次数推荐值是10。
  • 滚屏延时:缺省值是2。如果设置成N,则等待1/N秒才滚到下一屏,所以,这个整数是2的倍数的话,不会有除不尽的问题,也就是说没有误差,不过因为时间精度是毫秒级,所以有误差也是微乎其微。很多网页如果滚屏太快就不向服务器发送AJAX数据请求。所以,这个整数不能太大。

使用菜单:配置-〉滚屏参数,弹出一个对话框,可以修改上述参数值,这是全局设置。如果在周期性抓取指令文件中为数据抓取主题设置专用参数,则需要设置:

  • scrollMorePages:额外滚屏次数
  • scrollWindowRatio:滚屏延时

使用滚屏功能时,DataScraper抓取网页的速度大大降低,所以,通常要将额外滚屏次数设置成0,即不滚屏。