网页抓取- wget,递归下载所有的jpeg只在网站主页上工作



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

我搜索了很多,应该是这样的:

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

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

执行此命令只下载网站首页的jpeg文件,而不是下载所有网站的jpeg文件。

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

如果我从前面的命令中删除过滤器,它将按预期工作

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

这发生在Lubuntu 16.04 64bit, wget 1.17.1

这是一个bug还是我误解了什么?

我怀疑这是因为您提到的主页包含到http://.../something.php形式的其他页面的链接,也就是说,有一个显式扩展。然后,选项-A jpeg具有从遍历过程中删除这些页面的"副作用"。

在这种特殊情况下,可能会有一些不太干净的解决方案,比如:

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

。,只下载必要的额外页面,然后在wget成功终止时删除它们。

ewcz的回答给我指出了正确的方向,--accept acclist参数有双重作用,它定义了文件保存的规则和以下链接的规则。

深入阅读手册我发现了这个

如果指定了'——adjust-extension ',则本地文件名可能会附加' .html '。如果Wget用' -E - a.p php '调用,像' index.php '这样的文件名将被接受,但在下载时将被命名为' index.php.html ',它不再匹配,因此文件将被删除。

所以你可以这样做

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

当然,网站管理员也可以使用自定义扩展名

所以我认为最健壮的解决方案是bash脚本之类的像

WEBSITE="http://www.hotelninfea.com"
DEST_DIR="."
image_urls=`wget -nd --spider -r "$WEBSITE" 2>&1 | grep '^--' | awk '{ print $3 }' | 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向操作系统请求一个随机数

最新更新