Mendapatkan semua file dari halaman web menggunakan curl


Jawaban:


125

Gunakan wgetsebagai gantinya. Anda dapat menginstalnya dengan brew install wgetapakah Anda telah menginstal Homebrew atau sudo port install wgetjika Anda telah menginstal MacPorts.

Untuk mengunduh file dari daftar direktori, gunakan -r(rekursif), -np(jangan ikuti tautan ke direktori induk), dan -kuntuk membuat tautan dalam HTML atau CSS yang diunduh mengarah ke file lokal (kredit @xaccrocheur).

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

Opsi berguna lainnya:

  • -nd (tanpa direktori): unduh semua file ke direktori saat ini
  • -e robots.off: abaikan file robots.txt, jangan unduh file robots.txt
  • -A png,jpg: hanya menerima file dengan ekstensi pngataujpg
  • -m (cermin): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: Lewati unduhan jika file ada

3
wget -r -np -k http://your.website.com/specific/directory. Caranya adalah dengan menggunakan -kuntuk mengonversi tautan (gambar, dll.) Untuk tampilan lokal.
yPhil

brewdan porttidak berfungsi bagi saya untuk menginstal wget. Apa yang harus saya lakukan?
Hoseyn Heydari

@HoseynHeydari: Anda dapat menggunakan rudix.org untuk kompilasi binari untuk osx. jadi Anda perlu menginstal rudix dan kemudian menggunakan: sudo rudix install wget
Mamonu

Opsi -ktidak selalu berfungsi. Misalnya, jika Anda memiliki dua tautan yang menunjuk ke file yang sama di laman web yang Anda coba tangkap secara rekursif, wgetsepertinya hanya mengubah tautan dari contoh pertama tetapi bukan yang kedua.
Kun

22

curlhanya bisa membaca file halaman web tunggal, banyak baris yang Anda dapatkan sebenarnya adalah indeks direktori (yang juga Anda lihat di browser jika Anda membuka URL itu). Untuk menggunakan curldan beberapa alat Unix sihir untuk mendapatkan file Anda bisa menggunakan sesuatu seperti

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

yang akan memasukkan semua file ke direktori saat ini.

Untuk kebutuhan yang lebih rumit (termasuk mendapatkan banyak file dari situs dengan folder / direktori), wget(seperti yang sudah diusulkan dalam jawaban lain) adalah pilihan yang lebih baik.


Terima kasih. Ini adalah solusi yang bagus dan memberikan contoh yang bagus!
egelev

1
xmllint --html --xpath '//a/@href'mungkin parser yang lebih baik daripada grep.
ceving

8

Ref: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

Anda dapat menggunakan perintah berikut:

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

Penjelasan dengan masing-masing opsi

  • wget: Perintah Sederhana untuk membuat permintaan CURL dan mengunduh file jarak jauh ke mesin lokal kami.
  • --execute="robots = off": Ini akan mengabaikan file robots.txt saat merayapi halaman. Akan sangat membantu jika Anda tidak mendapatkan semua file.
  • --mirror: Opsi ini pada dasarnya akan mencerminkan struktur direktori untuk URL yang diberikan. Ini adalah jalan pintas -N -r -l inf --no-remove-listingyang artinya:
    • -N: jangan mengambil kembali file kecuali yang lebih baru dari lokal
    • -r: tentukan unduhan rekursif
    • -l inf: kedalaman rekursi maksimum (inf atau 0 untuk tak terbatas)
    • --no-remove-listing: jangan hapus file '.listing'
  • --convert-links: buat tautan dalam HTML atau CSS yang diunduh ke file lokal
  • --no-parent: jangan naik ke direktori induk
  • --wait=5: tunggu 5 detik antara pengambilan. Sehingga kami tidak membasmi server.
  • <website-url>: Ini adalah url situs web tempat untuk mengunduh file.

Selamat Mengunduh: smiley:


3

Anda dapat menggunakan httrack yang tersedia untuk Windows / MacOS dan dapat diinstal melalui Homebrew.


sesuatu yang baru untukku, terima kasih. terbaik adalah cepat dan cepat: satu -liner. potong saja lemaknya dan hindari semua sampah.
Peter Teoh

0

Bagi kita yang lebih suka menggunakan aplikasi dengan GUI, ada program shareware murah DeepVacuum untuk Mac OS X , yang mengimplementasikannya wgetdengan cara yang ramah pengguna, dengan daftar preset yang dapat menangani tugas-tugas yang biasanya dibutuhkan. Anda juga dapat menyimpan konfigurasi khusus Anda sebagai preset.

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.