Pregunta Cómo analizo una página HTML con Node.js


Necesito analizar (en el lado del servidor) grandes cantidades de páginas HTML.
Todos estamos de acuerdo en que la expresión regular no es el camino a seguir aquí.
Me parece que javascript es la forma nativa de analizar una página HTML, pero esa suposición se basa en que el código del lado del servidor tiene toda la capacidad DOM javascript tiene dentro de un navegador.

¿Tiene Node.js esa capacidad incorporada?
¿Hay un mejor enfoque para este problema, analizando HTML en el lado del servidor?


74
2017-09-10 16:18


origen


Respuestas:


Puedes usar el npm módulos jsdom y htmlparser para crear y analizar un DOM en Node.JS.

Otras opciones incluyen:

  • BeautifulSoup para python
  • puedes convertirte html a xhtml y usa XSLT
  • HTMLAgilityPack para .NET
  • CsQuery para .NET (mi nuevo favorito)
  • Los motores spidermonkey y rhino JS tienen soporte E4X nativo. Esto puede ser útil, solo si convierte su html a xhtml.

De todas estas opciones, prefiero usar la opción Node.js, porque usa los métodos de acceso DOM estándar W3C y puedo reutilizar el código tanto en el cliente como en el servidor. Ojalá los métodos de BeautifulSoup fueran más similares a los dom W3C, y creo que convertir tu HTML a XHTML para escribir XSLT es simplemente sádico.


69
2017-09-10 16:24



Utilizar Cheerio. No es tan estricto como jsdom y está optimizado para raspar. Como beneficio adicional, utiliza los selectores jQuery que ya conoce.

 Sintaxis familiar: Cheerio implementa un subconjunto de core jQuery. Cheerio   elimina todas las incoherencias de DOM y cruxt del navegador de jQuery   biblioteca, revelando su API realmente hermosa.

ϟ Increíblemente rápido: Cheerio funciona con un DOM muy simple y consistente   modelo. Como resultado, el análisis, la manipulación y la representación son increíblemente   eficiente. Los puntos de referencia preliminares de punta a punta sugieren que cheerio es   aproximadamente 8 veces más rápido que JSDOM.

❁ Insanamente flexible: Cheerio se envuelve en el perdón de @ FB55   htmlparser. Cheerio puede analizar prácticamente cualquier documento HTML o XML.


56
2017-11-12 16:36



Utilizar htmlparser2, es mucho más rápido y bastante sencillo. Consulte este ejemplo de uso:

https://www.npmjs.org/package/htmlparser2#usage

Y la demostración en vivo aquí:

http://demos.forbeslindesay.co.uk/htmlparser2/


7
2017-11-28 12:04



Htmlparser2 por FB55 parece ser una buena alternativa.


4
2018-04-20 18:09



jsdom es demasiado estricto como para hacer un verdadero tipo de screen scraping, pero beautifulsoup no se atraganta con el marcado incorrecto.

node-soupselect es un beautifulsoup de un puerto de Python en nodejs, y funciona maravillosamente


1
2017-08-24 11:40



En .NET, está el Paquete HTML Agility, que es una biblioteca de análisis de HTML extremadamente sólida.


0
2017-09-10 16:36