node.js - tutorial - Raspa una página web y navega haciendo clic en los botones
node js tutorial (2)
Quiero realizar las siguientes acciones en el lado del servidor:
1) Raspar una página web
2) Simule un clic en esa página y luego navegue a la nueva página.
3) Raspar la nueva página
4) Simular algunos clics de botón en la nueva página
5) Enviar los datos al cliente a través de json o algo así
Estoy pensando en usarlo con Node.js.
Pero estoy confundido en cuanto a qué módulo debo usar
un zombie
b) Node.io
c) Phantomjs
d) JSDOM
e) Cualquier otra cosa
He instalado el nodo, io pero no puedo ejecutarlo a través del símbolo del sistema.
PD: estoy trabajando en el servidor de windows 2008
Los módulos que listaste hacen lo siguiente:
- Phantomjs / Zombie - simular navegador (sin cabeza - en realidad no se muestra nada). Se puede utilizar para raspar estática o dinámica. O la prueba de sus páginas html.
- Node.io/jsdom - webscraping: extracción de datos de la página (estática).
En cuanto a tus necesidades, puedes usar fantasma o zombie.
Zombie.js y Node.io se ejecutan en JSDOM, por lo tanto, sus opciones van con JSDOM (o cualquier contenedor equivalente), un navegador sin cabeza (PhantomJS, SlimerJS) o Cheerio.
- JSDOM es bastante lento porque tiene que recrear DOM y CSSOM en Node.js.
- PhantomJS / SlimerJS son navegadores sin cabeza adecuados, por lo tanto, los rendimientos están bien y también son muy confiables.
- Cheerio es una alternativa ligera a JSDOM. No vuelve a crear la página completa en Node.js (solo descarga y analiza el DOM, no se ejecuta javascript). Por lo tanto, realmente no puede hacer clic en los botones / enlaces, pero es muy rápido raspar las páginas web.
Teniendo en cuenta sus necesidades, probablemente prefiera algo como un navegador sin cabeza. En particular, elegiría CasperJS porque tiene una API agradable y expresiva, es rápida y confiable (no necesita reinventar la rueda sobre cómo analizar y renderizar el dom o css como lo hace JSDOM) y es muy fácil Interactuar con elementos como botones y enlaces.
Su flujo de trabajo en CasperJS debería verse más o menos así:
casper.start();
casper
.then(function(){
console.log("Start:");
})
.thenOpen("https://www.domain.com/page1")
.then(function(){
// scrape something
this.echo(this.getHTML(''h1#foobar''));
})
.thenClick("#button1")
.then(function(){
// scrape something else
this.echo(this.getHTML(''h2#foobar''));
})
.thenClick("#button2")
thenOpen("http://myserver.com", {
method: "post",
data: {
my: ''data'',
}
}, function() {
this.echo("data sent back to the server")
});
casper.run();