2010-01-30 21 views
160

Codigo muchos analizadores. Hasta ahora, estaba usando el navegador sin cabeza HtmlUnit para el análisis y la automatización del navegador.¿Qué analizador HTML es el mejor?

Ahora, quiero separar ambas tareas.

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

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


EDIT:

Por 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".

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

+2

¿Qué significa "mejor"? ¿Quiere decir velocidad, facilidad de transición de la implementación actual, cumplimiento de los estándares 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 sintácticos que se ajusten mejor a sus necesidades. – aperkins

+2

Su afirmación 'Codigo muchos analizadores' no parece coincidir con la pregunta. ¿Quieres decir 'Necesito usar analizadores html mucho'? – blank

+8

Creo que esta pregunta es lo suficientemente específica como para estar exento del motivo cerrado "no constructivo". –

Respuesta

339

Autocomprobación: acabo de lanzar un nuevo analizador de HTML Java: jsoup. Lo menciono aquí porque creo que hará lo que está buscando.

Su truco de fiesta es una sintaxis selector CSS para encontrar los 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(); 

consulte el Javadoc Selector para obtener más información.

¡Este es un proyecto nuevo, por lo que cualquier idea para mejorar es bienvenida!

+12

Esto es fantástico, y me encanta el soporte del selector de CSS. Apenas sé que estoy usando una biblioteca Java. :-) –

+14

Por favor, no dejen 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

+6

Acabo de echarle un vistazo. Me gusta su interfaz y documentación. Es fácil de entender :) – Emerald214

28

El mejor que he visto hasta ahora es HtmlCleaner:

HtmlCleaner es de código abierto analizador HTML escrito en Java. El HTML que se encuentra en la Web suele ser sucio, mal formado e inadecuado para su posterior procesamiento. Para cualquier consumo serio de tales documentos, es necesario primero limpiar el desorden y llevar el orden a las etiquetas, atributos y texto ordinario. Para el documento HTML dado, HtmlCleaner reordena elementos individuales y produce XML bien formado. De forma predeterminada, sigue reglas similares que la mayoría de los navegadores web usan para crear el Modelo de Objetos de Documento. Sin embargo, el usuario puede proporcionar una etiqueta personalizada y un conjunto de reglas para filtrar y equilibrar etiquetas.

Con HtmlCleaner puede localizar cualquier elemento con XPath.

Para otros analizadores html, consulte this SO question.

+0

Debe manejar el proxy usted mismo y luego usar HtmlCleaner para procesar su transmisión. => No es conveniente. T__T – kidnan1991

+0

¿No sería HTMLTidy una mejor opción aquí? http://www.html-tidy.org/ –

+0

'Reglas similares que usan la mayoría de los navegadores web' - Esto no es muy convincente – pguardiario