Como usar o wget para baixar certos arquivos de um determinado diretório quando o próprio diretório não possui um index.html?

4

Há um número de questões semelhantes no StackExchange, mas nenhuma aborda esse problema.

Quero fazer o download de todos os arquivos pdf no diretório 2007 no link .

Portanto, quero que wget analise o arquivo html disponível no link acima e siga apenas os links que vão para pdf files no diretório 2007 .

Eu usei o seguinte, mas não funcionou:

wget -r -A pdf -I /2007 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'

Você também pode explicar por que o acima não funciona?

    
por Loax 17.01.2015 / 05:55

2 respostas

5

Como observado pelo Anthon, a opção -I não funciona dessa forma . Mas, como você tem um ponto de referência - ou seja, ~algorith/video-lectures/ com uma lista de arquivos, há algumas opções. Uma é analisar o índice com outras ferramentas e executar novamente o wget. Outra é usar --accept-regex : corresponde a aceitar no URL completo .

Do homem:

--accept-regex urlregex
--reject-regex urlregex
    Specify a regular expression to accept or reject the complete URL.

Isso deve fazer o que você quer:

wget -r -nd -A pdf --accept-regex "2007/.*\.pdf" 'http://www3.cs.stonybrook.edu/~algorith/video-lectures/'

Remova -nd se você realmente quiser os diretórios.

Editar (para comentar o assunto)

aceitar vs. aceitar-regex

Isso é um pouco complicado para eu explicar, mas vou tentar.

Primeiramente, se você realmente quiser ler o manual, use info . Como indicado em man (isso é do GNU wget) - (fácil de ignorar):

SEE ALSO
   This is not the complete manual for GNU Wget.  For more complete information,
   including more detailed explanations of some of the options, and a number of
   commands available for use with .wgetrc files and the -e option, see the GNU
   Info entry for wget.

Neste caso, ou seja:

$ info wget "Following Links" "Types of Files"

ou on-line .

Aqui encontramos, enfatize o meu:

Finally, it’s worth noting that the accept/reject lists are matched twice against downloaded files: once against the URL’s filename portion, to determine if the file should be downloaded in the first place; then, after it has been accepted and successfully downloaded, the local file’s name is also checked against the accept/reject lists to see if it should be removed.

Além disso, continua a explicar que a lógica por trás disso é que

  1. Os arquivos .htm e .html são sempre baixados independentemente das regras de aceitação / rejeição.
  2. Eles devem ser removidos após serem baixados e verificados quanto a links, se corresponderem às listas de aceitação / rejeição.

Assim: arquivos HTML são sempre baixados. Após o download, a correspondência é feita somente com o nome do arquivo.

Não tenho certeza de quanto isso ajudou. Se você ler a página de informações, pode ser mais claro. É um pouco de complexidade com coisas de galinha e ovo etc. na mistura aqui.

    
por 17.01.2015 / 08:23
1

A opção -I , conforme descrito em man wget :

-I list
--include-directories=list
    Specify a comma-separated list of directories you wish to follow
    when downloading.  Elements of list may contain wildcards.

Você interpreta isso (compreensivelmente) como um filtro nos URLs encontrados na página original, mas isso é uma ilusão. É um filtro nos subdiretórios em que wget pode descer e quais index.html podem ser encontrados. Como você já percebeu, não existe index.html em http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/

    
por 17.01.2015 / 07:47

Tags