Lấy tất cả các tệp từ một trang web bằng cách sử dụng curl


86

Tôi muốn tải xuống tất cả các tệp cùng một lúc, từ trang sau bằng cách sử dụng curl: http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Tôi đã thử curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/và nó trả về một loạt các dòng trong thiết bị đầu cuối, nhưng không nhận được bất kỳ tập tin nào.

Câu trả lời:


125

Sử dụng wgetthay thế. Bạn có thể cài đặt nó brew install wgetnếu bạn đã cài đặt Homebrew hoặc sudo port install wgetnếu bạn đã cài đặt MacPorts.

Để tải xuống các tệp từ danh sách thư mục, hãy sử dụng -r(đệ quy), -np(không theo liên kết đến thư mục mẹ) và -kđể tạo liên kết trong HTML hoặc CSS được tải xuống trỏ đến các tệp cục bộ (credit @xaccrocheur).

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Các tùy chọn hữu ích khác:

  • -nd (không có thư mục): tải tất cả các tệp vào thư mục hiện tại
  • -e robots.off: bỏ qua các tệp robots.txt, không tải xuống các tệp robots.txt
  • -A png,jpg: chỉ chấp nhận các tệp có phần mở rộng pnghoặcjpg
  • -m (gương): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: Bỏ qua tải xuống nếu tệp tồn tại

3
wget -r -np -k http://your.website.com/specific/directory. Thủ thuật là sử dụng -kđể chuyển đổi các liên kết (hình ảnh, v.v.) để xem cục bộ.
yPhil

brewportkhông làm việc cho tôi để cài đặt wget. Tôi nên làm gì?
Hoseyn Heydari

@HoseynHeydari: bạn có thể sử dụng rudix.org cho các tệp nhị phân được biên dịch cho osx. Vì vậy, bạn cần cài đặt rudix và sau đó sử dụng: sudo rudix cài đặt wget
Mamonu

Tùy chọn -kkhông phải lúc nào cũng hoạt động. Ví dụ: nếu bạn có hai liên kết trỏ đến cùng một tệp trên trang web mà bạn đang cố gắng nắm bắt đệ quy, wgetdường như chỉ chuyển đổi liên kết của phiên bản đầu tiên chứ không phải liên kết thứ hai.
Kun

22

curlchỉ có thể đọc các tệp trang web duy nhất, các dòng bạn nhận được thực sự là chỉ mục thư mục (mà bạn cũng thấy trong trình duyệt của mình nếu bạn truy cập URL đó). Để sử dụng curlvà một số công cụ Unix ma thuật để có được các tệp bạn có thể sử dụng một cái gì đó như

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

sẽ nhận được tất cả các tập tin vào thư mục hiện tại.

Đối với các nhu cầu phức tạp hơn (bao gồm nhận một loạt các tệp từ một trang web có thư mục / thư mục), wget(như đã đề xuất trong câu trả lời khác) là lựa chọn tốt hơn.


Cảm ơn bạn. Đây là một giải pháp tốt đẹp và cung cấp ví dụ làm việc là tuyệt vời!
egelev

1
xmllint --html --xpath '//a/@href'có lẽ là một trình phân tích cú pháp tốt hơn grep.
ceving

7

Tham chiếu: http://blog.incognitech.in/doad-files-from-apache-server-listing-directory/

Bạn có thể sử dụng lệnh sau:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

Giải thích với từng lựa chọn

  • wget: Lệnh đơn giản để thực hiện yêu cầu CURL và tải các tệp từ xa về máy cục bộ của chúng tôi.
  • --execute="robots = off": Điều này sẽ bỏ qua tệp robots.txt trong khi thu thập thông tin qua các trang. Sẽ rất hữu ích nếu bạn không nhận được tất cả các tệp.
  • --mirror: Tùy chọn này về cơ bản sẽ phản ánh cấu trúc thư mục cho URL đã cho. Đó là một phím tắt -N -r -l inf --no-remove-listingcó nghĩa là:
    • -N: không truy xuất lại các tập tin trừ khi mới hơn cục bộ
    • -r: chỉ định tải xuống đệ quy
    • -l inf: độ sâu đệ quy tối đa (inf hoặc 0 cho vô hạn)
    • --no-remove-listing: không xóa các tệp '.listing'
  • --convert-links: tạo liên kết trong HTML hoặc CSS được tải xuống tới các tệp cục bộ
  • --no-parent: không lên thư mục mẹ
  • --wait=5: chờ 5 giây giữa các lần truy xuất. Vì vậy, chúng tôi không đập phá máy chủ.
  • <website-url>: Đây là url trang web từ nơi tải xuống các tệp.

Tải về hạnh phúc: cười:


3

Bạn có thể sử dụng omerack có sẵn cho Windows / MacOS và có thể cài đặt qua Homebrew.


một cái gì đó mới cho tôi, cảm ơn. tốt nhất là nó nhanh và nhanh: một người. Chỉ cần cắt giảm chất béo và tránh tất cả rác.
Peter Teoh

0

Đối với những người trong chúng ta, những người muốn sử dụng một ứng dụng với GUI, có chương trình phần mềm chia sẻ rẻ tiền DeepVacuum cho Mac OS X , thực hiện wgettheo cách thân thiện với người dùng, với một danh sách các cài đặt trước có thể xử lý các tác vụ cần thiết. Bạn cũng có thể lưu cấu hình tùy chỉnh của riêng bạn dưới dạng cài đặt trước.

nhập mô tả hình ảnh ở đây

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.