Sử dụng wget, Lệnh đúng để có phiên bản được nén là gì thay vì HTML thực tế


18

Tôi tình cờ thấy trang web này nói về điều này.

Vậy khi tải xuống toàn bộ trang web bằng cách lấy phiên bản được nén, lệnh nào là đúng?

Tôi đã thử lệnh này, nhưng tôi không biết liệu wget có thực sự có phiên bản được nén không:

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/

Bạn nói rằng bạn đã kiểm tra lệnh đó, nhưng câu trả lời của @ EightBitTony bên dưới dường như nói rằng những gì bạn sẽ nhận được từ đó sẽ là một tệp gzip của lần truy cập đầu tiên mà không có bất kỳ đệ quy nào thông qua trang web cho nhiều tệp hơn. Đó có phải là kết quả bạn nhận được?
Caleb

linux.about.com được nén bằng gzip và lệnh này lặp lại toàn bộ trang web. Tôi đã thử lệnh này trên trang web khác và nó cũng lặp lại toàn bộ trang web. Đó là lý do tại sao tôi hơi bối rối liệu nó có thực sự tải xuống phiên bản được nén hay không
jomnana

Câu trả lời:


19

Nếu bạn yêu cầu nội dung gzip'ed (sử dụng tiêu đề accept-mã hóa: gzip, đúng), thì tôi hiểu rằng wget không thể đọc nội dung. Vì vậy, bạn sẽ kết thúc với một tệp duy nhất, được nén trên đĩa, cho trang đầu tiên bạn nhấn, nhưng không có nội dung nào khác.

tức là bạn không thể sử dụng wget để yêu cầu nội dung được nén và lặp lại toàn bộ trang web cùng một lúc.

Tôi nghĩ rằng có một bản vá cho phép wget hỗ trợ chức năng này nhưng nó không có trong phiên bản phân phối mặc định.

Nếu bạn bao gồm cờ -S, bạn có thể biết liệu máy chủ web có phản hồi với đúng loại nội dung hay không. Ví dụ,

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]

Mã hóa nội dung ghi rõ gzip, tuy nhiên đối với linux.about.com (hiện tại),

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]

Đó là trả lại văn bản / html.

Vì một số trình duyệt cũ hơn vẫn có vấn đề với nội dung được mã hóa gzip, nhiều trang web chỉ kích hoạt nó dựa trên nhận dạng trình duyệt. Họ thường tắt nó theo mặc định và chỉ tắt nó khi họ biết trình duyệt có thể hỗ trợ nó - và họ thường không bao gồm wget trong danh sách đó. Điều này có nghĩa là bạn có thể thấy wget không bao giờ trả lại nội dung gzip ngay cả khi trang web dường như làm như vậy cho trình duyệt của bạn.


Nhưng tôi đã nhận được rất nhiều tệp và không phải là một tệp được nén ... hoặc phiên bản wget của tôi có khác không? (sử dụng Ubuntu 11.04)
jomnana

Nếu bạn sử dụng -S, bạn có thể thấy các tiêu đề được trả về từ máy chủ và khi bạn làm điều đó với linux.about.com, bạn có thể thấy rõ nó đang trả về html, không phải nội dung gzip. wget -S --header = "accept-mã hóa: gzip" linux.about.com Loại nội dung: text / html
EightBitTony

Vì không phải tất cả các trình duyệt đều hỗ trợ mã hóa gzip (IE có vấn đề lớn), nhiều trang web chỉ kích hoạt mã hóa gzip trên cơ sở mỗi trình duyệt và không bận tâm làm điều đó cho wget. Điều đó có thể giải thích tại sao linux.about.com không gzip khi được hỏi bởi wget. Nhưng nó không khắc phục được vấn đề chính mà (AFAIK) không thể lặp lại nội dung được nén.
EightBitTony

1
Chỉ cần thử điều này: đầu ra wget vẫn còn Content-Type: text/html; charset=UTF-8, nhưng cũng có Content-Encoding: gzip. Nó sẽ không được nén trong suốt nếu sử dụng nó buộc loại MIME của mọi thứ phải gzip ... Tôi đã chạy strace -s 128 wget ...để thực sự thấy một số byte được đọc từ ổ cắm / ghi vào đĩa. Họ không phải là ASCII. Vì vậy, trong khi tôi nghĩ vào năm 2011, lệnh của bạn không nhận được phiên bản được nén, năm 2015, lệnh tương tự đã làm. (quên 1.15).
Peter Cordes

Tôi thích làm "-O -" để đưa trang vào stdout và sau đó chuyển nó thành gunzip để đảm bảo rằng nó bị cắt xén và nhỏ khi không được dẫn qua gzip và lớn và html khi được dẫn qua gzip ...
nroose

0

lệnh đơn giản để lấy trang html và nén nó hoặc lấy bất kỳ tệp nào và nén.

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

để biết thêm thông tin về tùy chọn. sử dụng lệnh man.


2
OP muốn dữ liệu được nén trong quá trình chuyển của họ (mã hóa chấp nhận: gzip), không phải sau
xhienne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.