Извлечение TLD из URL-адресов и сортировка доменов и поддоменов для каждого файла TLD - PullRequest
1 голос
/ 07 ноября 2011

У меня есть список миллионов URL.Мне нужно извлечь TLD для каждого URL и создать несколько файлов для каждого TLD.Например, собрать все URL-адреса с .com как tld и вывести их в 1 файл, другой файл для .edu tld и так далее.Далее в каждом файле я должен отсортировать его в алфавитном порядке по доменам, а затем по поддоменам и т. Д.

Может кто-нибудь подсказать мне, как реализовать это в perl?

1 Ответ

6 голосов
/ 07 ноября 2011
  1. Используйте URI для анализа URL,
  2. Используйте его метод host для получения хоста,
  3. Используйте Domain :: PublicSuffix get_root_domain для анализа имени хоста.
  4. Используйте метод tld или suffix для получения реального TLD или псевдо TLD.

use feature qw( say );

use Domain::PublicSuffix qw( );
use URI                  qw( );

my $dps = Domain::PublicSuffix->new();

for (qw(
   http://www.google.com/
   http://www.google.co.uk/
)) {
   my $url = $_;

   # Treat relative URLs as absolute URLs with missing http://.
   $url = "http://$url" if $url !~ /^\w+:/;

   my $host = URI->new($url)->host();
   $host =~ s/\.\z//;  # D::PS doesn't handle "domain.com.".

   $dps->get_root_domain($host)
      or die $dps->error();

   say $dps->tld();     # com  uk
   say $dps->suffix();  # com  co.uk
}
...