2012-06-18 18 views

Respuesta

7

Si usa javascript en el lado del servidor es posible. Usted debe echar un vistazo a Node.JS

Y un ejemplo de una oruga se pueden encontrar en el enlace de abajo:

http://www.colourcoding.net/blog/archive/2010/11/20/a-node.js-web-spider.aspx

+0

No necesita ser del lado del servidor; no necesita ser una aplicación web en absoluto (si usa un nodo). – Quentin

+0

de hecho, pero me gusta pensar que ese nodo maneja principalmente la lógica de negocios, por lo que en mi opinión debería catalogarse como lógica del lado del servidor. –

+0

Puede escribir aplicaciones de línea de comandos en el nodo y una aplicación de línea de comandos cumplirá los requisitos de la pregunta. No será del lado del servidor porque no será una aplicación web (por lo tanto, no hay servidor). – Quentin

14

En general, el navegador de JavaScript sólo puede arrastrarse dentro del dominio de su origen, porque recuperar páginas se haría a través de Ajax, que está restringido por Same-Origin Policy.

Si la página de ejecutar el script rastreador está en www.example.com, después de que la escritura puede rastrear todas las páginas de www.example.com, pero no en las páginas de cualquier otro origen (a menos que se aplica algún caso extremo , por ejemplo, el encabezado Access-Control-Allow-Origin está configurado para páginas en el otro servidor).

Si realmente desea escribir un rastreador con todas las funciones en el navegador JS, podría escribir una extensión del navegador: por ejemplo, Chrome extensions se empaquetan ejecución de la aplicación Web con permisos especiales, incluyendo cross-origin Ajax. La dificultad de este enfoque es que tendrá que escribir varias versiones del rastreador si desea admitir varios navegadores. (Si el rastreador es solo para uso personal, probablemente no sea un problema.)

+0

La mayoría de los navegadores modernos admiten extensiones escritas en Javascript, no solo en Chrome: me pregunto por qué solo menciona Chrome en su respuesta. – lucideer

+0

@lucideer Una buena pregunta: originalmente escribí una explicación un poco mejor, pero pensé que era demasiado larga. He editado mi último párrafo para que sea un poco más claro. – apsillers

+0

Voto por subir para describir las limitaciones del entorno del navegador y completar las respuestas anteriores. –

1

Mi configuración típica es usar una extensión de navegador con el conjunto de privilegios de origen cruzado, que está inyectando el código del rastreador y jQuery.

Otra toma sobre orugas, JavaScript es utilizar un navegador sin cabeza como PhantomJS o casperJS (lo que aumenta los poderes de fantasma)

+0

+1 para PhantomJS. –

1

Hay formas de burlar la política del mismo origen con JS. Escribí un rastreador para Facebook, que reunía información de perfiles de Facebook de mis amigos y los amigos de mi amigo y permitía filtrar los resultados por género, ubicación actual, edad, estado civil (capten mi opinión). Fue simple. Lo acabo de ejecutar desde la consola. De esta forma, su script tendrá privilegios para realizar solicitudes en el dominio actual. También puede hacer un bookmarklet para ejecutar el script desde sus marcadores.

Otra forma es proporcionar un proxy PHP. Su script accederá al proxy en el dominio actual y solicitará archivos de otro con PHP. Solo ten cuidado con esos. Estos podrían ser secuestrados y utilizados como un proxy público por un tercero si no tiene cuidado.

Buena suerte, tal vez a tomar un amigo o dos en el proceso como lo hice :-)

2

hemos podido rastrear las páginas que usan Javascript desde el lado del servidor con la ayuda de un kit web sin cabeza. Para rastrear, tenemos pocas bibliotecas como PhantomJS, CasperJS, también hay un nuevo contenedor en PhantomJS llamado Nightmare JS que facilita las tareas.

0

sí es posible

  1. Uso nodejs (su JS lado del servidor)
  2. No es NGP (gestor de paquetes que gestiona el módulo 3 ª parte) en nodejs
  3. Uso PhantomJS en NodeJS (módulo de terceros que puede rastrear a través de sitios web es PhantomJS)
