Mit wget, Was ist der richtige Befehl, um eine gzippte Version anstelle des eigentlichen HTML zu erhalten

18

Ich bin auf diese Website gestoßen, die darüber spricht.

Was ist also der richtige Befehl, wenn Sie die gesamte Website mit der komprimierten Version herunterladen?

Ich habe diesen Befehl getestet, aber ich weiß nicht, ob ich wirklich die komprimierte Version bekommen werde:

wget --header="accept-encoding: gzip" -m -Dlinux.about.com -r -q -R gif,png,jpg,jpeg,GIF,PNG,JPG,JPEG,js,rss,xml,feed,.tar.gz,.zip,rar,.rar,.php,.txt -t 1 http://linux.about.com/
jomnana
quelle
Sie sagen, Sie haben diesen Befehl getestet, aber die Antwort von @ EightBitTony unten scheint zu sagen, dass das, was Sie daraus erhalten würden, eine gzip-Datei des ersten Treffers wäre, ohne dass die Site nach weiteren Dateien durchsucht wird. War das das Ergebnis, das du bekommen hast?
Caleb
linux.about.com ist gzip-komprimiert und dieser Befehl greift auf die gesamte Site zurück. Ich habe diesen Befehl auf einer anderen Website getestet und auch auf der gesamten Website. Das ist, warum ich ein bisschen verwirrt, ob es wirklich die gezippte Version herunterladen oder nicht
jomnana

Antworten:

19

Wenn Sie gzip'ed-Inhalt anfordern (unter Verwendung des richtigen accept-encoding: gzip-Headers), kann wget den Inhalt meines Erachtens nicht lesen. So erhalten Sie eine einzelne gezippte Datei auf der Festplatte für die erste Seite, die Sie aufgerufen haben, aber keinen anderen Inhalt.

Das heißt, Sie können wget nicht verwenden, um gezippte Inhalte anzufordern und gleichzeitig die gesamte Website erneut aufzurufen.

Ich denke, es gibt einen Patch, mit dem wget diese Funktion unterstützt, der jedoch nicht in der Standard-Distributionsversion enthalten ist.

Wenn Sie das -S-Flag angeben, können Sie feststellen, ob der Webserver mit dem richtigen Inhaltstyp antwortet. Beispielsweise,

wget -S --header="accept-encoding: gzip" wordpress.com
--2011-06-17 16:06:46--  http://wordpress.com/
Resolving wordpress.com (wordpress.com)... 72.233.104.124, 74.200.247.60, 76.74.254.126
Connecting to wordpress.com (wordpress.com)|72.233.104.124|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Server: nginx
  Date: Fri, 17 Jun 2011 15:06:47 GMT
  Content-Type: text/html; charset=UTF-8
  Connection: close
  Vary: Accept-Encoding
  Last-Modified: Fri, 17 Jun 2011 15:04:57 +0000
  Cache-Control: max-age=190, must-revalidate
  Vary: Cookie
  X-hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.
  X-Pingback: http://wordpress.com/xmlrpc.php
  Link: <http://wp.me/1>; rel=shortlink
  X-nananana: Batcache
  Content-Encoding: gzip
Length: unspecified [text/html]

Die Inhaltskodierung gibt eindeutig gzip an, jedoch für linux.about.com (derzeit).

wget -S --header="accept-encoding: gzip" linux.about.com
--2011-06-17 16:12:55--  http://linux.about.com/
Resolving linux.about.com (linux.about.com)... 207.241.148.80
Connecting to linux.about.com (linux.about.com)|207.241.148.80|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Fri, 17 Jun 2011 15:12:56 GMT
  Server: Apache
  Set-Cookie: TMog=B6HFCs2H20kA1I4N; domain=.about.com; path=/; expires=Sat, 22-Sep-12 14:19:35 GMT
  Set-Cookie: Mint=B6HFCs2H20kA1I4N; domain=.about.com; path=/
  Set-Cookie: zBT=1; domain=.about.com; path=/
  Vary: *
  PRAGMA: no-cache
  P3P: CP="IDC DSP COR DEVa TAIa OUR BUS UNI"
  Cache-Control: max-age=-3600
  Expires: Fri, 17 Jun 2011 14:12:56 GMT
  Connection: close
  Content-Type: text/html
Length: unspecified [text/html]

Es gibt Text / HTML zurück.

Da bei einigen älteren Browsern immer noch Probleme mit gzip-codiertem Inhalt auftreten, wird dieser auf vielen Websites nur basierend auf der Browseridentifikation aktiviert. Sie schalten es oft standardmäßig aus und nur dann, wenn sie wissen, dass der Browser es unterstützt - und normalerweise nehmen sie wget nicht in diese Liste auf. Dies bedeutet, dass Sie möglicherweise feststellen, dass wget niemals gzip-Inhalte zurückgibt, auch wenn die Site dies für Ihren Browser zu tun scheint.

EightBitTony
quelle
Aber ich habe ein paar Dateien und keine einzige komprimierte Datei ... oder ist meine wget-Version anders? (mit Ubuntu 11.04)
jomnana
Wenn Sie -S verwenden, können Sie die vom Server zurückgegebenen Header sehen, und wenn Sie dies unter linux.about.com tun, können Sie deutlich sehen, dass HTML-Inhalte zurückgegeben werden und keine gzip-Inhalte. wget -S --header = "accept-encoding: gzip" linux.about.com Inhaltstyp: text / html
EightBitTony
Da nicht alle Browser die gzip-Kodierung unterstützen (IE hat schwerwiegende Probleme), aktivieren viele Websites die gzip-Kodierung nur für jeden Browser und machen sich nicht die Mühe, dies für wget zu tun. Das erklärt wahrscheinlich, warum linux.about.com auf die Frage von wget kein GZIP sendet. Es behebt jedoch nicht das Hauptproblem, dass (AFAIK) gzippte Inhalte nicht wiederverwenden kann.
EightBitTony
1
Habe gerade folgendes ausprobiert: die wget-Ausgabe ist immer noch da Content-Type: text/html; charset=UTF-8, aber es gibt auch Content-Encoding: gzip. Es wäre keine transparente Komprimierung, wenn sie den MIME-Typ von allem auf gzip zwingen würde ... Ich bin gelaufen, strace -s 128 wget ...um tatsächlich einige der Bytes zu sehen, die vom Socket gelesen / auf die Festplatte geschrieben wurden. Sie sind nicht-ASCII. Also, während ich denke, dass Ihr Befehl im Jahr 2011 keine gezippte Version erhalten hat, war es im Jahr 2015 genauso. (wget 1.15).
Peter Cordes
Ich mache gerne "-O -", um die Seite auf stdout zu bringen und dann in gunzip zu leiten, um sicherzustellen, dass sie verstümmelt und klein ist, wenn sie nicht durch gzip geleitet wird, und groß und html, wenn sie durch gzip geleitet wird ...
nroose
0

Einfacher Befehl, um die HTML-Seite abzurufen und zu komprimieren oder eine beliebige Datei abzurufen und zu komprimieren.

$ wget -qO - <url> | gzip -c > file_name.gz

Weitere Informationen zu dieser Option. Verwenden Sie den Befehl man.

Hafiz Shehbaz Ali
quelle
2
OP möchte, dass die Daten während ihrer Übertragung komprimiert werden (accept-encoding: gzip), nicht nach
xhienne