2011-11-02 8 views
158

¿Hay algo como Ruby's nokogiri en nodejs? Me refiero a un analizador de HTML fácil de usar.HTML-parser en Node.js

He visto en los módulos de Node.js algunos analizadores sintácticos, pero no puedo encontrar algo bonito y fresco.

+3

¿Qué quiere decir por "amigo"? Conveniente para trabajar y seleccionar nodos con, como soporte de selector de XPath y CSS de Nokogiri? ¿Se puede analizar el HTML no válido "sopa de etiquetas"? – Phrogz

+0

Si se siente cómodo con jQuery, considere [esta respuesta] (http://stackoverflow.com/a/31361044/778272). –

+1

¿Por qué siempre calificaron todo como fuera de tema o inaceptable o lo que sea? Esta es una persona real con una pregunta legítima. Solo tienes que seguir y cerrarlo. ¿Te hace sentir importante o algo así? –

Respuesta

389

Si desea compilar DOM puede usar jsdom.

También hay cheerio, tiene la interfaz jQuery y es mucho más rápido que las versiones anteriores de jsdom, aunque en la actualidad tienen un rendimiento similar.

Es posible que desee echar un vistazo a htmlparser2, que es un analizador de transmisión, y de acuerdo con su punto de referencia, parece ser más rápido que otros, y no DOM por defecto. También puede producir un DOM, ya que también se incluye con un controlador que crea un DOM. Este es el analizador utilizado por cheerio.

parse5 también parece una buena solución. Está bastante activo (11 días desde la última confirmación a partir de esta actualización), cumple con WHATWG y se utiliza en jsdom, Angular y Polymer.

Y si quiere analizar HTML para web scraping, puede usar YQL. Hay un node module para él. YQL Creo que sería la mejor solución si su HTML es de un sitio web static, ya que está confiando en un servicio, no en su propio código y poder de procesamiento. Aunque ten en cuenta que no funcionará si el robot.txt del sitio web no permite la página, YQL no funcionará con ella.

Si el sitio web que intenta raspar es dynamic, entonces debe utilizar un headless browser como phantomjs. También eche un vistazo a casperjs, si está considerando phantomjs. Y puedes controlar casperjs desde el nodo con SpookyJS.

Junto a phantomjs hay zombiejs. A diferencia de phantomjs que no pueden integrarse en nodejs, zombiejs es solo un módulo de nodo.

Hay una nettuts+ toturial para las últimas soluciones.

+12

Muy completa respuesta. Buen trabajo. –

+1

Puede obtener DOM desde htmlparser2 usando el módulo DomHandler (incluido con htmlparser2).Están separados a propósito para permitir otros tipos de procesamiento de HTML sin gastos generales de creación de DOM. – esp

+0

@esp Gracias, antes de pensar que era DOM no estándar, cambié esa sección en consecuencia. –

17

Actualización:cheerio es probablemente su mejor opción.

Node.io es una herramienta de raspado bastante completa.

+4

Node.io ya no se mantiene y su autor recomienda el uso de [cheerio] (https://github.com/MatthewMueller/cheerio) ahora –

+0

Gracias, actualizando la respuesta. – Will