Cómo puedo analizar una página HTML con Node.js


Necesito analizar (del 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 que javascript tiene dentro de un navegador.

Hace Nodo.¿js tiene esa habilidad incorporada?
¿Hay un mejor enfoque para este problema, analizando HTML en el lado del servidor?

Author: Yves M., 2011-09-10

6 answers

Puede usar los módulos npm jsdom y htmlparser para crear y analizar un DOM en el nodo.JS.

Otras opciones incluyen:

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

 70
Author: kzh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-23 03:30:49

Use 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 inconsistencias DOM y el cruft del navegador de jQuery biblioteca, revelando su API verdaderamente hermosa.

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

Ins Increíblemente flexible: Cheerio se envuelve en el perdón de @FB55 htmlparser. Cheerio puede analizar casi cualquier documento HTML o XML.

 56
Author: Meekohi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 16:36:49

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

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

Y la demo en vivo aquí:

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

 7
Author: Anderson Madeira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-28 12:04:19

Htmlparser2 de FB55 parece ser una buena alternativa.

 4
Author: esp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-20 18:09:13

Jsdom es demasiado estricto para hacer cualquier tipo de raspado de pantalla real, pero beautifulsoup no se ahoga con un mal marcado.

Node-soupselect es una adaptación de beautifulsoup de python a nodejs, y funciona muy bien

 1
Author: Yarek T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-24 11:40:12

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

 0
Author: josh3736,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-10 16:36:46