El parseo de documentos consiste en extraer datos estructurados de archivos de distintos formatos y llevarlos a una forma cómoda para el procesamiento posterior: cargarlos en una base de datos, volcarlos a una tabla, pasarlos a la analítica o a otro sistema. En la práctica, la tarea casi nunca se limita a un único formato: la lista de precios llega en Excel, la exportación del CRM en CSV, el contrato en PDF, los datos de un servicio externo en JSON o XML, y el mapa del sitio que hay que recorrer antes de recopilar los datos, en formato sitemap.
Este artículo es un panorama general. Repasamos la lógica de trabajo con cada tipo de archivo, mostramos ejemplos mínimos en varios lenguajes y enlazamos a los materiales especializados donde cada formato se analiza en detalle. Si necesita una solución a medida en lugar de investigar por su cuenta, ofrecemos servicios de extracción y procesamiento de datos llave en mano.
En qué consiste el parseo de cualquier documento
Con independencia del formato, el proceso consta casi siempre de tres pasos. Primero va la lectura: obtener los bytes del archivo desde una carpeta local, por URL o desde un flujo. Después, el análisis de la estructura: convertir el contenido «en bruto» en objetos del lenguaje de programación: un árbol de nodos, una lista de líneas, una tabla. Y, por último, la extracción y normalización: seleccionar los campos necesarios, limpiar la basura, ajustar los tipos (fechas, números, divisas) y volcar el resultado.
La dificultad se desplaza entre estos pasos según el formato. En los datos estrictamente estructurados, como JSON o XML, el trabajo pesado ya está hecho: existe una gramática formal y el parser construirá el árbol de forma garantizada. En los formatos poco estructurados, como el PDF, los logs o los archivos de texto arbitrarios, la mayor parte del esfuerzo recae precisamente en el tercer paso: los datos hay que «sacarlos» con heurísticas y expresiones regulares.
Formatos de datos estructurados
JSON
JSON es el formato de intercambio de datos más extendido entre servicios y la respuesta principal de la mayoría de las APIs. Se proyecta directamente sobre las estructuras del lenguaje: un objeto se convierte en un diccionario (o array asociativo) y un array, en una lista. Por eso el parseo se reduce a una llamada de la biblioteca estándar, y el trabajo de verdad empieza después, al recorrer las estructuras anidadas. El análisis detallado, con el manejo del anidamiento, la lectura en flujo de archivos grandes y los errores típicos, está en el artículo sobre el parseo de JSON.
import json
with open("data.json", encoding="utf-8") as f:
data = json.load(f)
print(data["items"][0]["name"])XML
XML se organiza como un árbol de nodos con etiquetas, atributos y texto. Es más estricto y verboso que JSON, pero sobre él se han construido multitud de estándares sectoriales: exportaciones de marketplaces, formatos bancarios, intercambio industrial de datos. Para analizarlo se usa o bien el enfoque en flujo (cuando el archivo es grande), o bien la construcción del árbol en memoria con navegación mediante XPath. Los detalles, las bibliotecas y los ejemplos están en el material sobre el parseo de XML.
RSS y Atom
RSS es un caso particular de XML con un esquema fijo para feeds de noticias, blogs y pódcasts. Técnicamente puede analizarse con cualquier parser XML, pero en la práctica resultan más cómodas las bibliotecas especializadas, que devuelven directamente la lista de entradas con titulares, fechas y enlaces. Más detalles en el artículo sobre el parseo de RSS.
Sitemap (mapa del sitio)
El sitemap es otro formato XML: describe la lista de URL de un sitio para los buscadores y los rastreadores (crawlers). Antes de recopilar datos de un sitio grande, el mapa casi siempre se recorre en primer lugar: proporciona un listado ya hecho de páginas, a veces con fechas de actualización y prioridades, y evita el rastreo a ciegas de los enlaces. Cómo leer mapas normales y anidados (sitemap index), tener en cuenta lastmod y trabajar con las versiones gzip, en el artículo sobre el parseo de sitemaps.
Formatos tabulares
CSV
CSV es un formato de texto simple: «filas y columnas separadas por comas (u otro carácter)». Pese a su aparente sencillez, es aquí donde surgen más trampas prácticas: separadores distintos, comillas dentro de los valores, saltos de línea en las celdas, codificaciones y BOM. Por eso, un análisis casero «con split por comas» es casi siempre un error: hace falta un lector de CSV completo. El repaso de estos escollos está en el artículo sobre el parseo de CSV.
import csv
with open("prices.csv", encoding="utf-8", newline="") as f:
for row in csv.DictReader(f):
print(row["sku"], row["price"])Excel (XLSX, XLS)
Excel ya no es texto, sino un formato binario (o, en el caso de XLSX, empaquetado en ZIP) con hojas, fórmulas, formatos de celda y áreas combinadas. Aquí no basta con leer el archivo como líneas: se necesitan bibliotecas que entiendan la estructura interna del libro. Con frecuencia conviene convertir primero la lista de precios o el informe original a CSV y procesarlo después de manera uniforme. Cómo leer hojas, celdas combinadas y valores de fórmulas, en el material sobre el parseo de Excel.
Formatos poco estructurados
PDF es un formato para imprimir y visualizar, no para almacenar datos, y por eso es el más difícil a la hora de extraer información de forma fiable. El texto de un PDF puede ser «real» (seleccionable) o una imagen que exige OCR; las tablas no se guardan como tablas, sino como un conjunto de líneas y bloques de texto con coordenadas. Qué bibliotecas extraen texto, cuáles extraen tablas y cuándo no queda más remedio que reconocer imágenes, todo eso está en el artículo sobre el parseo de PDF.
HTML
HTML se parece estructuralmente a XML, pero en la práctica casi siempre está «sucio»: etiquetas sin cerrar, maquetación sobrante, contenido dinámico. Es el formato principal en la recopilación de datos de sitios web: extracción de texto, enlaces, precios y contactos. El repaso de los parsers, los selectores CSS y el trabajo con enlaces, en el artículo sobre el parseo de HTML.
TXT y logs
Los archivos de texto arbitrarios (.txt) y los logs de servidores no tienen esquema común alguno: su formato lo define quien creó el archivo. Aquí las herramientas principales son la lectura línea a línea y las expresiones regulares. Los logs son un caso tan particular e importante que les dedicamos un artículo aparte; el enfoque general del análisis de texto se describe en el material sobre el parseo de TXT.
Qué lenguaje y stack elegir
No existe una elección «correcta» rígida, pero sí una práctica consolidada. Python es el estándar de facto para el parseo: bibliotecas ricas para todos los formatos (pandas, lxml, openpyxl, pdfplumber) y un mínimo de código. JavaScript/Node.js resulta cómodo cuando el parseo va integrado en un proyecto web o hace falta renderizar contenido dinámico en el navegador. PHP se elige a menudo si los datos van a parar directamente a un sitio construido sobre ese stack. Go se usa por su velocidad y por el procesamiento en paralelo de grandes volúmenes. En cada artículo especializado incluimos ejemplos en varios lenguajes para que pueda tomar el más cercano a su proyecto.
Todos estos stacks tienen algo en común: el formato dicta la biblioteca, y no al revés. Por eso conviene empezar por determinar con exactitud el formato de los archivos de origen y pasar después al artículo correspondiente: JSON, XML, RSS, sitemap, CSV, Excel, PDF, HTML, TXT o logs.