this Bashスクリプトを使用すると、拡張子が.jpgのGIFファイルがある問題が修正されます。
URLが次の形式を使用しているフォーラムから画像をダウンロードしようとしています。
http://www.someforum.com/attachment.php&id=XXX
wget
を使用してこれらの画像を取得するbashスクリプトを作成しました。
for i in {1..10}
do
wget --accept .jpg,.jpeg --cookies=on --load-cookies=cookies.txt -p "http://www.someforum.com/attachment.php&id=${i}" -O "image${i}.jpg"
done
それは動作し、画像をダウンロードします。ただし、画像がない場合でも、結果のHTMLをダウンロードして、XX.jpg
に詰め込みます。
Curlも同じことをします:
for i in {1..10}
do
curl --cookie cookies.txt "http://www.someforum.com/attachment.php&id=${i}" -o "image${i}.jpg"
done
/image/*
以外の結果を拒否する方法はありますか?今のところ、画像はjpegであると想定していますが、MIME/TYPEを検出し、適切なファイル名を使用するとよいでしょう。
最後に、画像が見つからない場合、wgetは500の応答コードを提供します。200の応答コードをフィルタリングできれば、解決策が得られる可能性があります。
Bash、Ruby、Python回答は受け入れられます。
wgetは、エラー時にゼロ以外の終了コードを返します。リモートが4xxまたは5xxステータスを発行した場合は、特に終了ステータス== 8に設定されます。したがって、wgetが正常に終了しない場合は、bashループを変更してファイルのリンクを解除できます。
for i in {1..10}
do
wget --accept .jpg,.jpeg --cookies=on --load-cookies=cookies.txt -p "http://www.someforum.com/attachment.php&id=${i}" -O "image${i}.jpg" || rm "image${i}.jpg"
done
同様に、curlには--failオプションがあり、ファイルを保存せず、httpステータスが> = 400の場合に終了ステータス22を返します。