CURL untuk mengunduh direktori


38

Saya mencoba mengunduh direktori situs web lengkap menggunakan CURL. Perintah berikut ini tidak berfungsi:

curl -LO http://example.com/

Kembali kesalahan: curl: Remote file name has no length!.

Tetapi ketika saya melakukan ini: curl -LO http://example.com/someFile.typeitu berhasil. Adakah yang tahu cara mengunduh semua file di direktori yang ditentukan? Terima kasih.

Jawaban:


33

Selalu bekerja untuk saya, tidak termasuk orang tua dan rekursif untuk hanya mendapatkan direktori yang diinginkan.

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

1
Ini harus menjadi jawaban yang diterima.
Juan Jimenez

Mencoba mengunduh folder dari git. Saya mencoba wget --no-parent -r http://WEBSITE.com/DIRECTORYdan juga tanpa --no-parent- tidak berhasil.
Sam-T

32

HTTP tidak benar-benar memiliki gagasan tentang direktori. Garis miring selain dari tiga yang pertama ( http://example.com/) tidak memiliki arti khusus kecuali sehubungan dengan ..dalam URL relatif. Jadi kecuali server mengikuti format tertentu, tidak ada cara untuk "mengunduh semua file di direktori yang ditentukan".

Jika Anda ingin mengunduh seluruh situs, taruhan terbaik Anda adalah dengan melintasi semua tautan di halaman utama secara rekursif. Curl tidak bisa melakukannya, tetapi wget bisa. Ini akan berfungsi jika situs web tidak terlalu dinamis (khususnya, wget tidak akan melihat tautan yang dibangun oleh kode Javascript). Mulailah dengan wget -r http://example.com/, dan lihat di bawah "Opsi Pengambilan Rekursif" dan "Opsi Penerimaan / Tolak Rekursif" di manual wget untuk opsi yang lebih relevan (kedalaman rekursi, daftar pengecualian, dll).

Jika situs web mencoba memblokir unduhan otomatis, Anda mungkin perlu mengubah string agen pengguna ( -U Mozilla), dan mengabaikan robots.txt(membuat file kosong example.com/robots.txtdan menggunakan -ncopsi sehingga wget tidak mencoba mengunduhnya dari server).


Bagaimana wget dapat melakukannya. ??
Srikan

@Srikan wget mem-parsing HTML untuk menemukan tautan yang dikandungnya dan mengunduh secara rekursif (pilihan) tautan tersebut.
Gilles 'SO- stop being evil'

Jika file tidak memiliki tautan internal apa pun, maka unduhan rekursif gagal mendapatkan semua file. Katakanlah ada folder HTTP dari beberapa file txt. Wget berhasil mendapatkan semua file. Biarkan saya mencobanya setelah komentar ini
Srikan

@Srikan HTTP tidak memiliki konsep direktori. Unduhan berulang berarti mengikuti tautan di halaman web (termasuk halaman web yang dibuat oleh server untuk menampilkan daftar direktori, jika server web melakukan ini ).
Gilles 'SANGAT berhenti menjadi jahat'

wget mendukung mengabaikan robots.txt dengan bendera -e robots=off. Atau Anda dapat menghindari mengunduhnya dengan menolaknya -R "robots.txt".
Ryan Krage

17

Dalam hal ini, curlBUKAN alat terbaik. Anda dapat menggunakannya wgetdengan -rargumen, seperti ini:

wget -r http://example.com/ 

Ini adalah bentuk paling dasar, dan dan Anda dapat menggunakan argumen tambahan juga. Untuk informasi lebih lanjut, lihat manpage( man wget).


5

Ini tidak mungkin. Tidak ada cara standar, yang secara umum diterapkan, bagi server web untuk mengembalikan konten direktori kepada Anda. Sebagian besar server memang menghasilkan indeks HTML direktori, jika dikonfigurasi untuk melakukannya, tetapi output ini tidak standar, atau dijamin dengan cara apa pun. Anda dapat mem-parsing HTML ini, tetapi perlu diingat bahwa formatnya akan berubah dari server ke server, dan tidak akan selalu diaktifkan.


Lihatlah aplikasi ini disebut Pengisap Situs. sitesucker.us . Bagaimana mereka melakukannya?
Foo

Mereka mem-parsing file HTML dan mengunduh setiap tautan di dalamnya.
Brad

Menggunakan wgetatau curl?
Foo

7
@Brad: curl tidak mem-parsing HTML, tetapi wget melakukan ini dengan tepat (ini disebut pengambilan rekursif).
Gilles 'SANGAT berhenti menjadi jahat'

1
Ah, baiklah saya berdiri dikoreksi! gnu.org/software/wget/manual/html_node/... OP harus menyadari bahwa ini masih belum mendapatkan apa yang dia cari ... hanya mengikuti tautan yang tersedia di halaman yang dikembalikan.
Brad

2

Anda dapat menggunakan ekstensi Firefox DownThemAll! Ini akan memungkinkan Anda mengunduh semua file dalam direktori dalam satu klik. Ini juga dapat disesuaikan dan Anda dapat menentukan jenis file apa yang akan diunduh. Ini adalah cara termudah yang saya temukan.


0

Anda mungkin menemukan penggunaan untuk ripper situs web di sini, ini akan mengunduh semuanya dan mengubah konten / tautan internal untuk penggunaan lokal. Yang bagus dapat ditemukan di sini: http://www.httrack.com

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.