js 抓取网页内容(本文是对《AJAX动态网页信息提取原理》的补充,前文总结了两种情况)

优采云 发布时间: 2021-09-27 01:03

  js 抓取网页内容(本文是对《AJAX动态网页信息提取原理》的补充,前文总结了两种情况)

  本文基于《AJAX动态网页信息抽取原理》

  另外,前一篇文章总结了两种在AJAX网页上抓取文本的方法:

  网页文本是在加载 HTML 文档(document)时通过 Javascript 代码获取并显示的。这段 Javascript 代码在发送 load 事件之前运行,然后接收到 load 事件意味着所有内容都已加载。

  网页文字是在加载HTML文档(document)后的某个时间用Javascript代码获取并显示的。这段Javascript代码在发送load事件之后运行,那么接收到load事件并不代表所有的内容都已经加载完毕,需要特殊的判别机制。

  以上两种情况其实并没有考虑到AJAX的一个重要特性:异步加载。也就是说,HTML 页面的文本内容不是与 HTML 文档同步加载的,而是在某些情况下(例如,

  例如,用户点击超链接)从服务器异步获取并显示。此时无法使用load事件触发网页文本爬取。DataScraper 从版本 V4.2.0B57 开始

  它已得到增强,能够抓取异步加载的内容。

  因为没有load事件触发fetch操作,所以必须进行合理的配置,通知DataScraper不要等待load事件。如果是定期自动抓取网页文字

  , 通过设置调度指令文件

  的

  waitOnload 参数可以达到这个目的。但是在V4.2.0B57之前的版本中,所有手动发起的爬取都是waitOnload=true,即等待

  load事件,在提取异步加载的内容时很可能发生:Timeout to load the page

  错误。从 V4.2.0B57 版本开始,增加了 DataScraper 菜单:配置

  -> 等待加载

  , 这是一个复选框菜单,去掉钩子,不再等待加载事件。

  比如MetaCamp服务器上有一个主题:demo_js_paging_sohu,用于获取搜狐名人博客

  和

  相关评论,评论内容是AJAX动态生成的,当名人博客很火的时候,会有很多评论,这些评论被分成多个页面,当用户点击“下一页”超链接时,新的没有加载

  而是从网站异步获取下一页的评论内容,动态修改当前网页的DOM结构来显示。因此,没有页面加载就没有加载事件。翻页检索这些评论

  理论上需要设置waitOnload=false,否则会遇到Timeout加载页面错误。

  注意

  : 异步加载的内容加载时,没有确切的时间点。人们在阅读网页时,可以根据上下文来理解和判断异步内容是否已加载。

  然而,计算机程序无法理解语义。DataScraper 尝试使用智能方法进行判断,但仍有误判的可能,主要发生在目标网站的服务质量非常不稳定时

  这时候异步加载内容和刷新显示的过程是间歇性的,而不是连续均匀的。这时候DataScraper就会做出误判。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线