Html Agility Pack se dio como la respuesta a un StackOverflow question hace algún tiempo, ¿sigue siendo la mejor opción? ¿Qué otras opciones se deben considerar? ¿Hay algo más ligero?¿El Html Agility Pack sigue siendo el mejor analizador HTML .NET?
Respuesta
Hay un spreadsheet con las comparaciones.
En resumen:
Rendimiento CsQuery vs HTML agilidad Pack and Fizzler junté algunas pruebas de rendimiento para comparar CsQuery a la única alternativa práctica que yo sepa (Fizzler, una extensión HtmlAgilityPack). Me probados contra tres documentos diferentes:
- el documento de prueba chisporroteo (alrededor de 11 k)
- la entrada de Wikipedia para "queso" (alrededor de 170 k)
- La sola página HTML 5 spec (alrededor 6 megabytes)
los resultados generales son:
- HAP es más rápida a la carga de la cadena de HTML en un n modelo de objeto. Esto tiene sentido, ya que no creo que Fizzler construya un índice (o , quizás construya solo uno relativamente simple). CsQuery toma desde 1.1 hasta 2.6x más para cargar el documento. Más sobre esto a continuación.
- CsQuery es más rápido para casi todo lo demás. A veces por factores de 10,000 o más. La única excepción es el selector "*", donde a veces Fizzler es más rápido. Para todas las pruebas, los resultados están completamente enumerados; este caso solo da como resultado que cada nodo en el árbol sea enumerado. Por lo tanto, esto no prueba tanto el motor de selección como la estructura de datos .
- CsQuery hizo un mejor trabajo al devolver los mismos resultados que un navegador. Cada uno de los selectores aquí se verificó con el mismo documento en Chrome utilizando jQuery 1.7.2 y los números coinciden con los devueltos por CsQuery. Esto es probablemente porque HtmlAgilityPack maneja las etiquetas opcionales (faltantes) de manera diferente. Además, nth-child no está implementado completamente en Fizzler, solo admite valores simples (no fórmulas).
Awesonium también debería formar parte de esta lista. ¡Es aún más genial, puede evaluar y ejecutar Javascript! – jessehouwing
http://www.awesomium.com/ – jessehouwing
Html Agility Pack es un analizador HTML, no un navegador sin cabeza, como lo es Awesonium. –
He usado esto antes, api bastante fácil de manejar. Creo que en el dominio C#/.Net, esta es una muy buena opción.
Hay una biblioteca de Java here. Se ve bastante bien, aunque no tengo experiencia personal.
Si usted está dispuesto a mirar fuera del mundo .NET
, la comunidad Python
SO recomienda Beautiful Soup, por ejemplo html-parser-in-python.
Beautiful Soup es un analizador de Python HTML/XML diseñado para proyectos de entrega rápida como screen-raspado.
HTML agilidad Pack fue dada como la respuesta a una pregunta StackOverflow hace algún tiempo
La agilidad paquete de HTML es todavía una solución excelente para analizar HTML.
sigue siendo el mejor opción?
¿Lo vale? bueno, todo depende de la tarea que tenga entre manos, pero en general creo que sí. Hay ocasiones en las que no es ideal, pero en general hará un gran trabajo.
¿Hay algo más ligero?
Usted podría intentar esto: http://csharptest.net/browse/src/Library/Html/ No es nada más que una de archivos fuente que machacar a HTML/XML a través de expresiones regulares completo a mano. Admite DOM y XPath ligeros, pero no mucho más. (help contents)
[Ejemplo]
public void TestParse() {
string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />";
var html = new HtmlLightDocument(notxml).Root;
Assert.AreEqual("html", html.TagName);
Assert.AreEqual(1, html.Attributes.Count);
Assert.AreEqual("a", html.Attributes["id"]);
Assert.AreEqual(1, html.Children.Count);
}
Alternativamente, puede utilizar el analizador directamente en lugar de construir un árbol DOM. Simplemente implemente la interfaz IXmlLightReader y llame al método estático XmlLightParser.Parse.
PD: Fue escrito para resolver un debate interno: que Regex puede analizar HTML! Desde entonces, hemos encontrado muchos usos, ya que es lo suficientemente liviano como para incrustarlo en cualquier lugar. Todavía hay formas de confundir el generador de jerarquías DOM, pero no he encontrado ningún HTML que el analizador no maneje.
Hay un 'ExampleAttribute' en uso en el texto. =) –
Cuando se trata de análisis de HTML, no hay comparación con la realidad. Este es un analizador C# port of the validator.nu. Esta es la misma base de código utilizada por los navegadores basados en Gecko (por ejemplo, Firefox). Hay repo parece un poco polvoriento, pero no te dejes engañar ... el puerto es excepcional. Simplemente ha sido pasado por alto. Lo integé en CsQuery hace aproximadamente un mes. Pasa todas las pruebas CsQuery (que incluyen la mayoría de las pruebas jQuery y Sizzle portadas a C#).
No conozco ningún otro analizador HTML5 escrito en C#, o incluso ninguno que se acerque ni remotamente a hacer un buen trabajo en términos de manejo de etiquetas faltantes, opcionales y no válidas. Sin embargo, esto no solo hace un gran trabajo: cumple con los estándares.
El repositorio al que he vinculado anteriormente es el original, incluye un contenedor básico que produce un árbol de nodos XML. Las versiones de CsQuery 1.3 y posteriores usan este analizador.
Me encantó el hecho de que la respuesta aceptada sea un enlace a un artículo en _your_ blog y un párrafo que cite _you_. +400 reputación por la victoria, Haha. –
mejor es un término muy relativo, para su pregunta, me imagino que está buscando una herramienta confiable, por lo que creo que esta característica debe tenerse en cuenta. Buscaría el apoyo y la fortaleza de la empresa que proporciona la herramienta. Es una sensación horrible cuando intenta ponerse en contacto con el soporte técnico para cualquier herramienta que utilice y la respuesta es que esta empresa ya no existe. Como HAP es mantenido por la comunidad de desarrolladores, preferiría confiar en ella.
También hay AngleSharp
AngleSharp es una biblioteca .NET que proporciona la capacidad de analizar escuadras hiper-textos basados como HTML, SVG y MathML. XML sin validación también es compatible con la biblioteca. Un aspecto importante de AngleSharp es que CSS también se puede analizar. El analizador se basa en la especificación W3C oficial. Esto produce una representación DOM HTML5 perfectamente portátil del código fuente dado. También las características actuales como querySelector o querySelectorAll funcionan para el recorrido de árbol.
- 1. HTML Agility Pack
- 2. Html Agility Pack ayuda
- 3. HTML Agility Pack HtmlDocument ¿Mostrar todo Html?
- 4. HTML Agility Pack Seleccionar nodos
- 5. C# Html Agility Pack (SelectSingleNode)
- 6. Html Agility Pack: Buscar Nodo de comentario
- 7. HTML Agility pack - tablas de análisis
- 8. HTML agility pack create new HTMLNode
- 9. ¿Puedo usar Html Agility Pack para esto?
- 10. Reemplazar una etiqueta div HTML InnerText usando HTML Agility Pack
- 11. Obtener contenido entre dos etiquetas HTML usando Html Agility Pack
- 12. HTML vs XHTML ¿sigue siendo importante?
- 13. Obtener enlaces en clase con html agility pack
- 14. Html Agility Pack/C#: cómo crear/reemplazar etiquetas?
- 15. HTML Agility Pack: seleccione nodos después del nodo específico
- 16. Extraer texto interno del nodo HTML BODY con Html Agility Pack
- 17. ¿Qué analizador HTML es el mejor?
- 18. Cómo agotar el tiempo de espera de una solicitud utilizando Html Agility Pack
- 19. ¿Cómo uso HTML Agility Pack para editar un fragmento de HTML?
- 20. Analizador HTML valida las etiquetas
- 21. Analizador HTML
- 22. ¿cuál es el mejor analizador html para java?
- 23. Mejor analizador HTML liviano para Delphi
- 24. ¿Cómo puedo usar HTML Agility Pack para recuperar todas las imágenes de un sitio web?
- 25. ¿Cómo obtener img/src o a/hrefs usando Html Agility Pack?
- 26. Etiquetas de la tira HTML Agility Pack NO EN la lista blanca
- 27. HTML Agility Pack: ¿cómo se puede agregar un elemento en la parte superior del elemento principal?
- 28. .net 4.0 sigue siendo compatible con asmx
- 29. Analizador HTML para GAE
- 30. Analizando html con el analizador SAX
La falta de un analizador HTML es una omisión flagrante de la biblioteca estándar de .NET. "Hacer una solicitud http y analizar la respuesta" es pan comido en la era de la web, el segundo programa que las personas escriben después de 'hola mundo'. –
@ColonelPanic, estos días con la mayoría de las páginas web que usan jscript para obtener los datos, necesita más que un analizador HTML. –
Consulte la revisión de diciembre de 2015 http://forcewake.me/how-to-parse-html-in-dotnet/, AngleSharp se mantiene activamente (https://dotnet.libhunt.com/project/anglesharp/vs/htmlagilitypack) –