Filtre os hiperlinks da página da web e faça o download de todos que correspondam a um determinado padrão

2

Eu queria fazer o download de todos os arquivos gráficos da página da Web do repositório gráfico de nossa organização. Eles são o formato Illustrator ( .ai) e o formato Corel Draw ( .cdr).

Eles são diretamente hiperlinkados (por exemplo, <a href="http://server/path-to-file.ai">...</a> .

    
por Mark K Cowan 09.03.2015 / 16:07

2 respostas

6

wget inclui recursos para suportar isso diretamente:

wget -r -A "*.ai,*.cdr" 'address-of-page-with-hyperlinks'

-r ativa o modo recursivo, por isso, ele fará o download de mais do que o URL fornecido e -A limitará os arquivos a serem baixados e mantidos no final.

    
por 09.03.2015 / 16:23
0
  1. Leia a página com curl

  2. Filtre por hiperlinks com grep . Observe que isso explora o fato de que todos eles são formatados de forma consistente (como <a href="..." ). Um analisador HTML / XML realmente deve ser usado para qualquer coisa, até um pouco mais complicada.

  3. Recorte o endereço do hiperlink com grep -o , filtrando com grep novamente para extrair apenas os links cujo alvo tenha as extensões e protocolos desejados.

  4. Baixe os arquivos resultantes com wget (ou curl também pode ser usado se a saída tiver sido especificada). Além disso, nós echo a URL para o console.

Observe que nossa filtragem no script não está na mesma ordem exata acima, por conveniência.

Bash :

#!/bin/bash
while read url; do
    # Echo URL to terminal
    echo "${url}"
    # Download files
    wget -q "${url}"
done < <(
    # Get page
    curl -s 'address-of-page-with-hyperlinks' | \
    # Filter hyperlinks
    grep -Po 'href="http://[^"]+\.(cdr|ai)"' | \
    grep -Po 'http://[^"]+'
)
    
por 09.03.2015 / 16:07