Sử dụng Wget để thu thập dữ liệu một trang web và tải xuống hình ảnh


13

Làm thế nào để bạn hướng dẫn wget thu thập dữ liệu một cách đệ quy một trang web và chỉ tải xuống một số loại hình ảnh nhất định?

Tôi đã thử sử dụng điều này để thu thập dữ liệu một trang web và chỉ tải xuống hình ảnh Jpeg:

wget --no-parent --wait=10 --limit-rate=100K --recursive --accept=jpg,jpeg --no-directories http://somedomain/images/page1.html

Tuy nhiên, mặc dù page1.html chứa hàng trăm liên kết đến các trang con, bản thân chúng có liên kết trực tiếp đến hình ảnh, nhưng hãy báo cáo những điều như "Xóa subpage13.html vì nó sẽ bị từ chối" và không bao giờ tải xuống bất kỳ hình ảnh nào, vì không có liên kết trực tiếp nào từ trang bắt đầu.

Tôi cho rằng điều này là do --accept của tôi đang được sử dụng để cả thu thập thông tin và lọc nội dung để tải xuống, trong khi tôi muốn nó chỉ được sử dụng để chỉ đạo tải xuống nội dung. Làm cách nào để tôi có thể thu thập dữ liệu tất cả các liên kết, nhưng chỉ tải xuống các tệp có phần mở rộng nhất định như * .jpeg?

EDIT: Ngoài ra, một số trang là động và được tạo thông qua tập lệnh CGI (ví dụ: img.cgi? Fo9s0f989wefw90e). Ngay cả khi tôi thêm cgi vào danh sách chấp nhận của mình (ví dụ: --accept = jpg, jpeg, html, cgi), những thứ này vẫn luôn bị từ chối. Có cách nào để giái quyết vấn đề này không?

Câu trả lời:


5

Tại sao bạn không thử sử dụng wget -A jpg,jpeg -r http://example.com?


Câu hỏi nêu rõ rằng một số hình ảnh có dạng /url/path.cgi?query, vì vậy đề xuất của bạn sẽ không tìm nạp chúng.
Charles Stewart

1

Làm thế nào để bạn mong muốn biết nội dung của subpage13.html (và vì vậy jpg mà nó liên kết đến) nếu nó không được phép tải xuống. Tôi đề nghị bạn cho phép html, lấy những gì bạn muốn, sau đó xóa những gì bạn không muốn.


Tôi không chắc chắn về lý do tại sao cgi của bạn bị từ chối ... có lỗi nào xảy ra bởi wget không? Có lẽ làm cho wget verbose ( -v) và xem. Có thể là tốt nhất như một câu hỏi riêng biệt.

Điều đó nói rằng, nếu bạn không quan tâm đến băng thông và tải xuống nhiều thì hãy loại bỏ những gì bạn không muốn, điều đó không thành vấn đề.


Ngoài ra kiểm tra --html-extension

Từ trang người đàn ông:

-E

--html-phần mở rộng

Nếu một tệp loại ứng dụng / xhtml + xml hoặc văn bản / html được tải xuống và URL không kết thúc bằng biểu thức chính quy. [Hh] [Tt] [Mm] [Ll]?, Tùy chọn này sẽ gây ra hậu tố .html gắn vào tên tệp cục bộ. Ví dụ, điều này rất hữu ích khi bạn phản chiếu một trang web từ xa sử dụng các trang .asp, nhưng bạn muốn các trang được nhân đôi có thể xem được trên máy chủ Apache của bạn. Một cách sử dụng tốt khác cho việc này là khi bạn đang tải xuống các tài liệu được tạo ra bởi CGI. Một URL như http://site.com/article.cgi?25 sẽ được lưu dưới dạng article.cgi? 25.html.

Lưu ý rằng tên tệp được thay đổi theo cách này sẽ được tải xuống lại mỗi khi bạn phản chiếu lại một trang web, bởi vì Wget canât nói rằng tệp X.html cục bộ tương ứng với URL X từ xa (vì nó không biết rằng URL tạo ra đầu ra loại text / html hoặc application / xhtml + xml. Để ngăn việc tải xuống lại này, bạn phải sử dụng -k và -K để phiên bản gốc của tệp sẽ được lưu dưới dạng X.orig.


--restrict-file-names=unix cũng có thể hữu ích do những url cgi đó ...


Tôi nên dừng liên kết các tùy chọn wget .. sắp chỉ ra --no-parentnhưng tôi sẽ dừng ở đó.
đắt tiền

0

Bạn cũng có thể sử dụng Meta Products Offline Explorer mà không cần lập trình


-1

Hãy thử thêm --page-requisitestùy chọn


Đó là tải tất cả các phương tiện liên kết. Cách duy nhất để sử dụng wget để tải xuống hình ảnh là tải xuống TẤT CẢ nội dung trên một trang?!
Cerin
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.