AJax技术

增强AJAX/Javascript/JS网页文字抓取能力

字号+ 作者:H5之家 来源:H5之家 2015-10-16 16:09 我要评论( )

本文是对《AJAX动态网页信息提取原理》的补充,前文总结了两种AJAX网页文字的抓取方法:

本文是对《AJAX动态网页信息提取原理》的补充,前文总结了两种AJAX网页文字的抓取方法:

  • 网页文字在加载HTML文档(document)的时候用Javascript代码获取和展现,此Javascript代码在发送load事件之前运行,那么接收到load事件表示所有的内容都加载完了
  • 网页文字在加载完HTML文档(document)后在某个时刻用Javascript代码获取和展现,此Javascript代码在发送load事件之后运行,那么接收到load事件并不表示表示所有的内容都加载完了,需要特别的判别机制。
  • 上述两种情况实际上没有考虑AJAX的一项重要特性:异步加载。也就是HTML网页文字内容并不是与HTML文档同步加载的,而是在特定情形下(例如,用户点击超链接)异步地从服务器上获取并展现的。此时,不能使用load事件触发网页文字抓取。DataScraper从V4.2.0B57版本开始进行了增强,能够抓取异步加载的内容。

    因为没有load事件触发抓取操作,要进行合理配置,告知DataScraper不要等待load事件。如果是周期性自动抓取网页文字,通过设置排期指令文件的waitOnload参数就可以达到该目的,然而,在V4.2.0B57之前的版本,所有手工启动的抓取都是waitOnload=true,也就是等待load事件,提取异步加载内容时很可能出现:Timeout to load the page 错误。从V4.2.0B57版本开始,增加了DataScraper菜单:配置->等待load,这是一个checkbox菜单,将钩去掉就不再等待load事件。

    例如,MetaCamp服务器上有个主题:demo_js_paging_sohu,用于抓取sohu名人博客和相关评论,评论内容是AJAX动态生成的,当名人博客很受关注时,会有很多评论,这些评论分成多页显示,当用户点击“下一页”超链接时,并没有加载一个新的HTML网页,而是异步从网站上获取下一页评论内容,动态修改当前网页的DOM结构进行展现,因此,没有页面加载就没有load事件。要翻页提取这些评论,需要设置waitOnload=false,否则会遇到Timeout to load the page 错误。

    注意:异步加载的内容什么时候加载完了,没有一个确切的时间点,人阅读网页时,根据上下文可以理解并判断是否已经将异步内容加载上了,但是计算机程序不能理解语义,DataScraper尽量使用一种智能方法加以判断,然而仍然有误判的可能,主要发生在目标网站的服务质量很不稳定的时候,异步加载内容并进行显示刷新的过程是时断时续的,而不是持续的均匀地进行,此时,DataScraper就会出现误判。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • JQuery实现Ajax加载图片的方法

      JQuery实现Ajax加载图片的方法

      2016-02-24 17:01

    • 判断用户是不是为ajax请求

      判断用户是不是为ajax请求

      2016-02-24 17:00

    • Ajax与WEB开发 by alixixi.com

      Ajax与WEB开发 by alixixi.com

      2016-02-11 11:02

    • jQuery.ajax()的相关参数及使用

      jQuery.ajax()的相关参数及使用

      2016-02-08 16:00

    网友点评