我有一个类似于 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
但不确定它是否具有我需要的所有功能。
最佳答案
URI -- 用于建筑
HTML::TreeBuilder -- 用于解析。
关于perl - 如何在 Perl 中构建和解析 HTTP URL/URI/路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667229/