Hace poco me encontré con el problema de añadir a todas las etiquetas de imágenes del blog los atributos de tamaño (Altura y anchura). Hacerlo a mano era inviable debido a la cantidad de artículos. Así que pensé que una buena forma sería hacerlo con python. El razonamiento es el siguiente:
- Iterar sobre todos los artículos del blog.
- Buscar en cada artículo todas las etiquetas
img
. - Acceder a la ruta donde se encuentra la imagen (El atributo
src
). - Leer la imagen y extraer su tamaño.
- Escribir el tamaño de la imagen en los atributos
width
yheight
de la imagen.
Para llevar a cabo la tarea he usado el módulo BeautifulSoup
. A continuación se muestra el código comentado:
#!/bin/python
from BeautifulSoup import BeautifulSoup
from os.path import basename, splitext
from PIL import Image
import glob
# Ruta a la carpeta que contiene los ficheros, en este caso
# cualquier fichero markdown
path = "/ruta/ficheros/*.md"
# Iteramos para cada fichero
for fname in glob.glob(path):
# Lo abrimos
f = open(fname)
# Creamos un objeto BeautifulSoup para parsear el fichero
soup = BeautifulSoup(f)
f.close()
# Para cada etiqueta de imagen que encontremos en el fichero
for img in soup.findAll('img'):
if img != None:
try:
if img['src'].startswith("/assets") == True:
# Abrimos la imagen
pil = Image.open("/ruta/carpeta/imagenes" + img['src'])
# Obtenemos su tamaño
width, height = pil.size
# Modificamos la etiqueta HTML para añadirle el tamaño
img['width'] = str(width) + "px"
img['height'] = str(height) + "px"
except KeyError:
pass
# Guardamos el fichero modificado
with open(fname, "wb") as file:
file.write(str(soup))
Espero que os resulte útil, he subido el script a github.
Referencias
- How to save back changes made to a HTML file using BeautifulSoup in Python? | stackoverflow.com
- Replace SRC of all IMG elements using Parser | stackoverflow.com
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.
Quizá también te interese leer...
- Crear Una Lista De Listas De Forma Eficiente en Python
- Crear formularios en Django a partir de un Modelo con ModelForm
- Cómo resolver sistemas de ecuaciones lineales con dos incógnitas en Python
- Generar listas de reproducción de una determinada duración con Python
- Introducción a las expresiones regulares en python