¿Qué analizador HTML es el mejor? [cerrado]

194

Codifico muchos analizadores. Hasta ahora, estaba usando el navegador sin cabeza HtmlUnit para el análisis y la automatización del navegador.

Ahora, quiero separar ambas tareas.

Como el 80% de mi trabajo implica solo el análisis, quiero usar un analizador HTML ligero porque lleva mucho tiempo en HtmlUnit cargar primero una página, luego obtener la fuente y luego analizarla.

Quiero saber qué analizador HTML es el mejor. El analizador sería mejor si está cerca del analizador HtmlUnit.


EDITAR:

Por lo mejor, quiero al menos las siguientes características:

  1. Velocidad
  2. Facilidad para localizar cualquier HtmlElement por su "id" o "nombre" o "tipo de etiqueta".

Estaría bien para mí si no limpia el código HTML sucio. No necesito limpiar ninguna fuente HTML. Solo necesito una forma más fácil de moverme a través de HtmlElements y obtener datos de ellos.

Yatendra Goel
fuente
2
¿Cómo quieres decir "mejor"? ¿Te refieres a la velocidad, la facilidad de transición desde la implementación actual, el cumplimiento de los estándares del W3C, algo más en lo que no he pensado? Su pregunta implica velocidad, pero también implica tiempo de transición de desarrollo. Algunas aclaraciones pueden ayudar a otros a recomendar buenos analizadores que se ajusten mejor a sus necesidades.
aperkins
2
Su afirmación 'Codifico muchos analizadores sintéticos' no parece coincidir con la pregunta. ¿Quieres decir 'Necesito usar mucho los analizadores html?'
blanco el
11
Creo que esta pregunta es lo suficientemente específica como para estar exenta de la razón cercana "no constructiva".
Bill the Lizard
9
Vota para volver a abrir esto, por favor. Esto es lo suficientemente específico y no debe cerrarse.
AZ_
3
Sí, algunas personas en SO pelean una guerra santa contra guerras santas de "lo mejor de" preguntas. Muy molesto. La votación de respuesta indica claramente la utilidad de esta pregunta.
user1050755

Respuestas:

396

Autoenchufe : Acabo de lanzar un nuevo analizador HTML de Java: jsoup . Lo menciono aquí porque creo que hará lo que buscas.

Su truco de fiesta es una sintaxis de selector CSS para encontrar elementos, por ejemplo:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Vea el Selector javadoc para más información.

Este es un proyecto nuevo, por lo que cualquier idea de mejora es bienvenida.

Jonathan Hedley
fuente
15
Esto es fantástico, y me encanta el soporte del selector CSS. Apenas sé que estoy usando una biblioteca Java. :-)
William Pietri
17
Por favor no dejes de apoyar esto. ¡Esto es exactamente lo que hemos necesitado para analizar HTML usando Java del lado del servidor! ¡Esto es asombroso! Creé un proxy en solo un par de horas que modifica todos los enlaces src y href para que sean rutas completas al servidor de origen.
jmort253
77
Acabo de echarle un vistazo. Me gusta su interfaz y documentación. Es facil de entender. :)
emeraldhieu
55
¡Buen trabajo! Me puse en marcha en menos de 10 minutos.
Indrek Kõue
10
Increíble, esto es tan enfermo. Pude procesar una página HTML en minutos. MUCHAS GRACIAS POR ESTE GRAN TRABAJO.
Michael-O
32

Lo mejor que he visto hasta ahora es HtmlCleaner :

HtmlCleaner es un analizador HTML de código abierto escrito en Java. El HTML que se encuentra en la Web generalmente está sucio, mal formado y no es adecuado para su posterior procesamiento. Para cualquier consumo serio de dichos documentos, es necesario primero limpiar el desorden y llevar el orden a etiquetas, atributos y texto ordinario. Para el documento HTML dado, HtmlCleaner reordena elementos individuales y produce XML bien formado. Por defecto, sigue reglas similares que la mayoría de los navegadores web usan para crear el Modelo de Objetos del Documento. Sin embargo, el usuario puede proporcionar etiquetas personalizadas y un conjunto de reglas para el filtrado y el equilibrio de etiquetas.

Con HtmlCleaner puedes localizar cualquier elemento usando XPath.

Para otros analizadores html, vea esta pregunta SO .

tangenos
fuente
1
Debe manejar el proxy usted mismo, luego usar HtmlCleaner para procesar su transmisión en su lugar. => No es conveniente. T__T
kidnan1991
¿No sería HTMLTidy una mejor opción aquí? html-tidy.org
Troy Witthoeft
1
Similar rules that the most of web browsers use- Esto no es muy convincente
pguardiario 05 de