概述:
首先,所有屏幕抓取都需要手动查看要从中提取资源的页面。 在处理AJAX时,通常只需要分析一些内容,而不仅仅是HTML。
在处理AJAX时,这仅意味着您想要的值不在您请求的初始HTML文档中,而是将执行javascript,该javascript请求服务器提供您想要的其他信息。
因此,您通常可以简单地分析javascript并查看javascript发出的请求,而只需从头开始调用此URL。
例:
以这个为例,假设您要从中进行抓取的页面具有以下脚本:
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);
}
然后,您要做的只是改为对同一服务器的time.asp发出HTTP请求。 来自w3schools的示例。
使用C ++进行高级抓取:
对于复杂的用法,如果您使用的是C ++,则还可以考虑使用firefox javascript引擎SpiderMonkey在页面上执行javascript。
Java高级抓取:
对于复杂的用法,如果您使用的是Java,则还可以考虑将firefox javascript引擎用于Java Rhino
.NET的高级抓取:
对于复杂的用法,如果您使用的是.Net,则还可以考虑使用Microsoft.vsa程序集。 最近被ICodeCompiler / CodeDOM取代。