Usando o wget, qual é o comando certo para obter a versão compactada em gzip em vez do HTML real

18

Eu me deparei com este site que fala sobre isso.

Então, ao baixar o site inteiro, obtendo a versão compactada, qual é o comando certo?

Eu testei este comando, mas não sei se o wget realmente está recebendo a versão compactada em gzip:

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
fonte
Você diz que testou esse comando, mas a resposta do @ EightBitTony abaixo parece dizer que o que você obteria disso seria um arquivo gzip do primeiro hit sem nenhuma recursão pelo site no site para obter mais arquivos. Esse foi o resultado que você obteve?
Caleb
linux.about.com é compactado com gzip, e este comando repassa o site inteiro. Testei esse comando em outro site e ele também recursa o site inteiro. É por isso que eu um pouco confuso se ele realmente baixar a versão compactado ou não
jomnana

Respostas:

19

Se você solicitar conteúdo compactado com gzip (usando o cabeçalho accept-encoding: gzip, que está correto), entendo que o wget não pode ler o conteúdo. Então, você terminará com um único arquivo compactado em gzip no disco, para a primeira página que você acessar, mas sem outro conteúdo.

ou seja, você não pode usar o wget para solicitar conteúdo compactado com gzip e para repetir todo o site ao mesmo tempo.

Eu acho que há um patch que permite ao wget suportar essa função, mas não está na versão de distribuição padrão.

Se você incluir o sinalizador -S, poderá saber se o servidor da web está respondendo com o tipo correto de conteúdo. Por exemplo,

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]

A codificação do conteúdo indica claramente gzip, no entanto, para linux.about.com (atualmente),

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]

Está retornando text / html.

Como alguns navegadores mais antigos ainda têm problemas com o conteúdo codificado por gzip, muitos sites o ativam apenas com base na identificação do navegador. Eles geralmente o desativam por padrão e o ativam apenas quando sabem que o navegador pode suportá-lo - e geralmente não incluem o wget nessa lista. Isso significa que você pode descobrir que o wget nunca retorna conteúdo gzip, mesmo que o site pareça fazê-lo no seu navegador.

EightBitTony
fonte
Mas eu tenho vários arquivos, e não um único arquivo compactado com gzip ... ou a minha versão do wget é diferente? (usando o Ubuntu 11.04)
jomnana
Se você usar -S, poderá ver os cabeçalhos retornados do servidor e, quando fizer isso no linux.about.com, poderá ver claramente que ele está retornando html, não gzip. wget -S --header = "accept-encoding: gzip" linux.about.com Tipo de conteúdo: text / html
EightBitTony
Como nem todos os navegadores suportam a codificação gzip (o IE tem problemas importantes), muitos sites só ativam a codificação gzip por navegador e não se preocupam em fazê-lo para o wget. Isso provavelmente explica por que o linux.about.com não gzip quando solicitado pelo wget. Mas isso não corrige o problema principal que (AFAIK) não pode repetir o conteúdo compactado em gzip.
EightBitTony
1
Apenas tentei isso: a saída do wget ainda é Content-Type: text/html; charset=UTF-8, mas também existe Content-Encoding: gzip. Não seria compactação transparente se usá-lo forçasse o tipo MIME de tudo a compactar com gzip ... Corri strace -s 128 wget ...para ver alguns dos bytes lidos do soquete / gravados no disco. Eles não são ASCII. Então, enquanto eu acho que em 2011 seu comando não recebeu uma versão compactada em gzip, em 2015 o mesmo comando recebeu. (wget 1.15).
Peter Cordes
Eu gosto de fazer "-O -" para fazer com que a página fique stdout e, em seguida, introduza-a no gunzip para garantir que ela seja distorcida e pequena quando não for canalizada pelo gzip e grande e html quando for canalizada pelo gzip ...
nroose
0

comando simples para obter a página html e compactá-la ou obter qualquer arquivo e compactado.

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

para mais informações sobre a opção. use o comando man.

Hafiz Shehbaz Ali
fonte
2
O OP quer que os dados sejam compactados durante a transferência (accept-encoding: gzip), não depois
xhienne