Descargar libros de texto gratuitos o cualquier libro similar.

Me dio gusto ver que los libros de texto gratuitos están disponibles para su consulta en internet. En un principio creí que se podían descargar en formato PDF pero no existe esta opción.

Y luego me dije a mi mismo … Mi mismo ¿Y si descargas las páginas del libro y generas un PDF a partir de esas imágenes?

Así que puse manos a la obra y elaboré un programita en bash para descargar los libros de texto gratuitos o cualquier libro que se presente en un formato similar.

A descargar las imágenes del libro.

Lo primero es abrir un libro.

En este enlace están disponibles los libros de primaria:

Y en este otro los de secundaria:

Inspección de la página donde se encuentra el libro para obtener la carpeta donde se almacenan las imágenes.
De esta forma encontramos la carpeta en la que están almacenadas las imágenes del libro.

Para ejemplo práctico elegí el Libro de matemáticas de primer año. Si inspeccionamos la página del libro verán que las imágenes están almacenadas en la misma carpeta y las imágenes tienen como nombre un número de 3 dígitos de este modo.

https://libros.conaliteg.gob.mx/20/c/P1MAA/000.jpg

Así que es relativamente fácil hacer un script en Bash para que haga un barrido y con wget descargar una por una las páginas del libro.

#!/bin/bash

# Descargar libro de texto
for i in {000..300}
do
  wget https://libros.conaliteg.gob.mx/20/c/P1MAA/$i.jpg
done

En realidad no se la cantidad de hojas disponibles, así que elegí un número alto. Cuando el script empiece a informar errores en las descargas sabré que ya no hay más hojas disponibles.

Descargando ando …

Ahora a encuadernar las hojas sueltas con un PDF

El archivo PDF nos va a servir para guardar todas las imágenes en un solo archivo. Esto no es algo nuevo para mí, ya había hecho algo similar en Convertir todas las imágenes de un directorio a PDF.

gm convert *.jpg -adjoin -compress JPEG libro.pdf

Si agregamos esta instrucción al final del script en bash, todo se hace en una sola ejecución. Para este ejemplo, el archivo resultante quedó en 49.7 MB ¡Excelente!

El resultado final, un pdf que contiene todas las imágenes del libro.
Este es el resultado, un pdf que contiene todas las imágenes del libro.

Enseñándole a leer al PDF.

Todo estaría bien hasta este punto, si no fuera por un comentario en Twitter de Jorge Vázquez en el que menciona que el hace algo parecido con otras herramientas y además le aplica Reconocimiento óptico de caracteres (OCR).

Y no me quise quedar atrás. El OCR le agrega una capa de texto al PDF que facilita las búsquedas. Ahora necesitaba un programa que literalmente leyera todas las hojas del libro que acabo de crear y agregara esa información al archivo PDF.

Me encontré con un programa con el nombre más simpático que puede uno encontrar: ocrmypdf y hace exactamente lo que estaba buscando. Así que después de hacer esto:

ocrmypdf -l spa libro.pdf libro-con-ocr.pdf
Con el OCR se pueden hacer búsquedas o copiar textos.
Realizar búsquedas, copiar texto ¡No problema!

Ya tenía un PDF al que le podía hacer búsquedas o seleccionar y copiar textos, claro con algunas imprecisiones ya que el OCR no es perfecto.

Conclusiones.

El mismo procedimiento se puede aplicar a todos los libros de texto (o eso espero) o a cualquier libro con una presentación similar.

Espero que esta información para descargar libros de texto gratuitos les sea de utilidad, se que es algo técnico pero a lo mejor sirve de inspiración para algo más elaborado.

¡Bendita nueva normalidad!

wget no se pudo resolver la dirección del equipo

Ayer como tarea rutinaria intentaba actualizar mi distribución de Manjaro cuando me di cuenta de varios mensajes de error extraños.

Después de moverle un rato a la terminal deduje que el problema era wget que por alguna extraña razón no lograba resolver adecuadamente las direcciones de los dominios. Continuamente recibía mensajes de error similares a este:

wget: no se pudo resolver la dirección del equipo "dominio.com"

El problema era serio ya que no podía resolver ningún dominio, por lo tanto no podía descargar los archivos de actualización de Manjaro o instalar cualquier paquete. Continue reading “wget no se pudo resolver la dirección del equipo”

Pacman con wget

 

Estoy trabajando en mi computadora AO751h, ahora con Manjaro Openbox y esto requiere hacer varios ajustes. Pero tuve varios problemas al actualizar los paquetes.

Sobre todo cuando quise instalar el Kernel CK. Por alguna razón se perdía la conexión y al no tener otro repositorio pacman terminaba programa sin terminar la instalación del paquete.

Afortunadamente se puede cambiar el programa que se encarga de hacer las descargas de los paquetes que requiere pacman con wget.

Me gustó wget porque se comporta muy bien al reiniciar descargas parciales además de que no hace cosas raras, lo que hace lo hace muy bien.

Primero instalar wget.

Claro que si no se tiene instalado wget lo primero que hay que hacer es instalarlo.

sudo pacman -S wget

Es un programa pequeño así que no es complicado de instalar.

Pacman ahora con wget

Para indicarle a pacman que use wget es necesario editar su archivo de configuración:

sudo geany /etc/pacman.conf

Openbox tiene instalado por default el editor Geany pero es obvio que pueden usar el que tengan instalado nano, vim, gedit, leafpad, etc.

Descomentamos la línea que dice XferCommand y tecleamos tal como sigue.

XferCommand = /usr/bin/wget -c --passive-ftp -c %u

He visto que en versiones más recientes de Manjaro esta comentada una línea como esta:

 

XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

También es válida y funciona perfectamente, solo tienen que descomentar quitando el símbolo de #.

Resultados

pacman wget - conexión cerrada
Aquí pueden ver como aparece el mensaje de error y reinicia la conexión desde donde se quedó antes del error.

Como pueden ver en la imagen el cambio funciona muy bien, en determinado momento apareció un mensaje con la leyenda “Conexión cerrada en el byte xxxx” ese es el problema al que me refería.

Ahora con wget reinicia la descarga justo en el byte en el que se quedó, no reinicia desde el principio y eso ayudó a completar la tarea.

Limitando la velocidad de la descarga.

También se puede limitar la velocidad de la descarga de los paquetes con wget agregando el parámetro limit-rate y la línea de configuración quedaría más o menos así:

XferCommand = /usr/bin/wget --limit-rate=100k --passive-ftp -c -O %o %u

En el ejemplo anterior se establece un tope de descarga a 100 kbps, esto es particularmente útil si se quiere reservar cierto ancho de banda para la actualización y no quedarse sin internet para otras aplicaciones.

Si tienen una conexión inestable probablemente hacer el cambio a wget les sea de mucha utilidad.