Discussion:
[Python-es] Extraer datos de código html usando regex
unknown
2014-07-30 07:25:59 UTC
Permalink
Hola a todos.

Estoy intentando extraer información de imágenes de un código html (
http://en.wikipedia.org/wiki/Data_URI_scheme)

El formato sería el siguiente:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA" />

Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y los datos que vienen después de 'base64,' hasta el cierre
de comillas '"', es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA'.

Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de que mi regex me va a fallar en cuanto encuentre alguna cosa
más rara.

¿Alguien me podría indicar si el regex vale o si debería modificarlo
para que no me dé falsos positivos o acepte falsos negativos?

Muchas gracias por adelantado.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/84a15b55/attachment.html>
unknown
2014-07-30 08:33:13 UTC
Permalink
No hace falta que lo parsees a mano utiliza la libreria base64[1]


[1]http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior ejemplo) y
los datos que vienen después de 'base64,' hasta el cierre de comillas '"',
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy seguro de
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo para
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
unknown
2014-07-30 08:58:04 UTC
Permalink
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la
información está resuelto. Mi problema es como obtener la información para
poder transformarla.
Post by unknown
[1]http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y
Post by unknown
los datos que vienen después de 'base64,' hasta el cierre de comillas
'"',
Post by unknown
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de
Post by unknown
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo para
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/77b8b96b/attachment.html>
unknown
2014-07-30 09:52:33 UTC
Permalink
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la
información está resuelto. Mi problema es como obtener la información para
poder transformarla.
Así visto, no parece que te vaya a dar problemas, aunque se puede hacer más
fácil.

Alternativas:

1) Hacer que el módulo 're' extraiga la información necesaria

pat = re.compile('<img src="data:image/(.*?);base64,(.*?)"', re.DOTALL)
for (ext, data) in pat.findall(texto):
....

2) Utilizar algún módulo de scraping (eg: BeautifulSoup)

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)

for img in soup.find_all("img"):
src = img["src"]
...

Una vez que obtienes el 'src' puedes usar tú método con expresiones
regulares o, mucho mejor, urlretrieve como en el método siguiente:


3) Utilizar urlretrieve

Python2: from urllib import urlretrieve
Python3: from urllib.request import urlretrieve

import os
import shutil
from urllib import urlretrieve

local_file, headers = urlretrieve(src)
ext = headers.subtype
shutil.copy(local_file, "mifichero.{}".format(ext))



PD: espero que funcione tal cual, porque no he probado nada.
Post by unknown
Post by unknown
[1]http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y
Post by unknown
los datos que vienen después de 'base64,' hasta el cierre de comillas
'"',
Post by unknown
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de
Post by unknown
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo
para
Post by unknown
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
--
Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/cb5c601f/attachment.html>
unknown
2014-07-30 10:17:39 UTC
Permalink
Post by unknown
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la
información está resuelto. Mi problema es como obtener la información para
poder transformarla.
Así visto, no parece que te vaya a dar problemas, aunque se puede hacer
más fácil.
1) Hacer que el módulo 're' extraiga la información necesaria
pat = re.compile('<img src="data:image/(.*?);base64,(.*?)"', re.DOTALL)
....
Sí, esta es la opción clara, el código que he puesto es un poco/bastante
sucio ya que eran pruebas
Post by unknown
2) Utilizar algún módulo de scraping (eg: BeautifulSoup)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
src = img["src"]
...
No quiero dependencias de terceros para una pequeña funcionalidad.
Post by unknown
Una vez que obtienes el 'src' puedes usar tú método con expresiones
3) Utilizar urlretrieve
Python2: from urllib import urlretrieve
Python3: from urllib.request import urlretrieve
import os
import shutil
from urllib import urlretrieve
local_file, headers = urlretrieve(src)
ext = headers.subtype
shutil.copy(local_file, "mifichero.{}".format(ext))
Los ficheros serían locales generados con pandoc (IPython notebook)
Post by unknown
PD: espero que funcione tal cual, porque no he probado nada.
Gracias.
Post by unknown
Post by unknown
Post by unknown
[1]
http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y
Post by unknown
los datos que vienen después de 'base64,' hasta el cierre de comillas
'"',
Post by unknown
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de
Post by unknown
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo
para
Post by unknown
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
--
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/178aa3da/attachment.html>
unknown
2014-07-30 09:54:28 UTC
Permalink
En general, no usaria un regex para parsear html (o ningun tipo de XML) a
menos que estuviera 100% seguro de que lo que busco no va a cambiar en la
vida (siempre desde la misma fuenta y generado a maquina). Sino que
utilizaria un parser especializado para ello. en la propia libreria
estandar de python hay uno[1] y ademas hay muchas librerias especializadas
(como beautiful soup [2]) que posiblemente lo faciliten aun mas.

Asi en un vistazo rapido, podria fallarte si

