Wie kann ich alle .zip-Links von einer Website extrahieren?


0

Gibt es ein Tool, mit dem Sie alle .zipLinks von einer Website extrahieren und in einer .txtDatei speichern können ? Ich benutze Linux Mint. Ich möchte alle .zipLinks von dieser Website:

http://all-free-download.com/free-photos/

Können Sie den Weg zu einem solchen Link weisen? Mir ist nicht klar, wie ich einen finde.
Reinierpost

Antworten:


0

Ich habe eine Lösung , obwohl es nicht perfekt ist und erfordert , dass Sie haben curlund perlinstalliert 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 cpanes 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-linksin 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 755oder 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 readSchleife 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 -sArgument curlbedeutet, curldass 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 grepBefehl 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 readSchleife, 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 _downloaddarin 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 .zipDateien auf der Website gibt. Die .zipDownloads 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 readSchleife umgeleitet, jeder wird eine Variable $idzugewiesen. curlDieses Mal wurde die -IOption 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- perlSkript aus, das nur ein regulärer Ausdruck ist, um den LocationHTTP-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.


Sir, Ihr Code ist einfach perfekt, hört aber nach einiger Zeit nach 100-150 Links auf. Wie kann ich diesen Code aktualisieren, um alle Links zu erhalten, oder diesen Code auf verschiedenen Websites verwenden? Bitte wiederholen Sie mir niemand, den ich bereit
bin
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.