0

我需要提取驻留在 Intranet 上的页面的所有链接,但我不确定如何最好地做到这一点。网站结构如下

主题列表

  1. 话题一

  2. 话题二

  3. 话题 3

ETC

现在链接驻留在每个主题页面中。我想避免手动通过超过 500 个主题页面来提取 URI。

每个主题页面具有以下结构

http://alias/filename.php?cat=6&number=1

cat参数是指类别,参数number是指主题。

一旦进入主题页面,我需要提取的 URI 再次以特定格式存在

http://alias/value?id=somevalue

注意事项

  1. 我无权访问数据库,因此无法选择通过它进行拖网搜索
  2. 每个主题页面中只有一个 URI
  3. 我需要将列表提取到一个文件中,该文件仅在新行中列出每个 URI

我想执行某种可以通过 BASH 从终端运行的脚本,该脚本将遍历主题 URI,然后是每个主题中的 URI。

简而言之

如何使用可以使用 BASH 运行的脚本来提取列表,该脚本将递归地遍历所有主题列表,然后在每个主题页面中提取 URI,并在一个新的提取的 URI 中生成一个文本文件线。

4

1 回答 1

1

我用 Perl 实现了这个,使用 HTML::TokeParser 和 WWW::Mechanize 模块:

use HTML::TokeParser;
use WWW::Mechanize;

my $site = WWW::Mechanize->new(autocheck =>1);
my $topicmax = 500;  #Note:  adjust this to the number of topic pages you have

# loop through each topic page
foreach(1..$topicmax) {
    my $topicurl = "http://alias/filename.php?cat=6&number=$_";

    # get the page
    $site->get($topicurl);
    $p = HTML::TokeParser->new(\$site->{content});

    # parse the page and extract the links
    while (my $token = $p->get_tag("a")) {
        my $url = $token->[1]{href};
        # use a regex to test for the link format we want
        if($url =~ /^http:\/\/alias\/value\?id=/) {
            print "$url\n";
        }
    }
}

该脚本打印到标准输出,因此您只需将其重定向到一个文件。

于 2012-06-13T23:32:22.470 回答