Los dos parsers que he encontrado en python usan además DOM, por lo que no hay nada SAX (o en gerga CSS SAC).
Esto significa que alguien con interés, ganas y tiempo puede hacer algo útil para la comunidad del software libre...
Pero lo que mas me sorprende es no haber encontrado nada ni en python-es, ni en comp.lang.python.
Antes de entrar a comentar los parsers, comentar que CSS tiene tres versiones, CSS1, CSS2 y CSS3 (en desarrollo).
Todos los parsers implementan CSS1 y por lo que he podido ver CSS2 parcialmente.
Bueno al lio... los parsers de python encontrados son:
- cssutils (beta) y
- TechGame Framework CSS Parser and Engine (alpha)
Si no nos convencen ninguno de los dos, no nos va a quedar mas remedio que implementar unos bindings a alguno existente en C (vamos lo normal en python... no lo vamos a hacer de uno implementado en Java; ummm, aunque no he dicho un disparate... siempre se puede usar jython ;)). En C he encontrado:
- El SAC de w3.org.
- Libcroco: parser SAC y CSSOM like api para gnome.
Finalmente se puede intentar usar el parser que use algún browser (implementando el binding correspondiente, claro). Entre los disponibles parece que el candidato más lógico sería usar del del firefox, Gecko.
Mas info sobre el parser de CSS de Gecko aquí.
11 comentarios:
La única cosa rara que me ha pasado en la instalación de cssutils es que necesita ez_setup.py.
Se instala como un paquete egg.
El parser SAC de w3.org es muy basico, es codigo fuente puro y duro, sin documentación ni nada.
El parser libcroco, tiene como dependencia gtk+.
libcroco logré bajarmelo no me acuerdo de donde, porque en la pagina principal sólo aparecia como ftp.
Buscand en la web.
Depende de glib (que a su vez tiene dependencias).
Para bajarnos la ultima versión liberada de glib podemos hacerlo con: svn co http://svn.gnome.org/svn/glib/branches/glib-2-10
O si queremos el trunk:
svn co http://svn.gnome.org/svn/glib/trunk
Eso si, todavia no he logrado compilar glib. Info sobre utilidades necesarias para la compilación aqui.
Sobre glib. Es necesario bajarsela por ftp. La del SVN no tiene el fichero configure.
Tras estar hoy un buen rato intentandolo no he logrado compilar libcroco.
Sobre Gecko...
He estado echando un vistazo al codigo fuente y no he logrado localizar ningún modulo para tratamiento de CSS. Habría que preguntar....
En principio no lo veo...
Con respecto a cssutils, el único pero posible es que nos resulte lento. Por lo demas va muy bien.
En teoria los tests se pueden probar simplemente ejecutando el comando: 'python setup.py test'. Pero al menos en la distribución que me he bajado no funciona (0.9.1b3).
Para lanzar los tests, podemos irnos en la distribución al directorio de tests (../src/cssutils/tests) y ejecutarlos directamente, por ejemplo asi: 'for i in test_*.py; do echo $i >> kk; python $i >> kk 2>&1; done'.
Un detalle sobre los tests de cssutils. Salen trazas de error al ejecutarlos. Por lo visto es normal. Lo que nos tiene que importar es si el test es ok, o no.
Y una cosilla mas, cssutils tiene un paquete, encutils, a tener en cuenta.
La funcion principal es getEncodingInfo que devuelve informacion sobre le encoding. Esta infomracion se extrae del elemento pasado: headers de HTTPResponse, XML declaration y lementos meta X/HTML.
Resumeinto podemos pasar un HTTPResponse o texto.
Actualizacion sobre SAC: no implementa el parser, sino un interfaz. Se sepa...
Y un par de links sobre libroco:
Se puede descargar de aquí.
Y aquí muestran dependencias que tiene.
Publicar un comentario