更新:
我发现使用这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。