usar tutorial scraping nodejs crawler como javascript jquery node.js screen-scraping web-scraping

nodejs - web scraping javascript tutorial



Raspe las páginas web en tiempo real con Node.js (8)

Lo bueno es raspar el contenido del sitio web usando Node.js. Me gustaría construir algo muy, muy rápido que pueda ejecutar búsquedas en el estilo de kayak.com , donde una consulta se envía a varios sitios diferentes, los resultados se raspan y se devuelven al cliente a medida que están disponibles.

Supongamos que este script solo debe proporcionar los resultados en formato JSON, y podemos procesarlos directamente en el navegador o en otra aplicación web.

Algunos puntos de partida:

Usar node.js y jquery para raspar sitios web

¿Alguien tiene ideas?


La nueva forma de usar ES7 / promesas

Usualmente cuando estás raspando quieres usar algún método para

  1. Obtenga el recurso en el servidor web (documento html generalmente)
  2. Lea ese recurso y trabaje con él como
    1. Una estructura DOM / árbol y hacer que sea navegable
    2. analizarlo como un documento simbólico con algo como SAS.

Tanto el árbol como el análisis de tokens tienen ventajas, pero el árbol suele ser sustancialmente más simple. Haremos eso. Mira la request-promise , así es como funciona:

const rp = require(''request-promise''); const cheerio = require(''cheerio''); // Basically jQuery for node.js const options = { uri: ''http://www.google.com'', transform: function (body) { return cheerio.load(body); } }; rp(options) .then(function ($) { // Process html like you would with jQuery... }) .catch(function (err) { // Crawling failed or Cheerio

Esto está usando cheerio que es esencialmente una ligera librería jQuery-esque del lado del servidor (que no necesita un objeto de ventana, o jsdom).

Como está utilizando promesas, también puede escribir esto en una función asíncrona. Se verá sincrónico, pero será asincrónico con ES7:

async function parseDocument() { let $; try { $ = await rp(options); } catch (err) { console.error(err); } console.log( $(''title'').text() ); // prints just the text in the <title> }


Es mi scrapper de uso general, fácil de usar, https://github.com/harish2704/html-scrapper escrito para Node.JS. Puede extraer información en base a esquemas predefinidos. Una definición de esquema incluye un selector css y una función de extracción de datos. Actualmente usa cheerio para el análisis en dom ..


He estado investigando y https://npmjs.org/package/wscraper jacta de ser un

un agente web scraper basado en cheerio.js una implementación rápida, flexible y ligera de core jQuery; construido sobre request.js; inspirado en http-agent.js

Muy poco uso (según npmjs.org) pero vale la pena buscar a las partes interesadas.


No siempre necesitas jQuery. Si juega con el DOM devuelto por jsdom, por ejemplo, puede tomar fácilmente lo que necesita usted mismo (también considerando que no tiene que preocuparse por los problemas de xbrowser). Consulte: https://gist.github.com/1335009 que no le quita nada. node.io para nada, simplemente diciendo que podrías ser capaz de hacerlo tú mismo dependiendo ...


Todas las soluciones mencionadas presumen ejecutar el raspador localmente. Esto significa que tendrá un rendimiento severamente limitado (debido a que los ejecuta en secuencia o en un conjunto limitado de hilos). Un mejor enfoque, imho, es confiar en una grilla de raspado existente, aunque comercial.

Aquí hay un ejemplo:

var bobik = new Bobik("YOUR_AUTH_TOKEN"); bobik.scrape({ urls: [''amazon.com'', ''zynga.com'', ''http://finance.google.com/'', ''http://shopping.yahoo.com''], queries: ["//th", "//img/@src", "return document.title", "return $(''script'').length", "#logo", ".logo"] }, function (scraped_data) { if (!scraped_data) { console.log("Data is unavailable"); return; } var scraped_urls = Object.keys(scraped_data); for (var url in scraped_urls) console.log("Results from " + url + ": " + scraped_data[scraped_urls[url]]); });

Aquí, el raspado se realiza de forma remota y se emite una devolución de llamada solo cuando los resultados están listos (también hay una opción para recopilar resultados a medida que estén disponibles).

Puede descargar el SDK de cliente de Bobik en https://github.com/emirkin/bobik_javascript_sdk


Veo que la mayoría de las respuestas están en el camino correcto con cheerio y demás, sin embargo, una vez que llegas al punto en el que necesitas analizar y ejecutar JavaScript (en SPA''s y más), cheerio https://github.com/joelgriffith/navalia (soy el autor). Navalia está diseñado para admitir raspado en un contexto de navegador sin cabeza, y es bastante rápido. ¡Gracias!


echa un vistazo a https://github.com/rc0x03/node-promise-parser

Fast: uses libxml C bindings Lightweight: no dependencies like jQuery, cheerio, or jsdom Clean: promise based interface- no more nested callbacks Flexible: supports both CSS and XPath selectors


Node.io parece tomar el pastel :-)