alguien mete espacio de mas entre los atributos del tag
se incluyera algun otro atributo de img antes del data:el alt que tienes en
el ejemplo bien podria haber sido escrito antes del data
se usaran comillas simples para definir los valores del atributo (lo normal
es doble, pero es aceptable tambien)

[1]: https://docs.python.org/3/library/html.parser.html
[2]: http://www.crummy.com/software/BeautifulSoup/
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la
información está resuelto. Mi problema es como obtener la información para
poder transformarla.
Post by unknown
[1]http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y
Post by unknown
los datos que vienen después de 'base64,' hasta el cierre de comillas
'"',
Post by unknown
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de
Post by unknown
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo
para
Post by unknown
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/9b176084/attachment.html>
unknown
2014-07-30 10:19:59 UTC
Permalink
Post by unknown
En general, no usaria un regex para parsear html (o ningun tipo de XML) a
menos que estuviera 100% seguro de que lo que busco no va a cambiar en la
vida (siempre desde la misma fuenta y generado a maquina). Sino que
utilizaria un parser especializado para ello. en la propia libreria
estandar de python hay uno[1] y ademas hay muchas librerias especializadas
(como beautiful soup [2]) que posiblemente lo faciliten aun mas.
Asi en un vistazo rapido, podria fallarte si
alguien mete espacio de mas entre los atributos del tag
se incluyera algun otro atributo de img antes del data:el alt que tienes
en el ejemplo bien podria haber sido escrito antes del data
se usaran comillas simples para definir los valores del atributo (lo
normal es doble, pero es aceptable tambien)
Todo cierto!!

A priori, todo proviene de un proceso automatizado (aunque puede cambiar en
el futuro y romper las cosas).
Post by unknown
[1]: https://docs.python.org/3/library/html.parser.html
Voy a probar a ver si me resuelve la papeleta. Gracias. Aunque sigo
pensando que re es más potente y da mayor libertad, pero también es cierto
que es más esotérico y puede dar infinitos problemas (como los ejemplos que
has puesto)

Gracias.
Post by unknown
[2]: http://www.crummy.com/software/BeautifulSoup/
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la
información está resuelto. Mi problema es como obtener la información para
poder transformarla.
Post by unknown
[1]
http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior
ejemplo) y
Post by unknown
los datos que vienen después de 'base64,' hasta el cierre de comillas
'"',
Post by unknown
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
Post by unknown
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy
seguro de
Post by unknown
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo
para
Post by unknown
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140730/e8811391/attachment.html>
unknown
2014-07-31 12:38:59 UTC
Permalink
Dale una revisada a scrapy,
http://scrapy.org

Saludos!


Sent from my iPhone
Post by unknown
En general, no usaria un regex para parsear html (o ningun tipo de XML) a menos que estuviera 100% seguro de que lo que busco no va a cambiar en la vida (siempre desde la misma fuenta y generado a maquina). Sino que utilizaria un parser especializado para ello. en la propia libreria estandar de python hay uno[1] y ademas hay muchas librerias especializadas (como beautiful soup [2]) que posiblemente lo faciliten aun mas.
Asi en un vistazo rapido, podria fallarte si
alguien mete espacio de mas entre los atributos del tag
se incluyera algun otro atributo de img antes del data:el alt que tienes en el ejemplo bien podria haber sido escrito antes del data
se usaran comillas simples para definir los valores del atributo (lo normal es doble, pero es aceptable tambien)
Todo cierto!!
A priori, todo proviene de un proceso automatizado (aunque puede cambiar en el futuro y romper las cosas).
[1]: https://docs.python.org/3/library/html.parser.html
Voy a probar a ver si me resuelve la papeleta. Gracias. Aunque sigo pensando que re es más potente y da mayor libertad, pero también es cierto que es más esotérico y puede dar infinitos problemas (como los ejemplos que has puesto)
Gracias.
[2]: http://www.crummy.com/software/BeautifulSoup/
Post by unknown
No hace falta que lo parsees a mano utiliza la libreria base64[1]
Creo que no lo he explicado correctamente. El problema de transformar la información está resuelto. Mi problema es como obtener la información para poder transformarla.
Post by unknown
[1]http://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Post by unknown
Hola a todos.
Estoy intentando extraer información de imágenes de un código html
(http://en.wikipedia.org/wiki/Data_URI_scheme)
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA" />
Me interesa extraer la extensión de la imagen (png en el anterior ejemplo) y
los datos que vienen después de 'base64,' hasta el cierre de comillas '"',
es decir,
'iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAA'.
Tengo un ejemplo aquí,
https://gist.github.com/anonymous/75ab61f586c19e767cf0, pero estoy seguro de
que mi regex me va a fallar en cuanto encuentre alguna cosa más rara.
¿Alguien me podría indicar si el regex vale o si debería modificarlo para
que no me dé falsos positivos o acepte falsos negativos?
Muchas gracias por adelantado.
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140731/b097fc1c/attachment.html>
Loading...