Как я могу построить и проанализировать HTTP URL / URI / пути в Perl? - PullRequest
3 голосов
/ 19 апреля 2010

У меня есть 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, но не был уверен, что он обладает всеми необходимыми мне функциями.

Ответы [ 2 ]

5 голосов
/ 19 апреля 2010

URI - для строительства
HTML :: TreeBuilder - для разбора.

1 голос
/ 20 апреля 2010

Звучит так, как будто вы хотите что-то вроде моего HTML :: SimpleLinkExtor модуля. Это то, что я использую для своего wget-подобного скрипта под названием webreaper .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...