2009-10-06 12 views
9

Necesito tomar algo de contenido de una página HTML (XHTML válida). Agarro la página usando curl y la guardo en la memoria.Parse html usando C

Jugué con la idea de usar regex con la biblioteca PCRE, pero simplemente no encontré ningún ejemplo para usarlo con C. Luego pasé a analizar analizadores HTML y nuevamente no hay una buena selección. Todo lo que pude encontrar fue un módulo escaso documentado para libxml llamado HTMLparser.

¿Hay alguna alternativa? Si no, ¿hay ejemplos de lo que ya encontré?

+0

enlace obligatorio a la advertencia contra el análisis de HTML con expresiones regulares: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 # 1732454 – moopet

+0

Consulte el siguiente enlace Anoté toda la solución utilizando la biblioteca libxml2 C para la plataforma de Windows. http://stackoverflow.com/questions/5465965/how-can-libxml2-be-used-to-parse-data-from-xml/38826052#38826052 –

Respuesta

4

Desea utilizar HTML tidy para hacer esto. La página de Lib Curl tiene un código fuente para que empieces. Documentos que atraviesan el árbol dom. No necesita un analizador xml. No falla en html mal formateado.

http://curl.haxx.se/libcurl/c/htmltidy.html

+0

Esto es lo que terminé implementando. No sentí la necesidad de extraer un analizador de xml hambriento solo para tomar una sola línea de texto. Gracias –

2

Si desea analizar XML utilizando C, entonces, con mucho, la mejor manera de proceder es utilizar la biblioteca LibXML. La página principal está en http://xmlsoft.org/. Además de sus descargas, tienen explícita code examples que muestran específicamente cómo manejar parsing. Sé de hecho que puede obtener versiones precompiladas para Mac y Windows, la mayoría de las distribuciones de Linux y BSD ya lo han incluido, y puede compilar desde la fuente si lo desea.

+1

Buena elección, pero se ahogará con html roto, así que ' corríalo libtidy primero. –

6

Yo usaría libhtmltidy + cualquier analizador xml como expat o libxml. Depende de lo que estás buscando.

+0

Just for Reader information ... Los analizadores HTML son software para el análisis automatizado del lenguaje de marcado de hipertexto (HTML). Tienen dos propósitos principales: Recorrido de HTML: ofrece una interfaz para que los programadores accedan y modifiquen fácilmente el "código de cadena HTML". Ejemplo canónico: analizadores DOM. HTML clean: para corregir HTML no válido y para mejorar el diseño y el estilo de sangría del marcado resultante. Ejemplo canónico: HTML Tidy. –

+0

Consulte https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers página –

0

Google creado recientemente una biblioteca C99 puro para análisis de HTML, HTML5 específicamente. Es fácil de usar en cualquier programa C y se desarrolla activamente.

https://github.com/google/gumbo-parser

+0

La mayoría de los cambios son de hace 2 años, el estándar HTML5 ya se ha definido, ¿no es el código un poco desactualizado? –