Webページのハイパーリンクをフィルタリングし、特定のパターンに一致するすべてのハイパーリンクをダウンロードします。

Webページのハイパーリンクをフィルタリングし、特定のパターンに一致するすべてのハイパーリンクをダウンロードします。

私たちの組織のグラフィックストアWebページからすべてのグラフィックファイルをダウンロードしたいと思います。彼らはイラストレーターです(.ai) 型と Corel Draw(.cdr) 形式です。

これらは直接ハイパーリンクで接続されています(たとえば<a href="http://server/path-to-file.ai">...</a>

答え1

wgetこれを直接サポートする機能が含まれています。

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

-r再帰モードを有効にして、指定されたURL以外のファイルをダウンロードし、-A最終的にダウンロードおよび保持されるファイルを制限します。

答え2

  1. このページを読むcurl

  2. ハイパーリンクでフィルタリングしますgrep。これはフォーマットが一貫しているという事実を利用します(例えば<a href="..."HTML/XMLパーサー本物使用すべきもう少し複雑な場合。

  3. Cut Hyperlink Address を使用してgrep -ogrepフィルタリングを使用して、必要な拡張とプロトコルをターゲットとするリンクのみを抽出します。

  4. これらの結果ファイルをダウンロードしますwget(またはcurl出力が指定されている場合に使用)。また、echoコンソールのURLも提供します。

便宜上、スクリプトでフィルタリングする順序は、上記とまったく同じではありません。

吹く:

#!/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://[^"]+'
)

関連情報