Gibt es ein Tool, mit dem Sie alle .zip
Links von einer Website extrahieren und in einer .txt
Datei speichern können ? Ich benutze Linux Mint. Ich möchte alle .zip
Links von dieser Website:
http://all-free-download.com/free-photos/
Gibt es ein Tool, mit dem Sie alle .zip
Links von einer Website extrahieren und in einer .txt
Datei speichern können ? Ich benutze Linux Mint. Ich möchte alle .zip
Links von dieser Website:
http://all-free-download.com/free-photos/
Antworten:
Ich habe eine Lösung , obwohl es nicht perfekt ist und erfordert , dass Sie haben curl
und perl
installiert ist , sollte beides sein bereits mit Linux Mint, obwohl meine Lösung ein Perl - Modul enthält schrieb ich , dass auf CPAN verfügbar ist. Sollte cpan
es wieder verfügbar und bereits unter Linux Mint installiert sein, müssen Sie es möglicherweise nur konfigurieren, wenn Sie es noch nicht getan haben.
Für das Modul App :: ExtractLinks können Sie es folgendermaßen installieren:
$ cpan App::ExtractLinks
Solange Ihr Perl-Setup korrekt ist und alle CPAN-Module in Ihrem Pfad sichtbar sind, sollten Sie jetzt extract-links
in Ihrem Terminal ausgeführt werden können. Wenn Sie das tun, ohne etwas einzugeben, werden Sie nichts sehen, weil es nur einen HTML-Stream erwartet und alle URLs, die in href=""
oder src=""
Attributen erscheinen, als Standard ausgibt (auf Ihr Terminal druckt) , so dass es wirklich einfach ist, aber Indem wir es mit einigen Dingen im Terminal kombinieren, können wir fast das erreichen, was Sie gefragt haben.
Wenn Sie das folgende Bash-Skript in einer Datei speichern und ihm ausführbare Berechtigungen erteilen chmod 755
oder es folgendermaßen ausführen bash filename
:
#!/usr/bin/env bash
while read url
do
while read id
do
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
done < <(curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*')
done < <(curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
Lassen Sie mich versuchen, es Zeile für Zeile zu erklären.
Zuerst leiten wir die Ausgabe des folgenden Befehls an eine while read
Schleife weiter.
curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
Dadurch wird der HTML-Code von der von Ihnen angegebenen URL abgerufen und der Ausgabestream an diese URL weitergeleitet extract-links
(das -s
Argument curl
bedeutet, curl
dass dies nur im Hintergrund erfolgt). Anschließend werden alle auf der Seite gefundenen Links angezeigt. Wir nehmen dann diese Liste von Links und suchen nur diejenigen, die /download/
sie enthalten. Dies ist, was der grep
Befehl tut. Dies ist natürlich keine generelle Lösung. Ich musste mir die HTML-Quelle der von Ihnen bereitgestellten Site ansehen und deren URL-Logik herausfinden.
Nachdem wir nur Verknüpfungen mit /download/
ihnen erhalten haben, übergeben wir nur diese an die while read
Schleife, die jeweils eine Verknüpfung zu einer Variablen erstellt $url
. Als nächstes machen wir wieder eine ähnliche Operation:
curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*'
Dies funktioniert genauso, wie wir es bereits getan haben, nur über diesen bestimmten Link. Diesmal wird nach allen Links gefiltert, die _download
darin enthalten sind, und es werden nur die Nummern aus dem Link übernommen. Dies ist wieder das Schema, mit dem sie Links und Downloads arrangieren müssen.
Lassen Sie mich an dieser Stelle nur sagen, dass der Grund dafür ist, dass es keine direkten Links zu .zip
Dateien auf der Website gibt. Die .zip
Downloads beginnen nach einer HTTP-Umleitung, wenn Sie zu bestimmten Seiten navigieren. Was mich zum letzten Abschnitt bringt:
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
Dabei werden nur die Zahlen aus den Links verwendet, die wir im vorherigen Schritt abgerufen haben. Sie werden erneut in eine while read
Schleife umgeleitet, jeder wird eine Variable $id
zugewiesen. curl
Dieses Mal wurde die -I
Option verwendet, mit der nur die Header abgerufen werden (anstatt die Datei herunterzuladen). führt jede Seite zu diesem Zeitpunkt eine Umleitung durch, die dann auf die ZIP-Datei selbst verweist. Wir führen die Ausgabe von curl
über ein Inline- perl
Skript aus, das nur ein regulärer Ausdruck ist, um den Location
HTTP-Header abzurufen, der angibt, zu welcher Datei umgeleitet werden soll.
Zum Schluss müssen Sie noch Folgendes tun:
bash my_script.sh > links.txt
Bearbeiten
Eine Einschränkung ist, dass möglicherweise wiederholte Links angezeigt werden, die darauf beruhen, dass ich diese Seite getestet habe. Denken Sie also daran.
Natürlich ist dies kein sehr effizienter Vorgang, aber andererseits ist er automatisiert und es gibt nicht unbedingt eine andere Möglichkeit, auf die gewünschten Daten zuzugreifen, ohne dass ein Administrator auf die Site zugreifen muss.