使用 curl 或 wget 仅下载图像?

使用 curl 或 wget 仅下载图像?

更新:

我发现使用Bash 脚本修复了带有 .jpg 扩展名的 GIF 文件的问题。


我正在尝试从论坛下载图像,该论坛的网址使用以下格式:

http://www.someforum.com/attachment.php&id=XXX

我编写了一个 bash 脚本来wget 检索这些图像:

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 答案都可以接受。

答案1

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。

相关内容