curl
デフォルトでは、リンクセットのエンドポイントを取得し、各リンクを再帰的に(他のリンクセットに対して)再帰的にカールするbash関数があります。
task() {
link="$1"
response=$(curl "$link")
# save response data to file...
# process response to find another set of links and save to variable x...
if condition
echo "$x" | while read -r link
task "$link"
}
上記のコードは約100のカール操作を生成するのに時間がかかります。ボトルネックを引き起こすのは、主にエンドポイントの応答時間(処理時間ではありません)です。
状況
- リンク数に関する情報はありません。親リンクを最初に使用しないと、
curl
子リンクを持つことはできません。 - 各応答は
curl link
自動的にファイルに保存する必要があります。
このプロセスを並列化することは可能ですか?ソリューションに必要な(またはよりエレガントな)GNU parallel
他の外部ツールがあれば大丈夫です。
答え1
幅優先スパイダーをテンプレートとして使用できますか?https://www.gnu.org/software/parallel/man.html#example-breadth-first-parallel-web-crawler-mirrorer