Puntos clave:
- Python puede ayudarte a automatizar la extracción de datos de facturas, pero no existe una solución mágica.
- Parseur aprovecha Python para extraer datos de facturas por ti.
- El PDF no es un formato de datos, sino una representación tipográfica de un documento en papel.
El formato PDF
El formato PDF es versátil y permite representar con precisión documentos en papel, como facturas, sin limitar su diseño. Proviene del mundo de la impresión y está diseñado para ser una representación digital de una página impresa. Esta flexibilidad ofrece una libertad significativa, permitiendo a los creadores de PDF expresarse y cumplir con diferentes normas y regulaciones.
Sin embargo, el reto aparece cuando los datos están bloqueados dentro de un PDF. La naturaleza libre y compleja del formato puede entrar en conflicto con el enfoque estructurado y coherente necesario para gestionar la gran cantidad de datos que una empresa procesa a diario.

¿Cuáles son los pasos para extraer datos de una factura?
Una factura es un documento que suele venir en formato PDF. Una factura formaliza una transacción entre un proveedor y un cliente, donde un producto o servicio se intercambia por una cantidad precisa de dinero. Estos son los pasos necesarios para extraer datos de este documento:
- Definir un esquema para los datos que deseas extraer de tus facturas
- Convertir tu factura de imagen a texto
- Extraer el texto de tu factura según tu esquema de datos
- Recopilar los datos extraídos

Define un esquema para los datos de tu factura
Las facturas provienen de diferentes proveedores y cada proveedor suele personalizar el aspecto de sus facturas. A pesar de esta diversidad en la forma, la sustancia de todas las facturas es básicamente la misma: necesitas un proveedor, un cliente, una referencia de factura, una fecha y una lista de artículos con una cantidad, descripción y costo asociados. Una excelente manera de empezar a definir el formato de tu factura sería tu software de contabilidad, ya que probablemente sea donde almacenarás los datos extraídos de la factura al final, ¿verdad? Si solo quieres un formato de datos que pueda cubrir todos los casos, te recomiendo el sitio web schema.org, que define convenientemente una serie de formatos de datos estándar del sector para muchas cosas, incluidas las facturas. Parseur define un esquema de datos predeterminado para tus facturas, pero puedes cambiarlo para adaptarlo a tu caso de uso renombrando los campos en tu buzón de facturas, como se explica aquí. Una vez que tu formato de datos esté definido, puedes convertir tu factura de imagen a texto.
Por ejemplo, puedes definir los siguientes campos para tu factura utilizando el formato JSON Swagger:
{
"InvoiceNumber": {
"type": "string",
"description": "El número de factura"
},
"InvoiceIssueDate": {
"type": "string",
"description": "La fecha de la factura"
},
"Items": {
"type": "array",
"description": "La lista de artículos de la factura",
"items": {
"type": "object",
"properties": {
"quantity": {
"type": "number",
"description": "La cantidad del artículo"
},
"description": {
"type": "string",
"description": "La descripción del artículo"
},
"unit_price": {
"type": "number",
"description": "El precio unitario del artículo"
},
"price": {
"type": "number",
"description": "El precio total del artículo"
}
}
}
}
}
Convierte tu factura de imagen a texto

