Analizador de HTML en Node.js [cerrado]


198

¿Hay algo como el nokogiri de Ruby en nodejs? Me refiero a un analizador de HTML fácil de usar.

Había visto en la página de módulos de Node.js algunos analizadores, pero no puedo encontrar algo bonito y fresco.


3
¿Qué quieres decir con "amigable"? ¿Conveniente para trabajar y seleccionar nodos con, como el soporte de selector XPath y CSS de Nokogiri? ¿Es posible analizar HTML no válido de "sopa de etiquetas"?
Phrogz

Si se siente cómodo con jQuery, considere esta respuesta .
Lucio Paiva

Respuestas:


446

Si quieres construir DOM puedes 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 estos días 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 que utiliza cheerio.

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

Y si desea analizar HTML para el raspado web , puede usar YQL 1 . Hay un módulo de nodo para ello. YQL creo que sería la mejor solución si su HTML es de un sitio web estático , ya que depende de un servicio, no de su propio código y poder de procesamiento. Aunque tenga 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 está tratando de raspar es dinámico, entonces debería usar un navegador sin cabeza como phantomjs . También eche un vistazo a casperjs , si está considerando phantomjs. Y puede controlar casperjs desde el nodo con SpookyJS .

Al lado de phantomjs hay zombiejs . A diferencia de los phantomjs que no se pueden incrustar en nodejs, zombiejs es solo un módulo de nodo.

Hay un nettuts + toturial para las últimas soluciones.


1 Desde agosto de 2014, la biblioteca YUI, que es un requisito para YQL, ya no se mantiene activamente, fuente


1
Puede obtener DOM desde htmlparser2 utilizando el módulo DomHandler (incluido con htmlparser2). Se separan a propósito para permitir otros tipos de procesamiento HTML sin sobrecarga de crear DOM.
especialmente el

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

No estoy seguro de cómo usar YQL para rastrear: es más para unirse a los resultados del servicio web que para procesar el marcado.
Dardenfall

@dardenfall Tienes razón, gatear no es el término correcto. Lo cambié con raspado :)
Farid Nouri Neshat

@Farid - (te habría enviado un mensaje si pudiera) a riesgo de debatir en los comentarios (¡lo siento!) Todavía no veo cómo lo usas para raspar. Funciona con servicios web , no con sitios, y con wservices, rara vez analiza html. Tal vez xml, pero no html.
Dardenfall


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.