Bri*_*ndy 54
概述:
所有屏幕抓取首先需要手动审查您要从中提取资源的页面.在处理AJAX时,您通常只需要分析一些,而不仅仅是HTML.
处理AJAX时,这只意味着您想要的值不在您请求的初始HTML文档中,但是该javascript将被激活,它会向服务器询问您想要的额外信息.
因此,您通常可以简单地分析javascript并查看javascript发出的请求,并从一开始就调用此URL.
例:
以此为例,假设您要从中抓取的页面具有以下脚本:
<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
Run Code Online (Sandbox Code Playgroud)
然后,您需要做的只是对同一服务器的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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59721 次 |
| 最近记录: |