当前位置:  开发笔记 > 编程语言 > 正文

你如何刮掉AJAX页面?

如何解决《你如何刮掉AJAX页面?》经验,为你挑选了3个好方法。

请告知如何刮掉AJAX页面.



1> Brian R. Bon..:

概述:

所有屏幕抓取首先需要手动审查您要从中提取资源的页面.在处理AJAX时,您通常只需要分析一些,而不仅仅是HTML.

处理AJAX时,这只意味着您想要的值不在您请求的初始HTML文档中,但是该javascript将被激活,它会向服务器询问您想要的额外信息.

因此,您通常可以简单地分析javascript并查看javascript发出的请求,并从一开始就调用此URL.


例:

以此为例,假设您要从中抓取的页面具有以下脚本:


然后,您需要做的只是对同一服务器的time.asp执行HTTP请求. 来自w3schools的例子.


使用C++进行高级抓取:

对于复杂的使用,如果您使用的是C++,您还可以考虑使用firefox javascript引擎SpiderMonkey在页面上执行javascript.

使用Java进行高级抓取:

对于复杂的使用,如果你使用的是Java,你也可以考虑使用firefox javascript引擎来实现Java Rhino

使用.NET进行高级抓取:

对于复杂的使用,如果您使用.Net,您还可以考虑使用Microsoft.vsa程序集.最近更换为ICodeCompiler/CodeDOM.



2> 小智..:

在我看来,最简单的解决方案是使用Casperjs,一个基于WebKit无头浏览器phantomjs的框架.

整个页面都被加载了,并且很容易刮掉任何与ajax相关的数据.您可以查看此基础教程,了解使用PhantomJS和CasperJS进行自动化和刮擦

您还可以查看此示例代码,了解如何抓取Google建议的关键字:

/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var word = casper.cli.get(0);

if (!word) {
    casper.echo('please provide a word').exit(1);
}

casper.start('http://www.google.com/', function() {
    this.sendKeys('input[name=q]', word);
});

casper.waitFor(function() {
  return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
  suggestions = this.evaluate(function() {
      var nodes = document.querySelectorAll('.gsq_a table span');
      return [].map.call(nodes, function(node){
          return node.textContent;
      });
  });
});

casper.run(function() {
  this.echo(suggestions.join('\n')).exit();
});



3> sblundy..:

如果你能得到它,请尝试检查DOM树.Selenium将此作为测试页面的一部分.它还具有单击按钮和跟随链接的功能,这可能很有用.


在selenium客户端脚本中,您可以使用`get_html_source()`函数,但它返回正常的源,而不是生成的(后AJAX)源.如果您知道如何访问生成的源,请告诉我们.
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有