Necesito descargar una gran cantidad de archivos pdf (sería tedioso, si no imposible, recopilar y cotejar todos los enlaces) del sitio web de mi universidad usando wget, con enlaces como este:
http://example.edu/path_to_directory/directory/foobar.pdf
Estoy usando el siguiente comando:
wget -mk --no-check-certificate --load-cookies cookies.txt http://example.edu/arbitrary_link_to_directory/directory/
Desafortunadamente, los directorios reales que contienen los archivos PDF redirigen a una página de error, y todo lo que obtengo son un montón de archivos html y css.
http://example.edu/path_to_directory/directory/
en un navegador redirigiría a uno a
http://example.edu/path_to_directory/error/error.html
¿Sería posible descargar todos los archivos en cuestión utilizando wget?
Respuesta1
Cuando quiero descargar un montón de archivos de un sitio web que no lo hace fácil (o lo hace difícil), genero una lista de las URL de los archivos con algo como esto:
lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt
Luego, normalmente edito el archivo para vi
eliminar las entradas que no quiero descargar y, finalmente, las busco todas con wget:
wget --input-file=/tmp/pdflist.txt
Eso funciona bien para tareas simples y, a menudo, funciona bastante bien para tareas moderadamente difíciles... pero para tareas difíciles que implican el análisis de HTML complicado y el seguimiento de enlaces (y tal vez el uso de cookies), escribiré un perl
web-bot usando el libwww-perl
módulo ( aliasLWP).
Respuesta2
En el sitio web de su universidad, ¿hay una página que proporciona enlaces a todos los archivos PDF? ¿O cómo saber la lista de nombres de archivos PDF?
En ese caso, necesitará escribir un script llamado scraper para obtener enlaces de esa página mediante programación y luego recorrer automáticamente esa lista y descargarlos con wget u otra herramienta. Sugeriría PHP o Python para escribir el raspador. Podrá gestionar fácilmente la eventual paginación en el sitio web de origen. Si usa PHP, simplemente puede descargar archivos con
file_put_contents('nombre_archivo_destino', file_get_contents('url_fuente');