2009-12-20 14 views
15

Quiero ser capaz de manipular el html de una URL determinada. Algo así como html scraping. Sé que esto se puede hacer usando curl o alguna biblioteca de scraping. Pero me gustaría saber si es posible usar jquery para hacer una solicitud get a la url usando ajax y recuperar el html de la url, y ejecutar código jquery en el html devuelto?raspado del sitio web usando jquery y ajax

Usted

+0

quién HTML es lo que desea modificar? ¿Tienes derechos de escritura sobre esa URL? –

+1

Tenga en cuenta que también es posible (ahora) hacer algo similar con nodejs + jsdom. – HoverHell

Respuesta

4

No puede hacer la solicitud de Ajax a otro nombre de dominio que el que tiene su sitio web, debido a Same Origin Policy; lo que significa que no podrá hacer lo que quiera ... Al menos directamente.

Una solución sería:

  • tienen algún tipo de "proxy" en su propio servidor,
  • enviar su solicitud Ajax a ese proxy,
  • , que, a su vez, buscar la página en el otro nombre de dominio; y devolverlo a su código JS como respuesta a la solicitud de Ajax.

Esto se puede hacer en un par de líneas con casi cualquier lenguaje (como PHP, utilizando rizo, por ejemplo) ... O usted podría ser capaz de utilizar algunos Funcionalidad de su servidor web (ver mod_proxy y mod_proxy_http, por ejemplo, para Apache)

+0

La política de mismo origen no es un problema en Safari y un Chrome Chrome correctamente inicializado. –

0

en lugar de rizo, se puede utilizar una herramienta como Selenium que automatizará carga de la página en el navegador. Puede ejecutar JavaScript con él.

8

Me gustaría señalar que hay situaciones en las que es perfectamente aceptable utilizar jQuery para raspar pantallas entre dominios. Los gadgets de la barra lateral de Windows se ejecutan en una "zona de máquina local" que permite secuencias de comandos de dominio cruzado.

Y jQuery tiene la capacidad de aplicar selectores al contenido html recuperado. Solo necesita agregar el selector a un parámetro url del método load() después de un espacio.

El siguiente ejemplo de código de gadget comprueba esta página cada hora e informa el número total de visitas a la página.

<html> 
<head> 
    <script type="text/javascript" src="jquery.min.js"></script> 
    <style> 
     body { 
      height: 120px; 
      width: 130px; 
      background-color: white; 
     }; 
    </style> 
</head> 

<body> 
Question Viewed: 
<div id="data"></div> 

<script type="text/javascript"> 

    var url = "http://stackoverflow.com/questions/1936495/website-scraping-using-jquery-and-ajax" 

    updateGadget(); 

    inervalID = setInterval("updateGadget();", 60 * 1000); 

    function updateGadget(){ 

     $(document).ready(function(){ 
      $("#data").load(url + " .label-value:contains('times')"); 
     }); 

    } 

</script> 

</body> 
</html> 
+0

¿Ejecuté esto al pie de la letra y parece que no funciona? Firebug simplemente muestra el GET en rojo ... lo cual lo tomo significa "denegado". –

+2

No creo que solucione las políticas de dominio cruzado que existen con ajax; solo podría implementar este código dentro del sitio stackoverflow. –

+0

La política de Same Origin no es un problema en Safari y un Chrome –

0

Lo hago con un pequeño proxy PHP, pelando temporalmente las etiquetas IMG para acelerar los tiempos de carga. Lo envolví en un plugin jQuery que lo hace relativamente fácil de usar, vea here para el enlace demo/github

3

No es tan difícil.

$(document).ready(function() { 
    baseUrl = "http://www.somedomain.com/"; 
    $.ajax({ 
    url: baseUrl, 
    type: "get", 
    dataType: "", 
    success: function(data) { 
     //do something with data 
    } 
    }); 
}); 

creo que esto le puede dar una buena idea - http://jsfiddle.net/skelly/m4QCt/

+3

correctamente inicializado Su JsFiddle no funciona: 'Se negó a ejecutar el script desde 'https://raw.github.com/padolsey/jQuery-Plugins/master/cross- domain-ajax/jquery.xdomainajax.js 'porque su tipo MIME (' text/plain ') no es ejecutable, y la verificación estricta del tipo MIME está habilitada. (índice): 1 XMLHttpRequest no puede cargar http://www.mashable.com/. Ningún encabezado 'Access-Control-Allow-Origin' está presente en el recurso solicitado. Origen 'http://fiddle.jshell.net' por lo tanto, no se permite el acceso ' – 8bitjunkie

Cuestiones relacionadas