【问题标题】:What is the best way to extract unique URLs and related link text via perl mechanize?通过 perl mechanize 提取唯一 URL 和相关链接文本的最佳方法是什么?
【发布时间】:2025-12-26 20:10:16
【问题描述】:

我创建了以下 perl 脚本来从网络中提取 URL:

#!perl

use strict;
use warnings;

use List::MoreUtils qw( uniq );
use WWW::Mechanize  qw( );

my ($url) = @ARGV;
my $mech = WWW::Mechanize->new();


sub getUrl {
    my $request= "@_";
    my $response = $mech->get($request);
    return $response->is_success()  or die($response->status_line() . "\n");
}

sub getLinks {
    getUrl($url);
    my @root= map { "$_\n" } sort { $a cmp $b } uniq 
        map { $_->url_abs() }
            $mech->links();
    return @root;
}
print Dumper(getLinks());

是否有解决方案如何从 HTML 站点中提取唯一 URL 和相关链接文本?

【问题讨论】:

  • 为什么要通过附加换行符来隐藏die 语句的行号?
  • 仅为调试创建的行号选项。
  • ...您已经完成调试...?
  • 你不需要使用&来调用Perl的sub:getUrl($url)
  • @gangabas - 感谢您的提示!

标签: perl mechanize


【解决方案1】:

看看HTML::LinkExtor - 从 HTML 文档中提取链接

查看模块中的Example,对你有很大帮助。

【讨论】:

    【解决方案2】:
    my $urls;
    my @result;
    
    foreach my $link ( $mech->links() ) {
        next if exists $urls->{ $link->url_abs() };
        push @result, {
            url => $link->url_abs(),
            text => $link->text(),
        };
        $urls->{ $link->url_abs() } = 1;
    }
    #now you have all unique links in the array of hashes @result
    #so you can sort this array like you want...
    

    【讨论】:

      最近更新 更多