The LinkedIn Job Analyzer provides flexible data export functionality, allowing users to save extracted job data and AI insights in multiple formats. The export system uses the Factory Pattern to instantiate the appropriate exporter based on user preference.
from abc import ABC, abstractmethodfrom typing import Dictclass DataExporter(ABC): """Interfaz base para todos los exportadores de datos.""" @abstractmethod def exportar(self, datos: Dict, ruta_salida: str) -> str: """Debe retornar la ruta donde se guardó el archivo.""" pass
The JSONExporter saves data in a human-readable JSON format with proper UTF-8 encoding for international characters.
json_exporter.py:5-21
class JSONExporter(DataExporter): """ Exportador responsable de guardar los diccionarios de datos en formato .json. """ def exportar(self, datos: Dict, ruta_salida: str) -> str: """ Guarda los datos en un archivo JSON usando la ruta proporcionada. """ # Abrimos el archivo en modo escritura ('w') con soporte para caracteres latinos (utf-8) with open(ruta_salida, 'w', encoding='utf-8') as f: # ensure_ascii=False permite guardar acentos y ñ correctamente # indent=4 le da un formato legible para humanos json.dump(datos, f, ensure_ascii=False, indent=4) print(f"[DATOS] Archivo JSON guardado con éxito: {ruta_salida}") return ruta_salida
The ExcelExporter uses pandas to create multi-sheet Excel workbooks with structured data.
excel_exporter.py:5-45
class ExcelExporter(DataExporter): """ Exportador responsable de guardar los diccionarios de datos en formato .xlsx usando Pandas. """ def exportar(self, datos: Dict, ruta_salida: str) -> str: """ Crea DataFrames de Pandas y los guarda en múltiples hojas de un Excel. """ # 1. Crear DataFrame para la lista de habilidades df_habilidades = pd.DataFrame({ 'Número': range(1, len(datos['habilidades']) + 1), 'Habilidad': datos['habilidades'] }) # 2. Crear DataFrame para el resumen general de la oferta df_info = pd.DataFrame({ 'Campo': [ 'Término de Búsqueda', 'Título de la Oferta', 'URL', 'Fecha de Extracción', 'Total de Habilidades' ], 'Valor': [ datos.get('termino_busqueda', 'N/A'), datos.get('titulo_oferta', 'N/A'), datos.get('url', 'N/A'), datos.get('fecha_extraccion', 'N/A'), len(datos.get('habilidades', [])) ] }) # 3. Guardar en Excel creando diferentes pestañas (hojas) # Usamos openpyxl como motor (engine) para escribir el .xlsx with pd.ExcelWriter(ruta_salida, engine='openpyxl') as writer: df_info.to_excel(writer, sheet_name='Información General', index=False) df_habilidades.to_excel(writer, sheet_name='Habilidades', index=False) print(f"[DATOS] Archivo Excel guardado con éxito: {ruta_salida}") return ruta_salida