Descargas masivas de archivos INEGI desde linux

Cuando es necesario descargar de manera masiva los archivos con los que vamos a trabajar y el descargador es un ejecutable de windows y no quieres instalarte wine o una maquina virtual… NA!!!

En nuestro ejercicio queremos descargarnos todos los paquetes de DENUE (Directorio estadístico nacional de unidades económicas) con la URL https://www.inegi.org.mx/app/descarga/default.html.

Nos ubicamos en el link denominado “Descarga todos los archivos” en el caso del DENUE y básicamente de cualquier otra consulta de INEGI. Esto nos descarga un archivo ZIP “DescargaMasiva_1222025_174320.zip”. una vez que lo exploramos, observamos que contienen lo siguiente:

Vamos a ignorar el ejecutable y el texto. Solo extraemos el “DescargaMasivaOD.xml” se observara de esta manera:

Ya en este momento nos ponemos a descargar uno por uno a mano, o lo hacemos a la linux:

Abrimos nuestro editor de texto favorito y nos creamos un script zsh.

#!/bin/zsh

######################################################
# Autor: E. J. Molina <mailto:aej0170@gmail.com>
# Herramienta diseñada para descargar Masiva de las
# Consultas de INEGI 
######################################################

# Verificar si wget está instalado
if ! command -v wget &> /dev/null; then
  echo "Autor: aej0170@gmail.com"
  echo "wget no está instalado. Puedes instalarlo usando:"
  echo "  sudo apt update && sudo apt install wget  # Para distribuciones basadas en Debian"
  echo "  sudo dnf install wget  # Para distribuciones basadas en Fedora"
  echo "  sudo pacman -S wget  # Para distribuciones basadas en Arch"
fi

# Verifica si se pasó un archivo XML como argumento

if [[ $# -ne 1 ]]; then
    echo "Autor: aej0170@gmail.com"
    echo "Uso: $0 DescargaMasivaOD.xml"
  exit 1
fi

xml_archivo=$1

# Verifica si el archivo existe
if [[ ! -f $xml_archivo ]]; then
  echo "Error: Archivo no encontrado"
  exit 1
fi

# Extrae los enlaces del tag <Archivo> y descarga con wget
grep -oP '(?<=<Archivo>).*?(?=</Archivo>)' "$xml_archivo" | while read -r url; do
  if [[ -n "$url" ]]; then
    echo "Descargando: $url"
    wget -nc  -c --show-progress  "$url"
  fi
done

nos descargamos el script y le damos permisos de ejecución (# chmod +x )

lo executamos (# ./DescargaMasivaApp.sh DescargaMasivaOD.xml)

Este script tiene varias características importadas de wget que es el que descarga el archivo

wget -nc  -c -q --show-progress  "$url"

Explicando las etiquetas de wget:

-c o –continue:
Reanuda automáticamente descargas interrumpidas si el archivo existe parcialmente en el directorio.

-nc o –no-clobber:
Evita descargar el archivo si ya existe una versión completa en el directorio.

–show-progress:
Muestra una barra de progreso detallada durante la descarga.

-q
Silencia wget en su salida

El nombre del archivo que se descarga tiene codificada la hora y el día en que se descargaron. Evidentemente no sera el nombre del archivo el mismo cuando realices la practica.

En conclusión

Este método sustituye la función que tiene el Ejecutable dentro del empaquetado. Requiere tener instalado previamente la utilidad wget. Espero que la herramienta te sea de utilidad

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *