在 link returns 空行中用变量调用 curl
Calling curl with a variable in the link returns a blank line
我正在尝试制作一个小的 shell 脚本来从 c++ 参考网站获取信息,并且我想抓取该网站的不同页面。为此,我编写了以下代码:
curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)'
这成功获取了给定页面的子页面,但是手动输入所有链接很乏味,所以我尝试这样做:
URL="algorithm" # <-- will be turned into an array
cr=$"\r"
URL=${URL%$cr}
#for loop:
curl "http://www.cplusplus.com/reference/${URL}"
#done
但是当我尝试 运行 时,文件 returns 一个空行,如何在功能上实现它?
要迭代 curl 所有返回的子页面,您可以将子页面存储在一个变量中,并 运行 为变量中的每个子页面创建一个 for 循环。然后,您可以在 for 循环中使用 url 并在 curl 命令中使用它。
childs=$(curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)')
declare -a array=($childs)
for url in "${array[@]}"
do
curl "http://www.cplusplus.com/reference/$url"
done
编辑:使用 Charles 指出的数组
您也可以使用 wget
而不是 curl
。
它会自动获取所有链接的页面。
使用
wget -r -l 1 http://www.cplusplus.com/reference/
-r
用于递归。 -l 1
用于递归级别。
我正在尝试制作一个小的 shell 脚本来从 c++ 参考网站获取信息,并且我想抓取该网站的不同页面。为此,我编写了以下代码:
curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)'
这成功获取了给定页面的子页面,但是手动输入所有链接很乏味,所以我尝试这样做:
URL="algorithm" # <-- will be turned into an array
cr=$"\r"
URL=${URL%$cr}
#for loop:
curl "http://www.cplusplus.com/reference/${URL}"
#done
但是当我尝试 运行 时,文件 returns 一个空行,如何在功能上实现它?
要迭代 curl 所有返回的子页面,您可以将子页面存储在一个变量中,并 运行 为变量中的每个子页面创建一个 for 循环。然后,您可以在 for 循环中使用 url 并在 curl 命令中使用它。
childs=$(curl -s http://www.cplusplus.com/reference/ | grep -oP '(?<=<a href= ").*?(?=">)')
declare -a array=($childs)
for url in "${array[@]}"
do
curl "http://www.cplusplus.com/reference/$url"
done
编辑:使用 Charles 指出的数组
您也可以使用 wget
而不是 curl
。
它会自动获取所有链接的页面。
使用
wget -r -l 1 http://www.cplusplus.com/reference/
-r
用于递归。 -l 1
用于递归级别。