我有 900 个 URL 的列表。每页包含一张图像。有些图像是重复的(具有相同的 URL)。我想下载 900 张图片,包括重复。
我能够使用 wget 下载所有页面和嵌入图像(并忽略所有其他文件类型)。但在我看来,wget 会“忽略”之前已经下载过的图像。我有 900 页,但只有大约 850 张图像。
(如何)我也可以告诉 wget 下载重复项吗?它可以在文件名处附加_1
, , ... 。_2
我的 wget 命令:
wget --input-file=urls.txt --output-file=log.txt --wait 1 --random-wait --page-requisites --exclude-domains code.jquery.com --span-hosts --reject thumbnail*.png -P downloadfolder
答案1
我认为你的问题是--page-requisites
。我怀疑它会识别重复项并避免再次下载它们。这通常就是您想要的。您可以通过为每个 URL 调用一次 wget 并每次将其下载到不同的文件夹来解决这个问题,如下所示:
#!/bin/bash
let i=0
while IFS=$'\n' read url; do
let i++;
wget -nv -P $i --page-requisites "$url";
done < urls.txt
但是,您只需要每个文件中包含的单个图像。这应该可以解决问题:
wget -i urls.txt -q -O - | ...extract image URLs... | wget -nv -i -
从 HTML 中提取 URL 就像查找一些逐字 URL 一样简单,例如
grep -Eo 'http://host/abc/[^"]+.jpg'
或者你需要多一点努力。如果您的 900 个 URL 指向类似的 HTML,那应该不是问题。无论如何,这都会对名称冲突的文件进行编号。
答案2
它不为您保存重复项的原因是因为您正在使用--page-requisites
( -p
) 选项。尝试将--no-directories
( -nd
) 选项添加到您的命令中。
从联机帮助页(我添加的重点强调):
运行 Wget 时没有-N、-nc、-r 或-p,在同一目录中下载同一文件将导致文件的原始副本被保留,第二个副本被命名为 file.1。如果再次下载该文件,第三个副本将命名为 file.2,依此类推。 (即使 -r 或 -p 有效,这也是 -nd 的行为。)
答案3
wget 不会忽略重复项,它很可能会覆盖它们。 wget 有很多选项,我不知道所有选项,但我不相信有这样一个选项可以有选择地添加后缀来区分重复的文件名。您需要自己构建此功能。
例如
# mkdir /myarchivedir
#
# mkdir /tmp/mytempdir
# cd /tmp/mytempdir
#
# i=1
# while [ $i -le 900 ]
# do
# wget http://mysite.com/somefile
# file=$(ls)
# mv $file /myarchivedir/${i}.${file}
# (( i=$i+1 ))
# done
正如您所看到的,即使 $file 变量与之前的另一个变量相同,由于 i 每次都在更改值,当您将文件移动到 /myarchivedir 时,它不会覆盖您重复的命名图像。