Comment extraire tous les liens PDF d'un site Web?

10

C'est un peu hors sujet, mais j'espère que vous m'aiderez. J'ai trouvé un site Web plein d'articles dont j'ai besoin, mais ceux-ci sont mélangés avec beaucoup de fichiers inutiles (principalement jpgs).

Je voudrais savoir s'il existe un moyen de trouver ( pas de télécharger ) tous les PDF sur le serveur pour faire une liste de liens. Fondamentalement, je voudrais simplement filtrer tout ce qui n'est pas un PDF, afin d'avoir une meilleure vue sur ce qu'il faut télécharger et ce qui ne l'est pas.

Sebastiano Seno
la source
3
Vous pourrez peut-être utiliser DownThemAll pour la tâche. C'est une extension Firefox qui permet de télécharger des fichiers par des filtres et plus encore. Je ne l'ai jamais utilisé moi-même donc je ne pourrai pas poster un tutoriel complet mais quelqu'un d'autre le pourrait. Si vous connaissez mieux cette extension, n'hésitez pas à poster une bonne réponse.
Glutanimate
Ah, je viens de voir que vous voulez juste filtrer les liens, pas les télécharger. Je ne sais pas si c'est possible avec l'extension que j'ai publiée. Mais ça vaut le coup d'essayer!
Glutanimate

Réponses:

15

Aperçu

Ok, c'est parti. Il s'agit d'une solution programmatique sous forme 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

Installation

Vous devrez avoir wgetet lynxinstaller:

sudo apt-get install wget lynx

Usage

Le script obtiendra une liste de tous les .pdffichiers sur le site Web et le déposera dans la sortie de la ligne de commande et dans un fichier texte dans le répertoire de travail. Si vous commentez la wgetcommande "facultative", le script procédera au téléchargement de tous les fichiers dans un nouveau répertoire.

Exemple

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

...
Glutanimate
la source
pourquoi utilisez-vous "$(pwd)/pdflinks.txt"au lieu de pdflinks.txt?
jfs
@JFSebastian Vous avez raison, c'est redondant. J'ai modifié le script. Merci!
Glutanimate
Fonctionne perfecto!
Chris Smith
6

un simple extrait javascript peut résoudre ce problème: (REMARQUE: je suppose que tous les fichiers pdf se terminent par .pdf dans le lien.)

ouvrez la console javascript de votre navigateur, copiez le code suivant et collez-le sur la console js, c'est fait!

//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
la source
1
Pour moi, cela revient trop. La lufonction devait être:, lu.endsWith (".pdf") == 1alors cela ne m'a donné que les liens PDF, pas tous les liens contenant "* .pdf *", ce que j'ai obtenu avec le code tel que publié. FWIW.
Dɑvïd