CURL để tải xuống một thư mục


38

Tôi đang cố tải xuống một thư mục trang web đầy đủ bằng cách sử dụng CURL. Lệnh sau không hoạt động:

curl -LO http://example.com/

Nó trả về một lỗi : curl: Remote file name has no length!.

Nhưng khi tôi làm điều này: curl -LO http://example.com/someFile.typenó hoạt động. Bất kỳ ý tưởng làm thế nào để tải về tất cả các tập tin trong thư mục được chỉ định? Cảm ơn.

Câu trả lời:


33

Luôn luôn làm việc cho tôi, bao gồm không có cha mẹ và đệ quy để chỉ có được thư mục mong muốn.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
Đây phải là câu trả lời được chấp nhận.
Juan Jimenez

Đang cố tải xuống một thư mục từ git. Tôi đã thử wget --no-parent -r http://WEBSITE.com/DIRECTORYvà cũng không có --no-parent- không hoạt động.
Sam-T

32

HTTP không thực sự có một khái niệm về thư mục. Các dấu gạch chéo khác với ba ( http://example.com/) đầu tiên không có bất kỳ ý nghĩa đặc biệt nào ngoại trừ ..các URL tương đối. Vì vậy, trừ khi máy chủ tuân theo một định dạng cụ thể, không có cách nào để tải xuống tất cả các tệp trong thư mục được chỉ định.

Nếu bạn muốn tải xuống toàn bộ trang web, cách tốt nhất của bạn là duyệt qua tất cả các liên kết trong trang chính theo cách đệ quy. Curl không thể làm điều đó, nhưng wget có thể. Điều này sẽ hoạt động nếu trang web không quá năng động (đặc biệt, wget sẽ không thấy các liên kết được xây dựng bằng mã Javascript). Bắt đầu với wget -r http://example.com/và xem bên dưới Tùy chọn truy hồi đệ quy và các tùy chọn chấp nhận đệ quy và từ chối trong các hướng dẫn wget để biết thêm các tùy chọn phù hợp (độ sâu đệ quy, danh sách loại trừ, v.v.).

Nếu trang web cố gắng chặn tải xuống tự động, bạn có thể cần thay đổi chuỗi tác nhân người dùng ( -U Mozilla) và bỏ qua robots.txt(tạo tệp trống example.com/robots.txtvà sử dụng -nctùy chọn để wget không cố tải xuống từ máy chủ).


Làm thế nào wget có thể làm điều đó. ??
Srikan

@Srikan wget phân tích cú pháp HTML để tìm các liên kết mà nó chứa và tải đệ quy (một lựa chọn) các liên kết đó.
Gilles 'SO- ngừng trở nên xấu xa'

Nếu các tệp không có bất kỳ liên kết nội bộ nào, thì tải xuống đệ quy không nhận được tất cả các tệp. Hãy nói rằng có một thư mục HTTP của một số tệp txt. Sẽ wget thành công để có được tất cả các tập tin. Hãy để tôi thử nó sau nhận xét này
Srikan

@Srikan HTTP không có khái niệm về thư mục. Tải xuống đệ quy có nghĩa là theo các liên kết trong các trang web (bao gồm các trang web được tạo bởi máy chủ để hiển thị danh sách thư mục, nếu máy chủ web thực hiện việc này ).
Gilles 'SO- ngừng trở nên xấu xa'

wget hỗ trợ bỏ qua robot.txt với cờ -e robots=off. Ngoài ra, bạn có thể tránh tải xuống bằng cách từ chối với -R "robots.txt".
Ryan Krage

17

Trong trường hợp này, curlKHÔNG phải là công cụ tốt nhất. Bạn có thể sử dụng wgetvới -rđối số, như thế này:

wget -r http://example.com/ 

Đây là hình thức cơ bản nhất và bạn cũng có thể sử dụng các đối số bổ sung. Để biết thêm thông tin, xem manpage( man wget).


5

Điều này là không thể. Không có cách chuẩn, thường được triển khai, để một máy chủ web trả lại nội dung của một thư mục cho bạn. Hầu hết các máy chủ đều tạo ra một chỉ mục HTML của một thư mục, nếu được cấu hình để làm như vậy, nhưng đầu ra này không phải là tiêu chuẩn, cũng không được đảm bảo bởi bất kỳ phương tiện nào. Bạn có thể phân tích cú pháp HTML này, nhưng hãy nhớ rằng định dạng sẽ thay đổi từ máy chủ này sang máy chủ khác và sẽ không luôn được bật.


Nhìn vào ứng dụng này được gọi là Site Sucker. trang webucker.us . Họ làm nó như thế nào?
Foo

Họ phân tích tệp HTML và tải xuống mọi liên kết trong đó.
Brad

Sử dụng wgethay curl?
Foo

7
@Brad: curl không phân tích cú pháp HTML, nhưng wget thực hiện chính xác điều này (nó được gọi là truy xuất đệ quy).
Gilles 'SO- ngừng trở nên xấu xa'

1
Ah, tôi cũng đã sửa! gnu.org/software/wget/manual/html_node/ Bang OP nên biết rằng điều này vẫn không nhận được những gì anh ta đang tìm kiếm ... nó chỉ theo các liên kết có sẵn trên các trang được trả về.
Brad

2

Bạn có thể sử dụng tiện ích mở rộng Firefox DownThem ALL! Nó sẽ cho phép bạn tải xuống tất cả các tập tin trong một thư mục chỉ bằng một cú nhấp chuột. Nó cũng có thể tùy chỉnh và bạn có thể chỉ định loại tệp để tải xuống. Đây là cách dễ nhất mà tôi đã tìm thấy.


0

Bạn có thể tìm thấy việc sử dụng cho một trình trích xuất trang web ở đây, điều này sẽ tải xuống mọi thứ và sửa đổi nội dung / liên kết nội bộ để sử dụng cục bộ. Một cái tốt có thể được tìm thấy ở đây: http://www.httrack.com

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.