笔者已经发表过多篇述及AJAX动态页面抓取原理的文章,本文将进行一次总结,首先,下面是以前文章的汇总:
当发表一 文时,对MetaSeeker V4.2.0版本进行了升级,以便抓取异步加载的AJAX页面内容,经过大量测试,发现V4.2.0B57之后的版本抓取AJAX动态页面和非AJAX页 面的精度不够稳定,因此,升级成V4.3.0版本,本文同时展示页面抓取软件工具包MetaSeeker V4.3.0版本的增强的AJAX动态页面的能力。
从V4.3.0开始,MetaSeeker的网页抓取规则生成工具MetaStudio提供了两个抓取模式选项开关:
- 延长模式
- 积极模式
此选项都是MetaStudio的系统菜单配置下的checkbox菜单项。
使用上述两个开关可以组合出四种模式,加上最早的普通模式,总共有下面5种模式:
- 普通模式
- 加速模式
- 延长模式
- 积极模式
- 积极延长模式
普通模式或加速模式
新创建的MetaStudio工作台,延长模式和积极模式开关都没有打开(MetaStudio的系统菜单配置->延长模式和配置->积极模式都没有勾选),到底是普通模式还是加速模式要看页面抓取工具软件DataScraper的设置。
- 如果使用DataScraper的手工批量抓取页面功能,通过勾选菜单项配置->普通模式(早期版本叫等待load),可以在普通模式和加速模式之间切换。
- 如果使用DataScraper的周期性批量抓取网页功能,通过设置的waitOnload参数,可以在普通模式和加速模式之间切换。
延长模式
有些网页内容是异步加载的,尤其是AJAX动态页面,可能在主HTML页面加载完后才异步修改浏览器窗口中显示的内容,此时就需要延长模式。
注意:延长模式只能用在周期性网页抓取
积极模式
主要用于抓取AJAX动态页面,例如,一文述及的使用Javascript代码实现翻页,而且翻页时不是加载另一个页面,而且将修改的内容通过AJAX程序从服务器下载下来,局部修改当前页面的显示内容。
注意:积极模式只能用在周期性网页抓取,而且周期性抓取指令文件的waitOnload应该设置成false
为了提高抓取效率,可以适当调整周期性抓取指令文件的lazyCyle参数值,如果不设置该值,缺省是5秒钟,这是一个很保守的数字,抓取速度受影 响,很多时候可以将该参数设置成1~4,以提高速度,该参数的选择并不根据目标网页的下载速度,而是目标网站的速度的稳定性,如果异步加载时快时慢,这个 数字应该调大。当然,从感官上难于判断速度的稳定性,主要靠检查抓取结果是否符合预期而做事后补救。
积极延长模式
此模式是积极模式和延长模式的结合。
注意:积极延长模式只能用在周期性网页抓取,而且周期性抓取指令文件的waitOnload应该设置成false
怎样选择这些模式
首选普通或加速模式
网页抓取规则定义工具MetaStudio新建的工作台的缺省模式是普通或加速模式,用户一开始应该保持此设置不变,如果使用手工或者周期性的普通抓取或者加速抓取能够抓取到满意的结果,用户就一直保持此设置即可,因为这种模式效率和准确度最合理。
转向延长模式
如果使用普通或者加速模式,总是在DataScraper的日志窗口或者日志文件中出现下述错误:
Suitable data schema cannot be found for this SpiderClue in XXXst inthread cycle
上述错误最有可能的原因是定义的信息结构不合适,如果排除这个可能,那么很有可能是页面内容是异步加载的,应该改用延长模式。
当然,也只有为信息属性指定了key特性才能报上述错误,如果没有指定key特性,一个标志性现象是用户能够观察到欲抓取的内容已经显示在DataScraper的内嵌浏览器中了,但是,抓取结果文件中没有相应内容,此时,也应该转向延长模式。
请注意上章的注意事项。此模式的应用案例是主题demo_ajax_google_shIndex,抓取沪市股票指数时,普通模式和加速模式可以胜任,但是该网页的右栏评论要使用延长模式抓取。
转向积极模式
如果使用普通模式,DataScraper会停留在WFPL AGAIN状态(显示在DataScraper中部的状态条上),不再往下执行;如果使用加速模式,DataScraper会报如下错误:
Timeout to load the page(如果被抓取的内容对应的信息属性设置了key特性)
如果没有设置key特性,就会抓到空内容。
但是,用户确信被抓取的页面已经显示在DataScraper的内嵌浏览器中了。此时,需要切换到积极模式。
请注意上章的注意事项。此模式的应用案例时主题demo_js_paging_sohu,当翻到下一页抓取更多评论时,页面只做局部修改。
版本兼容性
上述多个模式是从MetaSeeker V4.3.0才开始明确区分开的,如果使用以前版本定义网页抓取规则,而使用V4.3.0及其以后版本执行抓取任务,那么:
- 如果以前定义的信息结构没做特别设置,那么被当作积极模式
- 如果以前定义的信息结构打开了延长模式开关,那么被当作积极延长模式
总之,以前定义的信息结构都是积极模式,由于MetaSeeker V4.3.0采用了比较保守的lazyCycle数值(5秒),基本上能够保证所有主题的准确运行。用户也可以使用新版的MetaStudio重新调整模式。