Si tu script de Python procesa datos, registra errores o cuenta métricas, surge una pregunta lógica: ¿Y cómo se guarda el resultado?
El formato ideal es HTML. Es bonito, flexible y se abre en cualquier navegador. Y también es fácil de generar sobre la marcha.
En este artículo, te mostraremos cómo recopilar rápidamente informes HTML en Python. Sin marcos ni magia innecesaria, solo técnicas prácticas 💡

🧰 ¿Cuándo se necesita un informe HTML?
Después de procesar los datos CSV/Excel
Para mostrar gráficos y tablas
Al recopilar métricas (por ejemplo, en tareas cron)
Para registros de errores procesados correctamente
Para almacenar informes de proyectos
📊 Ventajas de HTML:
Fácil de visualizar
Compatible con estilos y gráficos
Se abre en cualquier dispositivo
🛠 Métodos de generación de HTML
Método | Adecuado para |
|---|---|
🔹 Ensamblaje manual de la línea | Casos simples |
🔹 Plantillas (Jinja2) | Plantillas flexibles |
🔹 Pandas | Tablas |
🔹 Bibliotecas (WeasyPrint, yattag) | Diseño avanzado |
🧪 Ejemplo 1: HTML simple manual
html = """
<!DOCTYPE html>
<html>
<head><title>Report</title></head>
<Body>
<h1> Sample report </ h1>
<p>Total users: 25</p>
</body>
</html>
"""
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
🧪 Ejemplo 2: Pandas .to_html() para tablas
import pandas as pd
df = pd.DataFrame({
"Name": ["Code", "Alice", "John"],
"Points": [85, 90, 78]
})
html_table = df.to_html(index=False)
html = f"""
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
table {{ border-collapse: collapse; width: 50%; margin: 20px auto; }}
th, td {{ border: 1px solid #ccc; padding: 8px; text-align: center; }}
th {{ background-color: #f2f2f2; }}
</style>
</head>
<body>
<h2 style="text-align:center;"> Score table </h2>
{html_table}
</body>
</html>
"""
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
🧪 Ejemplo 3: Jinja2 — plantillas con datos
from jinja2 import Environment, FileSystemLoader
data = {"users": [{"name": "Code", "score": 88}, {"name": "Lena", "score": 95}]}
env = Environment(loader=FileSystemLoader("templates"))
template = env.get_template("report.html")
html = template.render(users=data["users"])
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
Plantilla templates/report.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Отчёт</title>
</head>
<body>
<h1>Баллы пользователей</h1>
<ul>
{% for user in users %}
<li>{{ user.name }} — {{ user.score }}</li>
{% endfor %}
</ul>
</body>
</html>
📦 ¿Cómo añadir gráficos?
Si usas matplotlib o plotly, puedes guardar el gráfico como una imagen e insertarlo en el informe:
plt.savefig("chart.png")
html = """
<img src="chart.png" alt="График">
"""
💡 Dónde es útil un informe HTML
📊 Informes internos del equipo
🛠 Monitoreo de DevOps (a través de cron)
💼 Informes automáticos a los clientes
📁 Archivar resultados de scripts
🤖 ¿Puedo tener un PDF?
¡Sí! Usa WeasyPrint o pdfkit:
pip install weasyprintfrom weasyprint import HTML
HTML("report.html").write_pdf("report.pdf")
En el anexo Kodik encontrarás cursos de Python, HTML y otros.
Crea plantillas, visualiza datos y hazlo todo de forma atractiva, incluso si acabas de empezar.
Únete también a nuestro comunidades de Telegram 📬
💬 ¡Escríbenos si quieres ver un artículo sobre generación de PDF, informes interactivos o correos electrónicos automáticos con informes HTML!
