Pregunta

¿Cómo reparo HTML con formato incorrecto usando C#?¡Una gran respuesta sería una muestra de HTML Agility Pack!


Estoy eliminando un sitio (para uso legítimo).El HTML del sitio está bien, pero hay algunos problemas molestos.

Una forma de hacerlo sería mediante expresiones regulares.Utilicé Expression Web para analizar los problemas y las expresiones regulares necesarias para corregirlos.Entonces, una forma sería utilizar una herramienta como RegexBuddy para generar código C# para estas expresiones regulares.

Sin embargo, la herramienta recomendada para procesar HTML con formato incorrecto en C# es la Paquete de agilidad HTML (TENER SUERTE).Además, solo he analizado un puñado de páginas y me temo que las páginas futuras contendrán patrones que aún no he resuelto, y odiaría ingresar al mantenimiento "buscar los errores en las próximas páginas y corregirlos". negocio.Entonces, si HAP ya tiene una solución sólida y siempre funcional, sería fantástico.El problema es que, excepto por algunas menciones aquí en SO, no pude encontrar ninguna documentación sobre cómo usar esta herramienta, excepto el archivo de ayuda de la API objeto por objeto.

Entonces, antes de gastar dinero y tiempo aprendiendo en RegexBuddy (sin versión de evaluación gratuita), o romperme los dientes con la documentación API de HAP, ¿existe una manera fácil de hacer esto?Una muestra de HAP ayudaría...:-)

¿Fue útil?

Solución 2

Lo tomé de las respuestas aquí: 1) Si usted está raspando una página web que no controlas, que siempre entra en un modo de mantenimiento en el que tiene que arreglar su rascador cada vez que el diseño de la página que se está raspando cambios. 2) Si usted está limitado a este sitio conocido, por qué no escribir su rascador para ajustar los problemas

Así que, si tengo que entrar en modo de mantenimiento, que debe ser lo más fácil posible. Por lo tanto, mi proceso es el siguiente:

  1. de Webius SWExplorerAutomation para detectar escenas en las páginas Web. La idea es que una escena es un conjunto de condiciones que se definen para IE. Cuando se carga una página Web, Internet Explorer trata de ver lo que se cumple conjunto de condiciones (por ejemplo - título de la página es "acceso a la cuenta", la página contiene un cuadro de texto "Login" un cuadro de texto "Contraseña"). Si se detecta un conjunto de condiciones que corresponden a una escena, IE informa de que se ha detectado la escena. Este modelo proporciona una capa de abstracción - Algunos cambios en la página web se puede traducir en cambios en el archivo de escena, ahorrando el código de tener que cambiar. Además, esto me protege de modelo orientado a eventos de IE: Tiene la palabra ". Escena Estoy evaluando este producto pero todavía no estoy seguro de que voy a utilizar, sobre todo porque la documentación es terrible Otra alternativa es Watin , y una razón más que todavía no he comprado SWEA es este artículo acusando a su autor de spamming contra Watin.
  2. Una vez que la página web ha sido adquirida, utilizo Expression Web para ejecutar comprobaciones de compatibilidad e identificar errores.
  3. RegexMagic para eliminar y corregir errores. Me encanta esta herramienta. Claro, a veces te hace asesina enojado porque no le permiten hacer cosas que deberían ser muy fácil, pero es una herramienta dulce, dulce, y la documentación es increíble.
  4. Finalmente, después de todos los errores que conozco han sido corregidos, utilizo HTML agilidad paquete para convertir a XHTML - cruzar los ts y los puntos sobre las es, por así decirlo:. Todo en minúsculas, cita a través de atributos, y así sucesivamente

Espero que esto ayude!

Avi

Otros consejos

¿me puede decir qué tipo de problemas molestos se trata?
pero usted no necesita utilizar expresiones regulares para limpiar el html, HAP le permitirá acceder a los elemtents de un HTML incorrecto usando consultas XPath.
y, básicamente, usted necesita aprender XPath para saber cómo obtener los elementos HTML que desee.
que realmente depende de la clase de HTML que está analizando el uso de HAP.
pero hay varias maneras de obtener los elementos.
como por id, clase o incluso se puede obtener el elemento que sigue a otro elemento que contiene un texto dado como "nombre:". por ejemplo
que pueda Goto escuelas W3 Xpath Tutorial para obtener un buen tutorial XPath

Regex no se puede utilizar para la limpieza de HTML. Hace http://tidy.sourceforge.net/ ayuda?

Si usted está raspando una página web que no controlas, que siempre entra en un modo de mantenimiento en el que tiene que arreglar su rascador cada vez que el diseño de la página que se está raspando cambios. No importa si usted está utilizando la expresión regular \ d + para obtener el gran número rojo de una página o si está usando un analizador DOM para obtener la tercera celda de la segunda fila de la tabla con los números de identificación para obtener la misma. Las expresiones regulares se rompe si el webmaster reemplaza el atributo de color con un atributo de clase. El analizador DOM rompe si el webmaster añade otra fila a la parte superior de la tabla.

Si usted está raspando las partes más grandes de una página web y desea incrustar en su propia página web, puede ser más fácil de obtener más de su deseo de cumplimiento de los estándares web y dejar que la cifra navegador cómo mostrar las cosas.

Dado que está utilizando HTML agilidad paquete y los conocimientos de los problemas que se producen, si está limitado a este sitio conocido, por qué no escribir su rascador para ajustar los problemas cuando se ha cargado el HtmlDocument.

es decir .: Si conoce el elemento siempre aparece después de la, insertar el elemento en la primera posición del niño de la etiqueta .....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top