¿Cómo puedo extraer todos los enlaces PDF en un sitio web?

10

Esto está un poco fuera de tema, pero espero que me ayuden. Encontré un sitio web lleno de artículos que necesito, pero estos se mezclan con muchos archivos inútiles (principalmente jpgs).

Me gustaría saber si hay una manera de encontrar ( no descargar ) todos los archivos PDF en el servidor para hacer una lista de enlaces. Básicamente, me gustaría simplemente filtrar todo lo que no es un PDF, para obtener una mejor vista sobre qué descargar y qué no.

Sebastiano Seno
fuente
3
Es posible que pueda usar DownThemAll para la tarea. Es una extensión de Firefox que permite descargar archivos por filtros y más. Nunca lo he usado, así que no podré publicar un tutorial completo, pero alguien más podría hacerlo. Si está más familiarizado con esta extensión, no dude en publicar una respuesta adecuada.
Glutanimate
Ah, acabo de ver que solo quieres filtrar los enlaces, no descargarlos. No sé si eso es posible con la extensión que publiqué. ¡Pero vale la pena intentarlo!
Glutanimate

Respuestas:

15

Visión de conjunto

OK aquí tienes. Esta es una solución programática en forma de script:

#!/bin/bash

# NAME:         pdflinkextractor
# AUTHOR:       Glutanimate (http://askubuntu.com/users/81372/), 2013
# LICENSE:      GNU GPL v2
# DEPENDENCIES: wget lynx
# DESCRIPTION:  extracts PDF links from websites and dumps them to the stdout and as a textfile
#               only works for links pointing to files with the ".pdf" extension
#
# USAGE:        pdflinkextractor "www.website.com"

WEBSITE="$1"

echo "Getting link list..."

lynx -cache=0 -dump -listonly "$WEBSITE" | grep ".*\.pdf$" | awk '{print $2}' | tee pdflinks.txt

# OPTIONAL
#
# DOWNLOAD PDF FILES
#
#echo "Downloading..."    
#wget -P pdflinkextractor_files/ -i pdflinks.txt

Instalación

Necesitará tener wgete lynxinstalar:

sudo apt-get install wget lynx

Uso

El script obtendrá una lista de todos los .pdfarchivos en el sitio web y lo volcará a la salida de la línea de comandos y a un archivo de texto en el directorio de trabajo. Si comenta el wgetcomando "opcional", el script procederá a descargar todos los archivos a un nuevo directorio.

Ejemplo

$ ./pdflinkextractor http://www.pdfscripting.com/public/Free-Sample-PDF-Files-with-scripts.cfm
Getting link list...
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JSPopupCalendar.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/DynamicEmail_XFAForm_V2.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcquireMenuItemNames.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/BouncingButton.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JavaScriptClock.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/Matrix2DOperations.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/RobotArm_3Ddemo2.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/SimpleFormCalculations.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/TheFlyv3_EN4Rdr.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ImExportAttachSample.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcroForm_BasicToggle.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcroForm_ToggleButton_Sample.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcorXFA_BasicToggle.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ConditionalCalcScripts.pdf
Downloading...
--2013-12-24 13:31:25--  http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JSPopupCalendar.pdf
Resolving www.pdfscripting.com (www.pdfscripting.com)... 74.200.211.194
Connecting to www.pdfscripting.com (www.pdfscripting.com)|74.200.211.194|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 176008 (172K) [application/pdf]
Saving to: `/Downloads/pdflinkextractor_files/JSPopupCalendar.pdf'

100%[===========================================================================================================================================================================>] 176.008      120K/s   in 1,4s    

2013-12-24 13:31:29 (120 KB/s) - `/Downloads/pdflinkextractor_files/JSPopupCalendar.pdf' saved [176008/176008]

...
Glutanimato
fuente
¿Por qué lo usas en "$(pwd)/pdflinks.txt"lugar de pdflinks.txt?
jfs
@JFSebastian Tienes razón, es redundante. Modifiqué el guión. ¡Gracias!
Glutanimate
Funciona perfecto!
Chris Smith
6

un simple fragmento de JavaScript puede resolver esto: (NOTA: supongo que todos los archivos pdf terminan con .pdf en el enlace).

abra la consola de JavaScript de su navegador, copie el siguiente código y péguelo en la consola js, ¡listo!

//get all link elements
var link_elements = document.querySelectorAll(":link");

//extract out all uris.
var link_uris = [];
for (var i=0; i < link_elements.length; i++)
{
    //remove duplicated links
    if (link_elements[i].href in link_uris)
        continue;

    link_uris.push (link_elements[i].href);
}

//filter out all links containing ".pdf" string
var link_pdfs = link_uris.filter (function (lu) { return lu.indexOf (".pdf") != -1});

//print all pdf links
for (var i=0; i < link_pdfs.length; i++)
    console.log (link_pdfs[i]);
sgx1
fuente
1
Para mí, esto vuelve demasiado. La lufunción tenía que ser: lu.endsWith (".pdf") == 1entonces eso solo me proporcionó los enlaces PDF, no todos los enlaces con "* .pdf *" en ellos, que es lo que obtuve con el código publicado. FWIW
Dɑvïd