请告知如何刮掉AJAX页面.
概述:
所有屏幕抓取首先需要手动审查您要从中提取资源的页面.在处理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.
在我看来,最简单的解决方案是使用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(); });
如果你能得到它,请尝试检查DOM树.Selenium将此作为测试页面的一部分.它还具有单击按钮和跟随链接的功能,这可能很有用.