Wie kann ich alle PDF-Links auf einer Website extrahieren?


10

Dies ist ein wenig abseits des Themas, aber ich hoffe ihr werdet mir helfen. Ich habe eine Website voller Artikel gefunden, die ich brauche, aber diese sind mit vielen nutzlosen Dateien (hauptsächlich JPGs) gemischt.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, alle PDFs auf dem Server zu finden ( nicht herunterzuladen ), um eine Liste von Links zu erstellen. Grundsätzlich möchte ich einfach alles herausfiltern, was kein PDF ist, um eine bessere Übersicht darüber zu erhalten, was heruntergeladen werden soll und was nicht.


3
Möglicherweise können Sie DownThemAll für die Aufgabe verwenden. Es ist eine Firefox-Erweiterung, die das Herunterladen von Dateien durch Filter und mehr ermöglicht. Ich habe es selbst nie benutzt, daher kann ich kein vollständiges Tutorial veröffentlichen, aber jemand anderes könnte es. Wenn Sie mit dieser Erweiterung besser vertraut sind, können Sie gerne eine richtige Antwort posten.
Glutanimate

Ah, ich habe gerade gesehen, dass Sie nur die Links herausfiltern und nicht herunterladen möchten. Ich weiß nicht, ob das mit der von mir geposteten Erweiterung möglich ist. Aber es ist einen Versuch wert!
Glutanimate

Antworten:


15

Überblick

Ok, hier hast du es. Dies ist eine programmatische Lösung in Form eines Skripts:

#!/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

Sie müssen haben wgetund lynxinstalliert haben:

sudo apt-get install wget lynx

Verwendung

Das Skript .pdfruft eine Liste aller Dateien auf der Website ab und speichert sie in der Befehlszeilenausgabe und in einer Textdatei im Arbeitsverzeichnis. Wenn Sie den wgetBefehl "optional" auskommentieren, lädt das Skript alle Dateien in ein neues Verzeichnis herunter.

Beispiel

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

...

warum benutzt du "$(pwd)/pdflinks.txt"statt pdflinks.txt?
JFS

@JFSebastian Sie haben Recht, es ist überflüssig. Ich habe das Skript geändert. Vielen Dank!
Glutanimate

Funktioniert perfekt!
Chris Smith

6

Ein einfaches Javascript-Snippet kann dies lösen: (HINWEIS: Ich gehe davon aus, dass alle PDF-Dateien mit .pdf im Link beendet sind.)

Öffnen Sie die Javascript-Konsole Ihres Browsers, kopieren Sie den folgenden Code und fügen Sie ihn in die js-Konsole ein. Fertig!

//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
Für mich kehrt das zu viel zurück. Die luFunktion musste sein:, lu.endsWith (".pdf") == 1dann bekam ich nur die PDF-Links, nicht alle Links mit "* .pdf *", was ich mit dem Code wie gepostet bekam. FWIW.
Dɑvïd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.