Wenn Sie `wget` machen, wird die Seite nicht gespeichert

68

Ich benutze das wgetProgramm, möchte aber nicht, dass es die heruntergeladene HTML-Datei speichert. Ich möchte, dass es verworfen wird, nachdem es empfangen wurde. Wie mache ich das?

Ram Rachum
quelle
Ich bin neu in Linux - würde das /dev/nullDing funktionieren?
Ram Rachum
2
Also, was ist der Sinn, es dann herunterzuladen?
Anonym
1
@Anonymous Ich gehe davon aus, den Remote-Server zu belasten. Wenn dir der Inhalt egal ist, würde ich wahrscheinlich apachebench (ab) verwenden.
Tom O'Connor

Antworten:

83

Sie können die Ausgabe von wget nach / dev / null (oder NUL unter Windows) umleiten:

wget http://www.example.com -O /dev/null

Die Datei wird nicht auf die Festplatte geschrieben, sondern heruntergeladen.

Evan Anderson
quelle
Dadurch wird die Seite nicht gespeichert, aber es wird eine E-Mail an mich gesendet. Ist es auch möglich, das Versenden von E-Mails zu deaktivieren?
Trante
32

Wenn Sie möchten , um die Datei nicht speichern, und Sie haben die Lösung von dem Herunterladen der Seite in akzeptiert /dev/null, nehme ich Sie wget nicht verwenden zu erhalten und die Seiteninhalte zu analysieren .

Wenn Sie wirklich eine Remote-Aktion auslösen müssen, überprüfen Sie, ob die Seite vorhanden ist, und so weiter. Ich denke, es ist besser, das Herunterladen der HTML-Textseite überhaupt zu vermeiden.

Spielen Sie mit wgetOptionen, um nur das abzurufen, was Sie wirklich benötigen, z. B. HTTP-Header, Anforderungsstatus usw.

  • Vorausgesetzt, Sie müssen überprüfen, ob die Seite in Ordnung ist (dh der zurückgegebene Status ist 200), können Sie Folgendes tun:

    wget --no-cache --spider http://your.server.tld/your/page.html
    
  • Wenn Sie die vom Server zurückgegebenen Header analysieren möchten, gehen Sie wie folgt vor:

    wget --no-cache -S http://your.server.tld/your/page.html
    

Weitere Optionen zum Spielen finden Sie auf der wget-Manpage .
Siehe lynxauch als Alternative zu wget.

drAlberT
quelle
Ich bin verwirrt. --no-cacheIn der Manpage heißt es, dass wget "dem Remote-Server eine entsprechende Anweisung ('Pragma: no-cache') sendet, um die Datei vom Remote-Dienst
abzurufen
Dem Server wird
mitgeteilt, dass
17

$ wget http://www.somewebsite.com -O foo.html --delete-after

al.
quelle
1
Danke vielmals. Die --delete-afterOption ist die Wahl, wenn Sie rekursiv herunterladen müssen, aber den eigentlichen Inhalt verwerfen möchten.
Egelev
+1 Für mich ist der Befehl intuitiv - auf einen Blick kann ich schneller nachvollziehen, was passieren wird als-O /dev/null
fusion27
15

Wenn Sie das Ergebnis auch in der Konsole drucken möchten, können Sie Folgendes tun:

wget -qO- http://www.example.com
SCL
quelle
1
Diese Option gefällt mir am besten. Mal sehen, was es bringt, aber nicht speichert. Die Schalter sind besonders qleise (sie geben keinen Fortschritt und keine anderen Informationen aus) und O-(schreiben Sie das abgerufene Dokument in die Konsole).
Octopus
9

Eine andere Alternative besteht darin, ein Tool wie curldas zu verwenden , das standardmäßig den Remote-Inhalt ausgibt, stdoutanstatt ihn in einer Datei zu speichern.

Natacado
quelle
4

Schauen Sie sich die Option "-spider" an. Ich stelle damit sicher, dass meine Websites online sind, und sende mir eine E-Mail, falls dies nicht der Fall ist. Dies ist ein typischer Eintrag von meiner Crontab:

46 */2 * * * if ! wget -q --spider http://www.rochesterflyingclub.com/ >/dev/null 2>&1; then echo "Rochester Flying Club site is down" ; fi
Paul Tomblin
quelle
3

Wenn Sie eine Website mit wget crawlen müssen und die Festplattenabwanderung minimieren möchten ...

Für eine * NIX-Box und mit wgetschlage ich vor, das Schreiben in eine Datei zu überspringen. Auf meiner Ubuntu 10.04-Box ist mir aufgefallen, wget -O /dev/nulldass wget nach dem ersten Download den Downloadvorgang abgebrochen hat.
Mir ist auch aufgefallen, wget -O real-filedass wget dazu führt, die eigentlichen Links auf der Seite zu vergessen. Es besteht darauf index.html, auf jeder Seite präsent zu sein. Solche Seiten sind möglicherweise nicht immer vorhanden und wget merkt sich keine Links, die es zuvor gesehen hat.

Das Beste, was ich mir für das Crawlen ohne Schreiben auf die Festplatte ausgedacht habe, ist das Folgende

 mkdir /dev/shm/1   
 cd /dev/shm/1
 wget --recursive --relative --no-parent ...

Beachten Sie, dass es keine -O fileOption gibt. wget schreibt in das $ PWD-Verzeichnis. In diesem Fall handelt es sich um ein Nur-RAM- tmpfs- Dateisystem. Wenn Sie hier schreiben, sollten Sie die Festplattenabwanderung umgehen (abhängig vom Swap-Speicher) UND alle Links im Auge behalten. Dies sollte die gesamte Website erfolgreich crawlen.

Danach natürlich

 rm --recursive --force /dev/shm/1/*
JamesThomasMoon1979
quelle
2

Verwenden Sie die Option --delete-after, mit der die Datei nach dem Download gelöscht wird.

Edit: Ups, mir ist gerade aufgefallen, dass das schon beantwortet wurde.

John Gardeniers
quelle
0

Laut Hilfedokument (wget -h) können Sie die Option --spider verwenden, um den Download zu überspringen (Version 1.14).

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

felsiges Qi
quelle
Wie ergänzt dies die andere Antwort, die --spider erwähnt?
Ward