したがって、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' -
-
- 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
以下と組み合わせて使用してください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つ目は、wget
2番目の入力「ファイル」として使用されるファイルを含むURLのリストを生成しますwget
。
これは簡単にバージョンは、その背後に隠されたスキルを示しています。grep
と2番目のコマンドの間のパイプは、実際にはwget
より多くのパイプコマンド(たとえば、sed
または)とawk
組み合わせることができますcut
(特にHTMLソースが通常より複雑で解析が難しい場合)。
これは読みます:正規表現が正しく機能することwget
を確認するには、必ず内部スタンドアロン関数を最初に呼び出す必要があります。stdout