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
向操作系统询问一个随机数
我正在使用 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
向操作系统询问一个随机数