从URL中提取TLD并为每个TLD文件排序域和子域

时间:2011-11-07 00:43:28

标签: perl url dns tld

我有一个百万网址列表。 我需要为每个网址提取TLD并为每个TLD创建多个文件。 例如,将.com的所有URL收集为tld并将其转储到1个文件中,将另一个文件转储为.edu tld,依此类推。 在每个文件中,我必须按字母顺序按域排序,然后按子域等排序。

任何人都可以帮我在perl中实现这个目标吗?

1 个答案:

答案 0 :(得分:6)

  1. 使用URI解析网址
  2. 使用其host方法获取主机
  3. 使用Domain::PublicSuffixget_root_domain来解析主机名。
  4. 使用tldsuffix方法获取真实TLD或伪TLD。
  5. 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
    }