我有一个类似wget
的脚本,用于下载页面,然后检索该页面上IMG标记中链接的所有文件。
考虑到原始页面的URL以及从该页面中的IMG标记中提取的链接,我需要构建我想要检索的图像文件的URL。目前我使用的是我写的函数:
sub build_url {
my ( $base, $path ) = @_;
# if the path is absolute just prepend the domain to it
if ($path =~ /^\//) {
($base) = $base =~ /^(?:http:\/\/)?(\w+(?:\.\w+)+)/;
return "$base$path";
}
my @base = split '/', $base;
my @path = split '/', $path;
# remove a trailing filename
pop @base if $base =~ /[[:alnum:]]+\/[\w\d]+\.[\w]+$/;
# check for relative paths
my $relcount = $path =~ /(\.\.\/)/g;
while ( $relcount-- ) {
pop @base;
shift @path;
}
return join '/', @base, @path;
}
问题是,我肯定不是第一个解决这个问题的人,实际上这是一个普遍的问题,我认为必须有一些更好,更标准的处理方法,使用核心模块或来自CPAN的东西 - 尽管通过核心模块是可取的。我在考虑File::Spec
,但不确定它是否具备我需要的所有功能。
答案 0 :(得分:5)
URI - 建筑物 HTML::TreeBuilder - 用于解析。
答案 1 :(得分:1)
听起来你可能想要我的HTML::SimpleLinkExtor模块。这就是我用于名为webreaper的类似wget的脚本。