Python es el lenguaje rey de la automatización. Con Cerewro puedes generar scripts completos para procesar datos, generar informes, hacer web scraping, enviar emails automáticos y programar tareas. Sin escribir una línea de código, solo describiendo lo que necesitas.
Crea un script Python que lea "ventas_2025.csv", agrupe por vendedor y mes, calcule totales y variación respecto al mes anterior, y genere un Excel con gráfico de barras en "informe_ventas.xlsx"
import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.styles import Font, PatternFill
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def generar_informe(csv_path: str, output_path: str) -> None:
logger.info(f"Leyendo {csv_path}")
df = pd.read_csv(csv_path, parse_dates=['fecha'])
df['mes'] = df['fecha'].dt.to_period('M')
resumen = df.groupby(['vendedor', 'mes'])['ventas'].sum().reset_index()
resumen['variacion'] = resumen.groupby('vendedor')['ventas'].pct_change() * 100
wb = Workbook()
ws = wb.active
ws.title = "Resumen"
# ... escribir datos con formato ...
wb.save(output_path)
logger.info(f"Informe guardado en {output_path}")
if __name__ == "__main__":
generar_informe("ventas_2025.csv", "informe_ventas.xlsx")
Crea un script Python que extraiga nombre, precio y disponibilidad de los primeros 5 páginas de resultados de busqueda y guarde los datos en un CSV con marca de tiempo
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
import time
def scrape_productos(base_url: str, paginas: int = 5) -> pd.DataFrame:
productos = []
headers = {'User-Agent': 'Mozilla/5.0 ...'}
for pagina in range(1, paginas + 1):
resp = requests.get(f"{base_url}?page={pagina}", headers=headers, timeout=10)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, 'html.parser')
for item in soup.select('.product-card'):
productos.append({
'nombre': item.select_one('.name').text.strip(),
'precio': item.select_one('.price').text.strip(),
'disponible': 'out-of-stock' not in item.get('class', []),
'timestamp': datetime.now().isoformat()
})
time.sleep(1) # respetar el servidor
return pd.DataFrame(productos)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import os
def enviar_informe(destinatario: str, archivo: str, asunto: str) -> None:
msg = MIMEMultipart()
msg['From'] = os.getenv('EMAIL_FROM')
msg['To'] = destinatario
msg['Subject'] = asunto
msg.attach(MIMEText("Adjunto encontrarás el informe.", 'plain'))
with open(archivo, 'rb') as f:
part = MIMEBase('application', 'octet-stream')
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename={os.path.basename(archivo)}')
msg.attach(part)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as s:
s.login(os.getenv('EMAIL_FROM'), os.getenv('EMAIL_PASS'))
s.send_message(msg)
schtasks /create /tn "InformeDiario" /tr "python C:\scripts\informe.py" /sc DAILY /st 08:00 /ru SYSTEM
C:\scripts\.venv\Scripts\python.exe C:\scripts\informe.py. Así te aseguras de usar las dependencias correctas independientemente del Python global del sistema.