wget rekursiver Download, aber ich möchte nicht allen Links folgen

10

Ich versuche, eine Website mit wget zu spiegeln, möchte aber nicht viele Dateien herunterladen. Daher verwende ich die --rejectOption von wget, um nicht alle Dateien zu speichern. Wget lädt jedoch weiterhin alle Dateien herunter und entfernt die Datei anschließend, wenn sie mit meiner Ablehnungsoption übereinstimmt.

Gibt es eine Möglichkeit, wget anzuweisen, bestimmten Links nicht zu folgen, wenn sie mit einem Shell-Platzhalter übereinstimmen? Wenn wget dies nicht kann, gibt es einen anderen allgemeinen Linux-Befehl, der dies kann?

Rory
quelle
3
Veröffentlichen Sie bitte Ihren gesamten Befehl. Dies erleichtert die Fehlerbehebung erheblich.
Joseph Kern

Antworten:

9

Sie können auch HTTrack ausprobieren , das IMO eine flexiblere und intuitivere Einschluss- / Ausschlusslogik bietet. Etwas wie das...

httrack "https://example.com" -O ExampleMirrorDirectory \
"-*" \
"+https://example.com/images/*" \
"-*.swf"

Die Regeln werden der Reihe nach angewendet und überschreiben vorherige Regeln ...

  1. Alles ausschließen
  2. Fügen Sie jedoch https://example.com/images/ * hinzu
  3. Aber schließen Sie alles aus, was mit swf endet
lukecyca
quelle
Würde es CSS, Bilder usw. mit aktualisierten URLs herunterladen?
Brandizzi
6

Sieht so aus, als wäre dies in wget nicht möglich

Rory
quelle
1

Unter dem Abschnitt --reject von 'man wget':

"Beachten Sie, dass wenn eines der Platzhalterzeichen *,?, [Oder] in einem Element von acclist oder rejlist erscheint, es als Muster und nicht als Suffix behandelt wird."

Wenn Sie dies tun, möchten Sie möglicherweise Beispiele für die von Ihnen verwendeten Muster geben und angeben, was Ihrer Meinung nach übereinstimmen sollte, und das ist nicht der Fall. Sie sagen, sie passen zusammen, aber sind Sie sicher?

Stellen Sie außerdem sicher, dass Sie diese Liste in Anführungszeichen setzen, damit die Shell diese Platzhalter nicht erweitert, bevor Sie die Argumente an wget übergeben.

Selbst wenn Ihr System nicht Version 1.12 hat, die Dateitypen Abschnitt des Handbuchs lesen Sie hier . Gemäß dem Änderungsprotokoll hat der Betreuer einige Einschränkungen hinzugefügt:

* NEWS: Added documentation change re: --no-parents, and various
caveats on accept/reject lists behavior. Rearranged some items in
order of priority.
Kyle Brandt
quelle
Die Optionen --reject stehen in Anführungszeichen. Ich kann sehen, dass die Dateien mit den richtigen übereinstimmen, da wget die Datei nach dem Herunterladen der Datei entfernt. Ich möchte nur verhindern, dass die Datei heruntergeladen wird
Rory,
Sind das htm (l) -Dateien? Laut Handbuch werden diese auf jeden Fall heruntergeladen.
Kyle Brandt
Ja. Die Dateien, die ich ablehnen möchte, sind HTML-Dateien. Ich weiß, dass sie heruntergeladen werden, egal was passiert. Gibt es eine Möglichkeit, dies zu verhindern?
Rory
1

Sie können die Rekursionsstufe mit der -l NUMBEROption einschränken , wenn dies hilfreich ist (ohne einem bestimmten Regex-Muster zu folgen).

Eine Stufe von "2" lädt index.html, seine Unterwebsites / images / etc und die Links auf der Unterwebsite herunter.

PEra
quelle
Nein, das würde in diesem Fall nicht helfen
Rory
1

Wie benutzt man wget? versuche es so zu benutzen:

wget -r --reject=gif,jpg,swf http://norc.aut.ac.ir/

Dieser Befehl ignoriert GIF-, JPG- und SWF-Dateien.

Orezvani
quelle
Die Dateien, die Rory McCann ablehnen möchte, sind HTML-Dateien, aber er möchte andere HTML-Dateien behalten, sodass diese Syntax nicht für seine Frage gilt.
Royce Williams
1

Eine Problemumgehung wäre, wget über einen Proxyserver auszuführen. Stellen Sie Ihren Proxy so ein, dass bestimmte Muster nicht zulässig sind. Dies würde wget daran hindern, sie überhaupt herunterzuladen.

wget lädt eine Datei herunter und entfernt sie, die dem -R-Muster entspricht. Es kann auch mit Mustern übereinstimmen, nicht nur mit Erweiterungen oder Teilen von Dateinamen. Es hindert wget jedoch nicht daran, zuerst herunterzuladen und später zu löschen.

httrack hat einige nette Funktionen, aber meiner Erfahrung nach kann die Art und Weise, wie eine "Datei" gespeichert wird, etwas eigenartig sein, z. B. wenn httrack auf index.asp stößt. Type = BASIC & PAGEID = 2234234
kann es speichern, aber Sie müssen es anweisen , um die Datei zu erhalten Teile der Abfrage,
z. B.% h% p /% n% [TYP: @TYPE = ::]% [PAGEID: PAGEID = ::].% Wenn
das @ ein Platzhalter für ein Fragezeichen ist, können Sie die Dateien später umbenennen. oder vielleicht stattdessen einem Fragezeichen entkommen? Das Problem ist, dass.% t am Ende Ihrer URI eine '.html' hinzufügt, die ursprünglich keine '.html' hatte. Wenn Sie sie entfernen, fehlt Bildern, die von httrack heruntergeladen werden, eine Dateierweiterung.

Besser wget IMHO verwenden

cparod
quelle