使用Shell从页面获取随机链接

时间:2012-07-12 18:35:23

标签: shell curl

我正在尝试编写一个非常基本的基准测试脚本,它将从主页开始从网站加载随机页面。

我将使用curl来抓取页面的内容,但之后我也要从中加载随机的下一页。有人可以给我一些Shell代码,它会从curl命令的输出中随机获得一个href的URL吗?

3 个答案:

答案 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