Erstellen Sie mit Wget eine vollständige lokale Kopie einer Website

Erstellen Sie mit Wget eine vollständige lokale Kopie einer Website

OK, hier ist, was ich brauche:

  • Ich verwende einen Mac (Mac OS X 10.6.8)
  • Ich möchte eine Website vollständig auf meiner Festplatte spiegeln (das istwas ich als Test verwende)
  • Ich möchte alle Bilder und Voraussetzungen dort haben, damit die Website auch offline durchsuchbar ist
  • Ich möchte, dass relative Links auf allen Seiten entsprechend aktualisiert werden
  • (* optional) .htmlErweiterungen für alle Dateien wären toll, damit sie von einem Browser leicht erkannt und geöffnet werden können

Das ist, was ich verwende:

wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/

Die Sache ist :

  • .cssDateien und Bilder usw. scheinen nicht heruntergeladen zu werden - zumindest nicht bis zu dem Level, das ich laufen gelassen habe (ok, vielleichtwürdewird heruntergeladen, wenn der Vorgang abgeschlossen ist, daher können wir diesen Schritt überspringen)
  • Es wird KEINE HTML-Erweiterung hinzugefügt
  • Links werden nicht konvertiert

Also... irgendwelche Ideen?

Antwort1

Zunächst einmal scheint dies ein ausschließlich OS X-Problem zu sein. Ich kann den obigen Befehl unter Ubuntu 14.04 LTS verwenden und er funktioniert sofort! Ein paar Vorschläge:

.cssDateien und Bilder usw. scheinen nicht heruntergeladen zu werden – zumindest nicht bis zu der Stufe, die ich ausgeführt habe (ok, vielleicht würden sie heruntergeladen, wenn der Vorgang abgeschlossen wäre, also können wir diesen Punkt überspringen)

  1. Wenn Sie sagen --domains wikispaces.com, laden Sie keine verknüpften CSS-Dateien herunter, die sich auf anderen Domänen befinden. Einige der Stylesheets auf dieser Website befinden sich auf, http://c1.wikicdn.comwie die Quelle von andeutet index.html.

  2. Auf manchen Websites ist der direkte Zugriff auf die verlinkten Dateien (referenzierte Bilder) über den Link nicht möglich (siehediese Seite). Man kann sie nur über die Website ansehen. Das scheint hier allerdings nicht der Fall zu sein.

  3. Wget scheint beim Parsen des HTML keine Kommentare zu erkennen. Wenn Wget läuft, sehe ich Folgendes:

    --2016-07-01 04:01:12--  http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg
    Reusing existing connection to chessprogramming.wikispaces.com:80.
    HTTP request sent, awaiting response... 404 Not Found
    2016-07-01 04:01:14 ERROR 404: Not Found.
    

    Wenn Sie den Link im Browser öffnen, gelangen Sie zu einer Anmeldeseite. Der Name der Datei lässt darauf schließen, dass es irgendwo in den Kommentaren vorkam.

  4. Viele Sites erlauben das Herunterladen mithilfe von Download-Managern nicht und prüfen daher, von welchem ​​Client die HTTP-Anforderung stammt (dazu gehört der Browser oder der Client, mit dem Sie eine Datei von deren Server angefordert haben).

    Wird verwendet -U somebrowser, um den Client zu fälschen und vorzugeben, ein Browser zu sein. Kann beispielsweise -U mozillahinzugefügt werden, um dem Server mitzuteilen, dass ein Mozilla/Firefox die Seite anfordert. Dies ist hier jedoch nicht das Problem, da ich die Site auch ohne dieses Argument herunterladen kann.

  5. Die Download- und Anforderungsrate ist wichtig. Server möchten nicht, dass ihre Leistung durch Roboter, die Daten von ihrer Site anfordern, aufgebläht wird. Verwenden Sie --limit-rate=und --wait=Argumente in Wget, um die Downloadrate zu begrenzen, und warten Sie einige Sekunden zwischen der Generierung von Get-Anfragen für einzelne Dateien.

    z.B

    wget -r --wait=5 --limit-rate=100K <other arguments>
    

    5 Sekunden zwischen den Abrufanfragen zu warten und die Downloadrate auf 100 Kbit/s zu begrenzen. Auch hier ist dies nicht das Problem, da der Server keine Begrenzung der Downloadrate verlangt hat, um die Website abzurufen.

Der wahrscheinlichste Fall ist hier (1). Ersetzen Sie das --domains wikispaces.comdurch --domains *und versuchen Sie es erneut. Mal sehen, wo wir landen. Sie sollten zumindest die CSS-Dateien abrufen können.

Es wird KEINE HTML-Erweiterung hinzugefügt

Wenn ich den Befehl ausführe, wird eine HTML-Erweiterung hinzugefügt.

Links werden nicht konvertiert

Ich glaube nicht, dass ich hier völlig richtig liege, aber erwarten Sie nicht, dass Links sofort funktionieren, wenn Sie eine Site spiegeln.

Wenn Sie der HTTP-Get-Anfrage ein Argument übergeben (z. B. http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0hat die Argumente v=rss_2_0), wird die Anfrage mit einem auf dem Server laufenden Skript, z. B. PHP, bearbeitet. Die Argumente helfen Ihnen, je nach Argument(en) die richtige Version des Skripts abzurufen. Denken Sie daran, wenn Sie eine Site spiegeln, insbesondere ein Wiki, das auf PHP läuft, können Sie nicht genauSpiegeleine Site, es sei denn, Sie holen die ursprünglichen PHP-Skripte. HTML-Seiten, die von PHP-Skripten zurückgegeben werden, sind nur ein Teil der Seite, die Sie mit diesem Skript erwarten können. Der richtige Algorithmus, dererzeugtdie Seite wird auf dem Server gespeichert und wird nur dann korrekt gespiegelt, wenn man die originale PHP-Datei abruft, was mit HTTP nicht möglich ist. Dafür braucht man FTP-Zugriff auf den Server.

Hoffe das hilft.

Antwort2

Option 1 vonAntwort von user612013war sicherlich das Problem in meinem Fall. Tatsächlich ging es nur schief, weil ich https://censoreddomain.comanstelle von https://www.censoreddomain.com(beachten Sie diewww.). Nachdem ich das hinzugefügt hatte www., wgethat es die gesamte Site für mich gescrapt. Es ist also wichtig,muss genau mit dem kanonischen Namen der Domain übereinstimmen, die Sie scrapen möchten.

Da der Fehler bei mir lag, gehe ich davon aus, dass dieser „Haken“ auf allen Plattformen zutrifft wget, nicht nur auf OS X.

verwandte Informationen