我正在尝试编写一个非常基本的基准测试脚本,它将从主页开始从网站加载随机页面。
我将使用curl来抓取页面的内容,但之后我也要从中加载随机的下一页。有人可以给我一些Shell代码,它会从curl命令的输出中随机获得一个href的URL吗?
答案 0 :(得分:0)
以下是我提出的建议:
curl <url> 2> /dev/null | egrep "a href=" | sed 's/.*<a href="//' | \
cut -d '"' -f 1-1 | while read i; do echo "`expr $RANDOM % 1000`:$i"; done | \
sort -n | sed 's/[0-9]*://' | head -1
使用您尝试从中获取链接的URL替换该位。
编辑: 制作名为getrandomurl.sh的脚本可能更容易,其中包含:
#!/bin/sh
curl $1 2> /dev/null | egrep "a href=" | sed 's/.*<a href="//' | \
cut -d '"' -f 1-1 | while read i; do echo "`expr $RANDOM % 1000`:$i"; done | \
sort -n | sed 's/[0-9]*://' | head -1
并像./getrandomurl.sh http://stackoverflow.com
或其他东西一样运行。
答案 1 :(得分:0)
同时使用lynx和bash数组:
hrefs=($(lynx -dump http://www.google.com |
sed -e '0,/^References/{d;n};s/.* \(http\)/\1/'))
echo ${hrefs[$(( $RANDOM % ${#hrefs[@]} ))]}
答案 2 :(得分:0)
不是curl
解决方案,但考虑到任务,我会更有效。
我建议使用perl
WWW::Mechanize
模块。例如,要从页面转储所有链接,请使用以下内容:
use WWW::Mechanize;
$mech = WWW::Mechanize->new();
$mech->get("URL");
$mech->dump_links(undef, 'absolute' => 1);
注意URL
应该替换为想要的页面。
然后在perl
内继续,以下是URL
页面上的随机链接:
$number_of_links = "" . @{$mech->links()};
$mech->follow_link( n => int(rand($number_of_links)) )
或者使用上面的dump_links
版本获取网址并在shell中进一步处理,例如获取随机网址(如果上面的脚本被称为get_urls.pl
):
./get_urls.pl | shuf | while read; do
# Url is now in the $REPLY variable
echo "$REPLY"
done