wgetを使用してindex.htmlでURLリストを作成するには?

wgetを使用してindex.htmlでURLリストを作成するには?

したがって、wgetファイルを再帰的にダウンロードする機能がありますが、一度に1つのファイルのみをダウンロードします。

ディレクトリURLを渡し、再帰で見つかった各URLのダウンロードプロセスを作成したいと思います。

私が考えたアプローチの1つは、何とかwget見つけたURLを印刷してから、そのURLを別のインスタンス(などを介してwget)に供給することです。wget URL_1 &wget URL_2 &

どんなアイデアがありますか?

答え1

私はこれについて考えましたが、wgetが作業に最適なツールであるとは確信していません。

2022年に同様のツールを使用してこれを行う方法は次のとおりです。子犬HTML解析用に特別に設計されています(子犬の場合、CSSセレクター):

wget -q -O- https://ubuntu.com/download/alternative-downloads \
  | pup 'a[href$=".torrent"] attr{href}' \
  | aria2c -d ~/Downloads -i -

また、見ることができます

  • シデル

    • -e/オプション--extractの使用XPathセレクターデフォルトでは、--css '<selector>'またはCSSセレクタをサポートしています。--extract 'css("<selector>")'
    • curlインターネットリソースに直接アクセスできますが、マイコンピュータよりも少し遅いです。
    • 非常に寛容なパーサー。間違ったHTMLの場合でも、文句はほとんど見られません。
    • 例:
      xidel https://www.videlibri.de/xidel.html \
            -e '//a[ends-with(@href,"/download")]/@href'
      
      # faster, for some reason; don't forget the '-' (read from stdin)!
      curl -q https://www.videlibri.de/xidel.html \
        | xidel -e '//a[ends-with(@href,"/download")]/@href' -
      
      # same as above, using CSS selectors + XPath for the attribute
      curl -q https://www.videlibri.de/xidel.html \
        | xidel -e 'css("a[href$=/download]")/@href' -
      
  • xmlstarlet

    • XPathセレクタの使用
    • 〜しなければならない正しい形式のXML / XHTMLを入力として使用してください。
      • パイプを通してxmlstarlet fo -H -R(再びrmat、予想される入力は次のとおりです。時間TML、一度試してくださいエラー後の回復)は、ほとんどのウェブサイトを修正する必要があります。
    • 例:
      # NB: my version of xmlstarlet doesn't support XPath 'ends-with'
      curl -s https://ubuntu.com/download/alternative-downloads \
        | xmlstarlet fo -H -R 2>/dev/null \
        | xmlstarlet sel -t -v '//a[contains(@href, ".torrent")]/@href' -n
      
  • アリア2

答え2

以下と組み合わせて使用​​してくださいgrep

wget url -rqO - | grep -oE '[a-z]+://[^[:space:]"]+'

答え3

この問題を解決する1つの方法は、すべてのリンクをプレーンテキストファイルに収集し、次のことです。

while read line; do
    echo "Downloading ${line}"
    wget $line &        
done < $1

このファイルを別の名前で保存してください。スクリプトファイル実行可能にして実行してみてください。

$ ./script.sh

この問題を永久に解決するより良い方法は、wgetを本質的に並列になるように書き直すことです。

答え4

私の場合、これはうまくいきますリンク両方wget:

$ wget -O - -o /dev/null http://site.to.get.urls.from | grep -o 'some_regex' | wget -i -

1つ目は、wget2番目の入力「ファイル」として使用されるファイルを含むURLのリストを生成しますwget

これは簡単にバージョンは、その背後に隠されたスキルを示しています。grepと2番目のコマンドの間のパイプは、実際にはwgetより多くのパイプコマンド(たとえば、sedまたは)とawk組み合わせることができますcut(特にHTMLソースが通常より複雑で解析が難しい場合)。

これは読みます:正規表現が正しく機能することwgetを確認するには、必ず内部スタンドアロン関数を最初に呼び出す必要があります。stdout

関連情報