Что я получу, отфильтровав URL через модуль Perl URI? - PullRequest
5 голосов
/ 24 апреля 2010

Получу ли я что-нибудь, когда преобразую свой $url, например: $url = URI->new( $url )?

#!/usr/bin/env perl
use warnings; use strict;
use 5.012;
use URI;
use XML::LibXML;

my $url = 'http://stackoverflow.com/';
$url = URI->new( $url );

my $doc = XML::LibXML->load_html( location => $url, recover => 2 );
my @nodes = $doc->getElementsByTagName( 'a' );
say scalar @nodes;

Ответы [ 3 ]

4 голосов
/ 24 апреля 2010

Конструктор модуля URI очистит вас от URI - например, правильно экранирует недопустимые символы для конструкции URI (см. URI :: Escape ).

3 голосов
/ 25 апреля 2010

Модуль URI как несколько преимуществ:

  • нормализует URL для вас
  • Может разрешать относительные URL
  • Он может обнаруживать недействительные URL-адреса (хотя вам необходимо отключить биты без схемы)
  • Вы можете легко фильтровать URL-адреса, которые вы хотите обработать.

Преимущество, которое вы получаете с небольшим количеством кода, который вы показываете, минимально, но, поскольку вы продолжаете работать над проблемой, возможно, паукой на сайте, URI становится более удобным, когда вы выбираете, что делать дальше.

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

Я удивлен, что никто еще не упомянул об этом, но $url = URI->new( $url ); не очищает ваш $url и не возвращает его вам, он создает новый объект класса URI (или, скорее, одного если его подклассы), который затем может быть передан в другой код, который требует объект URI. Это не особенно важно в этом случае, так как XML::LibXML, кажется, рад принять местоположения в виде строк или объектов, но некоторые другие модули требуют, чтобы вы дали им объект URI и отклонили URL, представленные в виде простых строк.

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