抓取动态网页(两种AJAX网页文字的抓取方法:*HTML文档(document))

优采云 发布时间: 2021-10-30 15:10

  抓取动态网页(两种AJAX网页文字的抓取方法:*HTML文档(document))

  在 AJAX 网页上捕获文本的两种方法:

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

  *网页文本是在加载HTML文档(文档)后的某个时间获取并带有Javascript代码显示的。这段Javascript代码在发送load事件之后运行,那么接收到load事件并不意味着所有的内容都已经加载完毕。特殊的歧视机制。

  以上两种情况,其实都没有考虑到AJAX的一个重要特性:异步加载。即HTML网页的文本内容不是与HTML文档同步加载的,而是在某些情况下(例如用户点击超链接)从服务器异步获取并显示的。此时无法使用load事件触发网页文本爬取。

  因为没有load事件触发fetch操作,所以必须进行合理的配置,通知DataScraper不要等待load事件。如果定时自动抓取网页文本,可以通过设置调度指令文件的waitOnload参数来实现。但是在V4.2.0B57之前的版本中,所有手动发起的爬取都waitOnload=true,即等待load事件。提取异步加载的内容时,很可能会出现:Timeout to load the page错误。从V4.2.0B57版本开始,增加了DataScraper菜单:Configuration->Wait for load。这是一个复选框菜单。移除钩子,不再等待加载事件。

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

  注意:异步加载的内容加载时,没有确切的时间点。人们在阅读网页时,可以根据上下文来理解和判断异步内容是否已加载,但计算机程序无法理解语义,因此DataScraper尝试使用一种智能方法进行判断,但仍有可能误判,主要是当目标网站的服务质量非常不稳定,异步加载内容和刷新显示的过程是间歇性的,而不是连续的,这时候DataScraper就会做出误判。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线