900個のURLのリストがあります。各ページには1つの画像が含まれています。一部の画像が重複しています(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を1回呼び出し、毎回別のフォルダにダウンロードすることでこの問題を解決できます。
#!/bin/bash
let i=0
while IFS=$'\n' read url; do
let i++;
wget -nv -P $i --page-requisites "$url";
done < urls.txt
ただし、各ファイルに含まれる画像は1つだけ必要です。これにより、トリックを実行できます。
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、または-血、同じディレクトリに同じファイルをダウンロードすると、ファイルのソースはfile.1という2番目のコピーと共に保持されます。ファイルを再ダウンロードすると、3 番目のコピーの名前は 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変数は以前の他の変数と同じでも毎回値を変更するため、ファイルを/ myarchivedirに移動しても重複する名前のイメージを上書きしません。