使用wget,什么是获取压缩版本而不是实际HTML的正确命令


18

我偶然发现了这个网站

因此,当通过获取压缩版本下载整个网站时,正确的命令是什么?

我已经测试了此命令,但是我不知道wget是否真的得到了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/

您说您已经测试了该命令,但是@EightBitTony在下面的回答似乎表明,您从中得到的将是第一次命中的gzip文件,而无需通过站点递归即可获取更多文件。那是你得到的结果吗?
Caleb

linux.about.com是gzip压缩的,此命令递归整个站点。我已经在其他网站上测试了此命令,并且它也递归了整个网站。这就是为什么我有点糊涂是否真的下载gzip压缩的版本或不
jomnana

Answers:


19

如果您请求使用gzip格式的内容(使用正确的accept-encoding:gzip标头),那么据我了解,wget无法读取内容。因此,对于您击中的第一页,最终将只有一个压缩后的磁盘文件,但没有其他内容。

即,您不能使用wget请求压缩的内容并同时递归整个网站。

我认为有一个补丁允许wget支持此功能,但它不在默认的发行版本中。

如果包含-S标志,则可以判断Web服务器是否以正确的内容类型进行响应。例如,

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]

内容编码清楚地指出了gzip,但是对于linux.about.com(当前),

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]

它正在返回text / html。

由于某些较旧的浏览器仍然存在gzip编码内容的问题,因此许多站点仅基于浏览器标识来启用它。他们通常默认情况下将其关闭,并且仅在知道浏览器可以支持它的情况下才将其关闭-并且通常不在该列表中包含wget。这意味着您可能会发现wget永远不会返回gzip内容,即使该网站似乎针对您的浏览器也是如此。


但是我得到了一堆文件,而不是一个压缩文件……或者我的wget版本是否有所不同?(使用Ubuntu 11.04)
jomnana11年

如果使用-S,则可以看到服务器返回的标头,并且针对linux.about.com执行此操作时,可以清楚地看到它返回的是html而不是gzip内容。wget -S --header =“ accept-encoding:gzip” linux.about.com内容类型:text / html
EightBitTony 2011年

由于并非所有浏览器都支持gzip编码(IE出现了主要问题),因此许多网站仅在每个浏览器的基础上启用gzip编码,而不会为wget这么做。这可能解释了为什么wget询问linux.about.com没有gzip的原因。但这不能解决wget无法递归压缩内容的主要问题。
八比特托尼2011年

1
刚刚尝试过:wget输出仍然是Content-Type: text/html; charset=UTF-8,但是也有Content-Encoding: gzip。如果使用它强制将所有内容的MIME类型都压缩为gzip,那将不是透明压缩...我跑来strace -s 128 wget ...实际上是看到一些从套接字读取的字节/已写入磁盘。它们是非ASCII的。因此,虽然我认为您的命令在2011年没有收到压缩版本,但在2015年,该命令却收到了。(wget 1.15)。
彼得·科德斯

我喜欢执行“ -O-”以使页面进入stdout,然后将其通过管道传递到gunzip中,以确保在未通过gzip传递时页面是乱码和小,而通过gzip传递时则是大
字体

0

简单的命令来获取html页面并对其进行压缩,或者获取任何文件并对其进行压缩。

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

有关该选项的更多信息。使用man命令。


2
OP希望在传输过程中压缩数据(接受编码:gzip),而不是在之后
xhienne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.