Un archivo PDF puede contener una imagen. Por ejemplo, tu empleado puede hacer una foto rápida de una factura con la cámara de su smartphone. Luego la guarda como PDF y la envía a tu departamento de contabilidad. Tu equipo de contabilidad se encarga de extraer los datos de esta factura y, de alguna manera, ingresarlos en tu sistema de contabilidad sin ningún error. El siguiente paso es convertir esta imagen a texto utilizando un sistema de Reconocimiento Óptico de Caracteres. Uno de los sistemas OCR más populares es Tesseract. Tesseract está escrito en C y C++. Para utilizar Tesseract desde nuestro programa de Python, necesitamos emplear una binding como PyTesseract. Un binding es una manera de llamar a una biblioteca de software (en este caso, Tesseract) desde un lenguaje en el que no está escrita (en este caso, Python). Existen muchos sistemas de este tipo y sus resultados varían ampliamente dependiendo de la tecnología subyacente y la calidad del escaneo del documento. Parseur detecta de forma transparente si tu documento es una imagen y lo convierte automáticamente en texto, internamente. Una vez que los datos del documento están en forma de texto, están listos para ser extraídos.
Extrae el texto de tu factura según tu esquema de datos
Una vez que tu PDF está en formato de texto (o se puede buscar en él), puedes utilizar la biblioteca de Python pdftotext para obtener los datos del archivo PDF como texto. Aquí tienes un fragmento de código para extraer el texto de un archivo PDF:
import pdftotext
# Cargar tu factura
with open("invoice.pdf", "rb") as file_handle:
pdf = pdftotext.PDF(file_handle)
# Iterar sobre todas las páginas
for page in pdf:
print(page)
Nombra a este script convert_pdf_to_text.py y ejecútalo, obtendrás la factura como texto en la salida estándar.
Si quieres redirigir la salida a un archivo, puedes ejecutar:
$ python convert_pdf_to_text.py > invoice.txt
Ahora que ya tienes la factura en formato de texto, puedes extraer los datos que desees utilizando cualquier combinación de las siguientes técnicas:
- Puedes utilizar una expresión regular para extraer los datos que desees. Las expresiones regulares son una forma poderosa de extraer datos de un texto, pero también son muy frágiles. Si el formato de la factura cambia, tendrás que actualizar tu expresión regular. Además, las expresiones regulares no son muy buenas para extraer datos de tablas.
- Puedes usar un sistema de plantillas visuales, idealmente aprovechando el OCR Dinámico y el OCR Zonal. Esta es una forma más avanzada de extraer datos del texto. Es más robusta que las expresiones regulares, pero también más compleja de implementar.
- Finalmente, puedes utilizar un sistema de aprendizaje automático. El aprendizaje automático es una forma muy poderosa de extraer datos del texto, pero es la más compleja de implementar. Tendrás que entrenar tu sistema de aprendizaje automático con muchos datos, lo cual puede ser un proceso que requiera mucho tiempo. Además, los sistemas de aprendizaje automático no son perfectos y tendrás que revisar manualmente los resultados para asegurarte de que sean correctos.
Vamos a extraer datos de tu factura con el módulo de expresiones regulares re de Python. Aquí tienes un fragmento de código para extraer el número de factura de tu factura:
import re
# Cargar tu factura
with open("invoice.txt", "r") as file_handle:
invoice = file_handle.read()
# Extraer el número de factura
invoice_number = re.search(r"Invoice number: (\w+)", invoice).group(1)
print(invoice_number)
Nombra a este script extract.py y ejecútalo, obtendrás el número de factura en la salida estándar:
$ python extract.py
Y obtendrás algo como:
INV-1234
Ten en cuenta que esto solo funciona para las facturas que tienen una línea como Invoice number: INV-1234.
Si el formato de la factura cambia, tendrás que actualizar tu expresión regular.
Esto puede convertirse rápidamente en una pérdida de tiempo si tienes muchos formatos diferentes de facturas con los que lidiar.
Parseur puede ayudarte con eso.
Si decides utilizar el análisis de expresiones regulares, nuestro motor de plantillas te ayudará a gestionar esas expresiones, y también te damos acceso a una biblioteca de plantillas que hemos construido a lo largo de los años. Te permitimos seleccionar el mejor método de extracción para tu caso de uso: puedes utilizar expresiones regulares, pero también la construcción y coincidencia de plantillas visuales (motor OCR), o aprendizaje automático (motor de IA). Incluso puedes combinarlos para obtener lo mejor de cada uno. Parseur también te permite revisar los resultados de la extracción y corregirlos si hace falta. Este paso es muy importante ya que te ayudará a mejorar la precisión de la extracción con el tiempo.
Recopila los datos extraídos
Con Python, puedes iterar sobre los archivos de facturas en una carpeta determinada y extraer los datos de ellos. Supongamos que extraemos el número de factura y el importe total, y mostramos el resultado en formato CSV:
import os
import re
import pdftotext
# Iterar sobre todos los archivos PDF de la carpeta
for filename in os.listdir("invoices/"):
if not filename.endswith(".pdf"):
continue
# Cargar tu factura
with open("invoices/" + filename, "rb") as file_handle:
pdf = pdftotext.PDF(file_handle)
# Imprimir la cabecera de la columna CSV
print("InvoiceNumber,TotalAmount")
# Iterar sobre todas las páginas
for page in pdf:
# Extraer el número de factura
invoice_number = re.search(r"Invoice number: (\w+)", page).group(1)
total_amount = re.search(r"Total amount: (\w+)", page).group(1)
print(invoice_number, total_amount, sep=",")
Nombra a este script extract_to_csv.py y ejecútalo, obtendrás el número de factura y el importe total en la salida estándar,
que puedes redirigir a un archivo CSV que luego podrás abrir con tu software de hoja de cálculo favorito, como Excel:
$ python extract_to_csv.py > invoices.csv
En Parseur, una vez que hayas extraído los datos de tus facturas, puedes descargarlos todos como hoja de cálculo, o exportarlos directamente a tu software de contabilidad, utilizando la integración directa con webhook, Make, Zapier o Microsoft Power Automate. También puedes utilizar nuestra API para recuperar los datos en formato JSON.
Conclusión
Espero que este artículo te haya sido útil. En resumen, extraer datos de facturas con Python es un proceso complejo, pero se puede realizar, siempre y cuando tus facturas sean consistentes y tengas mucho tiempo para dedicarle. En caso de que tu tiempo sea limitado, puedes aprovechar la experiencia y el conocimiento acumulados en Parseur a lo largo de los años, para llegar a tu objetivo más rápido y extraer datos de todas tus facturas con flexibilidad y precisión.
Última actualización el






