Como também baixar imagens duplicadas?

0

Eu tenho uma lista de 900 URLs. Cada página contém uma imagem. Algumas imagens são duplicadas (com o mesmo URL). Quero fazer o download de 900 imagens, incluindo duplicatas .

Consegui fazer o download de todas as páginas e imagens incorporadas (e ignorei todos os outros tipos de arquivo) com o wget. Mas parece-me que wget "ignora" uma imagem quando já foi baixada antes. Então, eu tinha 900 páginas, mas apenas cerca de 850 imagens.

(Como) posso dizer ao wget para fazer o download de duplicatas também? Poderia acrescentar _1 , _2 ,… no nome do arquivo.

Meu comando 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

    
por unor 29.11.2012 / 17:24

3 respostas

1

O wget não ignora as duplicatas, provavelmente está sobrescrevendo-as. O wget tem muitas opções e não tenho conhecimento de todas elas, mas não acredito que exista uma opção para adicionar seletivamente um sufixo para discriminar nomes de arquivos duplicados. Você precisa criar essa funcionalidade sozinho.

como

#  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

como você pode ver, mesmo que a variável $ file seja a mesma que antes, já que o i está alterando o valor toda vez, quando você move o arquivo para / myarchivedir, ele não sobrescreve sua imagem duplicada.

espero que isso ajude

    
por 29.11.2012 / 17:51
1

Acho que seu problema é --page-requisites . Eu suspeito que ele irá reconhecer as duplicatas e evita baixá-las novamente. Isso geralmente é o que você quer. Você contorna o wget uma vez para cada URL e faz o download para uma pasta diferente a cada vez, assim:

#!/bin/bash
let i=0
while IFS=$'\n' read url; do 
  let i++; 
  wget -nv -P $i --page-requisites "$url"; 
done < urls.txt

No entanto, você só precisa da imagem única contida em cada um dos arquivos. Isso deve fazer o truque:

wget -i urls.txt -q -O - | ...extract image URLs... | wget -nv -i -

Extrair os URLs do HTML pode ser tão fácil quanto procurar algumas URLs textuais, por exemplo

grep -Eo 'http://host/abc/[^"]+.jpg'

Ou você precisa de um pouco mais de esforço. Se suas 900 URLs apontarem para HTML semelhante, isso não será um problema. Em qualquer caso, isso irá numerar os arquivos na colisão de nomes.

    
por 30.12.2012 / 00:43
1

O motivo pelo qual não está salvando duplicatas é porque você está usando a opção --page-requisites ( -p ). Tente adicionar a opção --no-directories ( -nd ) ao seu comando.

A partir do manpage (strong ênfase adicionada por mim):

When running Wget without -N, -nc, -r, or -p, downloading the same file in the same directory will result in the original copy of file being preserved and the second copy being named file.1. If that file is downloaded yet again, the third copy will be named file.2, and so on. (This is also the behavior with -nd, even if -r or -p are in effect.)

    
por 16.05.2013 / 05:57

Tags