wget,递归下载所有 jpeg 仅适用于网站主页

wget, recursively download all jpegs works only on website homepage

我正在使用 wget 从网站下载所有 jpeg。

查了很多,应该是这样的:

wget -r -nd -A jpg  "http://www.hotelninfea.com"

这应该递归地 -r 下载文件 jpegs -A jpg 并将所有文件存储在一个目录中,而无需重新创建网站目录树 -nd

运行这个命令只下载网站首页的jpeg,而不是所有网站的全部jpeg。

我知道 jpeg 文件可以有不同的扩展名(jpg、jpeg)等等,但事实并非如此,也没有任何 robots.txt 限制作用。

如果我从上一个命令中删除过滤器,它将按预期工作

wget -r -nd "http://www.hotelninfea.com"

这发生在 Lubuntu 16.04 64 位,wget 1.17.1

这是错误还是我误解了什么?

我怀疑发生这种情况是因为您提到的主页包含以 http://.../something.php 形式指向其他页面的链接,即有一个明确的扩展名。然后选项 -A jpeg 具有从遍历过程中删除这些页面的 "side-effect"。

在这种特殊情况下,可能有点肮脏的解决方法是这样的:

wget -r -nd -A jpg,jpeg,php  "http://www.hotelninfea.com" && rm -f *.php

即仅下载必要的额外页面,然后在 wget 成功终止时将其删除。

ewcz anwer 给我指出了正确的方法,--accept acclist 参数具有双重作用,它定义了文件保存规则和跟随链接的规则。

深入阅读the manual我发现了这个

If ‘--adjust-extension’ was specified, the local filename might have ‘.html’ appended to it. If Wget is invoked with ‘-E -A.php’, a filename such as ‘index.php’ will match be accepted, but upon download will be named ‘index.php.html’, which no longer matches, and so the file will be deleted.

所以你可以这样做

wget -r -nd -E -A jpg,php,asp "http://www.hotelninfea.com"

但网站管理员当然可以使用 custom extensions

所以我认为最可靠的解决方案是 bash 脚本,一些东西 喜欢

WEBSITE="http://www.hotelninfea.com"
DEST_DIR="."

image_urls=`wget -nd --spider -r "$WEBSITE" 2>&1 | grep '^--' | awk '{ print  }' | grep -i '\.\(jpeg\|jpg\)'`

for image_url in $image_urls; do
  DESTFILE="$DEST_DIR/$RANDOM.jpg"
  wget "$image_url" -O "$DESTFILE"
done

--spider wget 不会下载页面,只是检查它们是否存在
$RANDOM 向操作系统询问一个随机数