web-dev-qa-db-ja.com

curlまたはwgetを使用して画像のみをダウンロードしますか?

更新しました:

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回答は受け入れられます。

2
Ashley

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を返します。

4
dbenhur