![如何使用终端从网站(非网页)下载所有图像?](https://linux22.com/image/1317754/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%BB%88%E7%AB%AF%E4%BB%8E%E7%BD%91%E7%AB%99%EF%BC%88%E9%9D%9E%E7%BD%91%E9%A1%B5%EF%BC%89%E4%B8%8B%E8%BD%BD%E6%89%80%E6%9C%89%E5%9B%BE%E5%83%8F%EF%BC%9F.png)
我想要一个命令,输入一个 URL,例如 photos.tumblr.com,它会下载这个网站上的所有照片到一个文件夹中,而不仅仅是网站首页的图片。这个命令需要下载网站所有部分的图片,例如 photos.tumblr.com/ph1/1.png / photos.tumblr.com/ph3/4.jpg。
请向我展示一个使用此 URL 的示例:http://neverending-fairytale.tumblr.com/在回答问题之前先测试一下
答案1
您可以使用:
wget -r -A=.jpg,.png http://website.com
使用此命令,您将获得所有 JPG 和 PNG 文件,但您可能会被禁止访问该网站。
因此,如果您使用:
wget --random-wait --limit-rate=100k -r -A=.jpg,.png http://website.com
您将在下载之间随机等待图像并设置速度限制。
答案2
你可以下载整个网站(我会使用wget -r -p -l inf -np
),然后(或同时)运行一个 shell 脚本来删除所有非图像文件(该file
命令可用于检查文件是否是图像)。
(-A/-R
wget 的选项不可靠;它们只检查 URL 的扩展名(因此您可以通过 .jpg、.jpeg、.png 等进行过滤),但没有要求这些选项必须存在。)
答案3
通过使用大多数单行命令提供的强力方法,您几乎无法获得良好的结果(尽管我经常使用 wget 选项来获取整个站点)。
我建议您创建一个脚本,使用某种形式的条件选择和循环来实际匹配并遵循将您带到所需图像的链接。
我通常遵循的策略:
- 在浏览器中,转到第一个感兴趣的页面并显示源代码;
- 右键单击图像->“图像属性”->找到“src =”属性和图像标签。
- 获取这些标签/链接/ href 的整体模式,并使用一些正则表达式(
grep -o
)来解析链接; - 使用这些链接和一些命令来下载图像;
- 还获取页面上通往其他页面的链接;
- 重复。
这确实比一行代码要复杂得多,但这种体验很有启发性。网页抓取本身就是一门艺术。
为此,我也推荐使用 Python,尽管如果您愿意,完全可以使用 Shell 脚本(bash)或任何脚本语言(Ruby、PHP、perl 等)来完成。
希望这可以帮助。