0

Hay un enfoque del lado del cliente para esto, utilizando la extensión Firefox Greasemonkey. con Greasemonkey puedes crear scripts para que se ejecuten cada vez que abras URL específicas.

aquí un ejemplo:

si tiene las direcciones URL como éstas:

http://www.example.com/products/pages/1

http://www.example.com/products/pages/2

continuación, puede utilizar algo como esto para abrir todas las páginas que contienen la lista de productos (ejecutar esta manualmente)

var j = 0; 
for(var i=1;i<5;i++) 
{ 
    setTimeout(function(){ 
    j = j + 1; 
    window.open('http://www.example.com/products/pages/ + j, '_blank'); 

}, 15000 * i); 

}

luego puede crear una secuencia de comandos para abrir todos los productos en una nueva ventana para cada página de lista de productos e incluir esta url en Greasemonkey para eso.

http://www.example.com/products/pages/ *

y luego un guión para cada página de producto para extraer datos y llamar a un servicio web que pasan los datos y cerrar la ventana y así sucesivamente.

0

Hice un ejemplo de rastreador javascript en github.

Es un evento controlado y utiliza una cola en memoria para almacenar todos los recursos (es decir, direcciones URL).

Cómo utilizar en su entorno nodo

var Crawler = require('../lib/crawler') 
var crawler = new Crawler('http://www.someUrl.com'); 

// crawler.maxDepth = 4; 
// crawler.crawlInterval = 10; 
// crawler.maxListenerCurrency = 10; 
// crawler.redisQueue = true; 
crawler.start(); 

Aquí Sólo te estoy mostrando 2 Método de núcleo de una oruga Javascript.

Crawler.prototype.run = function() { 
    var crawler = this; 
    process.nextTick(() => { 
    //the run loop 
    crawler.crawlerIntervalId = setInterval(() => { 

     crawler.crawl(); 

    }, crawler.crawlInterval); 
    //kick off first one 
    crawler.crawl(); 
    }); 

    crawler.running = true; 
    crawler.emit('start'); 
} 


Crawler.prototype.crawl = function() { 
    var crawler = this; 

    if (crawler._openRequests >= crawler.maxListenerCurrency) return; 


    //go get the item 
    crawler.queue.oldestUnfetchedItem((err, queueItem, index) => { 
    if (queueItem) { 
     //got the item start the fetch 
     crawler.fetchQueueItem(queueItem, index); 
    } else if (crawler._openRequests === 0) { 
     crawler.queue.complete((err, completeCount) => { 
     if (err) 
      throw err; 
     crawler.queue.getLength((err, length) => { 
      if (err) 
      throw err; 
      if (length === completeCount) { 
      //no open Request, no unfetcheditem stop the crawler 
      crawler.emit("complete", completeCount); 
      clearInterval(crawler.crawlerIntervalId); 
      crawler.running = false; 
      } 
     }); 
     }); 
    } 

    }); 
}; 

Aquí está el enlace github https://github.com/bfwg/node-tinycrawler. Es un rastreador web javascript escrito bajo 1000 líneas de código. Esto debería ponerlo en el camino correcto.

0

Google's Chrome team has released puppeteer en agosto de 2017, una biblioteca de nodos que proporciona una API de alto nivel para Chrome sin cabeza y sin cabeza (Chrome sin cabeza está disponible since 59).

Utiliza una versión incrustada de Chromium, por lo que se garantiza que funciona de la caja.Si desea utilizar una versión específica Chrome, puede hacerlo mediante el lanzamiento de titiritero con una ruta ejecutable como parámetros, tales como:

const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'}); 

Un ejemplo de navegar a una página web y tomar una captura de pantalla de ella muestra cómo simple es (tomado de la página de GitHub):

const puppeteer = require('puppeteer'); 

(async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto('https://example.com'); 
    await page.screenshot({path: 'example.png'}); 

    await browser.close(); 
})(); 
Cuestiones relacionadas