Saya mengunduh halaman sumber HTML situs web menggunakan cURL
perintah. Masalahnya adalah, saya tidak ingin sebagian besar konten di halaman. Saya hanya perlu 100 baris pertama dari halaman sumber. Apakah ada cara untuk menghentikan pengunduhan halaman setelah beberapa baris pertama?
Saat ini, saya memiliki perintah di bawah ini yang bekerja tetapi sepertinya tidak efektif waktu.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
Saya mencoba mengubah nilai dari 1
menjadi .5
dan .05
dan masih seluruh halaman web diunduh.
Saya melihat waktu kurang dari satu detik untuk menjalankan perintah di atas.
EDIT
Dari halaman manual cURL
, saya melihat bahwa " Anda juga harus menyadari bahwa banyak server HTTP / 1.1 tidak mengaktifkan fitur ini, sehingga ketika Anda mencoba untuk mendapatkan jangkauan, Anda akan mendapatkan seluruh dokumen. " Jadi jika server tidak mendukung kisaran kueri, apakah ada perintah lain di nix
lingkungan yang akan membantu saya menyelesaikan apa yang saya coba lakukan?
Saya belum benar-benar menguji aplikasi khusus ini, tetapi ada sesuatu yang memberitahu saya bahwa Anda dapat memasangkan dd dan nc di sini:
Netcat (
nc
) mungkin memerlukan konfigurasi lebih lanjut untuk mendapatkan tajuk permintaan dengan benar, tetapi jika itu adalah situs publik, Anda harus dapat meyakinkan hasil yang bermanfaat jika Anda cukup peduli untuk mencoba. Tentu saja dd hanya akan mengambil input sebanyak yang Anda tentukan dan keluar, yang akan SIGPIPE netcat sehingga akan segera mengikutinya. Satu-satunya trik nyata adalah menyetrika jabat tangan awal - setelah Anda memulai aliran, Anda dapat menjatuhkannya kapan pun Anda mau.EDIT
Membaca komentar slm telah mendorong saya untuk mendukung gerakan itu; jika Anda bisa membuat serial JSON POST dalam format yang benar, itu pasti cara untuk mendapatkan respons yang lebih tepat waktu. Parsing HTML adalah untuk burung.
Salah satu trik yang berguna untuk itu adalah untuk menangkap aliran jaringan Anda saat berkomunikasi dengan server di browser Anda, kemudian ketika browser Anda mengirim POST yang memberi Anda apa yang ingin Anda kirim lagi sebagai GET dan lihat hasilnya.
sumber
The
head
Perintah biasanya akan menghentikan download sebelum berakhir (meskipun untuk file pendek itu dapat mengisi pipa penyangga sebelum pipa ditutup). Ini karena ketika pipa ditutup,curl
tidak punya tempat untuk menulis (deskriptor file ditutup, tulis gagal).Namun, dalam pengalaman saya, hal terpanjang saat mengunduh menunggu permintaan DNS (menyakitkan ketika Anda mengunduh ratusan file secara berurutan). Ini dapat dibantu dengan cache DNS lokal seperti
dnsmasq
atau, jika Anda menggunakan nama domain yang sama berkali-kali dengan struktur direktori yang berbeda, cukup atasi saja ke IP satu kali dan lakukan penggantian pada URL.Untuk membuktikan maksud saya ... coba
time netstat
versustime netstat -n
(tanpa cache perbedaannya dramatis, dengan cache, itu hanya buruk pertama kali, maka ia ingat).sumber