Lưu một trang web duy nhất (có hình nền) với Wget


73

Tôi muốn sử dụng Wget để lưu các trang web đơn (không phải đệ quy, không phải toàn bộ trang web) để tham khảo. Giống như "Trang web, hoàn thành" của Firefox.

Vấn đề đầu tiên của tôi là: Tôi không thể để Wget lưu ảnh nền được chỉ định trong CSS. Ngay cả khi nó đã lưu các tệp hình ảnh nền mà tôi không nghĩ - các liên kết chuyển đổi sẽ chuyển đổi các URL hình ảnh nền trong tệp CSS để trỏ đến các hình nền được lưu cục bộ. Firefox có cùng một vấn đề.

Vấn đề thứ hai của tôi là: Nếu có hình ảnh trên trang tôi muốn lưu được lưu trữ trên một máy chủ khác (như quảng cáo) thì những thứ này sẽ không được đưa vào. --span-hosts dường như không giải quyết được vấn đề đó với dòng bên dưới.

Tôi đang sử dụng: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html


1
chính xác cùng một dòng (wget --no-Parent --timest Kẹp --convert-links --page-certisites --no-Directory --no-host-Directory -erobots = off domain.tld) ​​thực sự lưu hình ảnh nền được tham chiếu từ CSS sau khi cập nhật lên 1.12. Hướng dẫn sử dụng cho biết: "Với http url, Wget truy xuất và phân tích cú pháp html hoặc css từ url đã cho, truy xuất các tệp mà tài liệu tham chiếu, thông qua các giá trị đánh dấu như href hoặc src hoặc css uri được chỉ định bằng chức năng 'url ()' ký hiệu. " Vấn đề thứ hai vẫn cần được giải quyết
14124

Câu trả lời:


106

Từ trang Wget man :

Trên thực tế, để tải xuống một trang duy nhất và tất cả các yêu cầu của nó (ngay cả khi chúng tồn tại trên các trang web riêng biệt) và đảm bảo lô hiển thị đúng cách cục bộ, tác giả này thích sử dụng một vài tùy chọn ngoài '-p':

wget -E -H -k -K -p http://www.example.com/

Ngoài ra trong trường hợp robots.txtkhông cho phép bạn thêm-e robots=off


Có vẻ như nó chỉ đang viết lại js và css thành các url tuyệt đối
Greg Dean

1
đừng bận tâm, đó là robot.txt không cho phép tôi cập nhật câu trả lời với cách giải quyết
Greg Dean

19
Mở rộng:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
sam

4
Hoặc tốt hơn nữa là wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Petah

@ {etah: Tôi đã thử lệnh của bạn với các đối số của bạn, nó sẽ tải xuống các trang web khác ngoài một trang web được chỉ định cho nó.
Tim

7

Các wgetlệnh cung cấp tùy chọn --mirror, mà làm điều tương tự như:

$ wget -r -N -l inf --no-remove-listing

Bạn cũng có thể ném vào -xđể tạo toàn bộ phân cấp thư mục cho trang web, bao gồm cả tên máy chủ.

Tuy nhiên, bạn có thể không tìm thấy cái này nếu bạn không sử dụng phiên bản mới nhất wget.


1
Điều này có thể sẽ thu thập dữ liệu toàn bộ trang web với các url phụ của nó
4253wyerg4e

2

Có vẻ như wgetvà Firefox không phân tích CSS cho các liên kết để đưa các tệp đó vào tải xuống. Bạn có thể khắc phục những hạn chế đó bằng cách quên đi những gì bạn có thể và kịch bản trích xuất liên kết từ bất kỳ CSS hoặc Javascript nào trong các tệp đã tải xuống để tạo danh sách các tệp bạn đã bỏ lỡ. Sau đó, lần chạy thứ hai trong wgetdanh sách các liên kết đó có thể lấy bất cứ thứ gì bị bỏ lỡ (sử dụng -icờ để chỉ định URL liệt kê tệp).

Nếu bạn thích Perl, có một mô-đun CSS :: Parser trên CPAN có thể cung cấp cho bạn một phương tiện dễ dàng để trích xuất các liên kết theo cách này.

Lưu ý rằng wgetchỉ phân tích cú pháp đánh dấu html ( href/ src) và css uris ( url()) nhất định để xác định những trang cần thiết để nhận. Bạn có thể thử sử dụng các tiện ích bổ sung của Firefox như DOM Inspector hoặc Fireorms để tìm hiểu xem hình ảnh của bên thứ 3 mà bạn không nhận được có được thêm thông qua Javascript hay không - nếu vậy, bạn sẽ cần phải sử dụng tập lệnh hoặc plugin Firefox để có được chúng quá.


Giống như tôi đã nói trong bình luận cho bài viết đầu tiên của mình, có vẻ như nó đã được sửa trong v1.12. Tôi vẫn không biết làm thế nào để bao gồm hình ảnh trên các máy chủ khác.
dùng14124

vâng, phân tích CSS là mới trong wget v1.12, nó nằm ở đầu thay đổi: Freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote

Hãy thử thêm tùy chọn -H vào danh sách. Nó là viết tắt của --span-hosts và cho phép tải xuống nội dung từ các máy chủ bên ngoài.
Michael

2

Tôi đã tạo Webtography cho một mục đích tương tự: https://webjay.github.io/webtography/

Nó sử dụng Wget và đẩy trang web vào kho lưu trữ trên tài khoản GitHub của bạn.

Tôi sử dụng các đối số sau:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

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.