Come posso estrarre tutti i collegamenti PDF su un sito Web?


10

Questo è un po 'fuori tema, ma spero che voi ragazzi mi aiuterete. Ho trovato un sito Web pieno di articoli di cui ho bisogno, ma quelli sono mescolati con molti file inutili (principalmente jpg).

Vorrei sapere se esiste un modo per trovare ( non scaricare ) tutti i PDF sul server per creare un elenco di collegamenti. Fondamentalmente vorrei semplicemente filtrare tutto ciò che non è un PDF, al fine di ottenere una visione migliore su cosa scaricare e cosa no.


3
Potresti essere in grado di utilizzare DownThemAll per l'attività. È un'estensione firefox che consente di scaricare file tramite filtri e altro. Non l'ho mai usato da solo, quindi non sarò in grado di pubblicare un tutorial completo, ma qualcun altro potrebbe. Se hai più familiarità con questa estensione, non esitare a pubblicare una risposta adeguata.
Glutanimate,

Ah, ho appena visto che vuoi solo filtrare i link, non scaricarli. Non so se sia possibile con l'estensione che ho pubblicato. Ma vale la pena provare!
Glutanimate,

Risposte:


15

Panoramica

Ok, eccoti qua. Questa è una soluzione programmatica sotto forma di uno 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

Installazione

Dovrai avere wgete lynxinstallare:

sudo apt-get install wget lynx

uso

Lo script otterrà un elenco di tutti i .pdffile sul sito Web e lo scaricherà sull'output della riga di comando e su un file di testo nella directory di lavoro. Se si commenta il wgetcomando "opzionale", lo script procederà a scaricare tutti i file in una nuova directory.

Esempio

$ ./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]

...

perché usi "$(pwd)/pdflinks.txt"invece di pdflinks.txt?
jfs

@JFSebastian Hai ragione, è ridondante. Ho modificato la sceneggiatura. Grazie!
Glutanimate,

Funziona perfettamente!
Chris Smith,

6

un semplice frammento javascript può risolvere questo: (NOTA : Presumo che tutti i file pdf siano finiti con .pdf nel link.)

apri la tua console javascript del browser, copia il seguente codice e incollalo nella console js, fatto!

//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]);

1
Per me, questo ritorna troppo. La lufunzione doveva essere:, lu.endsWith (".pdf") == 1quindi mi hanno procurato solo i collegamenti PDF, non tutti i collegamenti con "* .pdf *", che è quello che ho ottenuto con il codice come pubblicato. FWIW.
Dɑvïd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.