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