Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 从URL提取TLD,并对每个TLD文件的域和子域进行排序_Perl_Url_Dns_Tld - Fatal编程技术网

Perl 从URL提取TLD,并对每个TLD文件的域和子域进行排序

Perl 从URL提取TLD,并对每个TLD文件的域和子域进行排序,perl,url,dns,tld,Perl,Url,Dns,Tld,我有一百万个URL的列表。 我需要为每个url提取TLD,并为每个TLD创建多个文件。 例如,以.com作为tld收集所有URL,并将其转储到1个文件中,另一个文件为.edu tld,依此类推。 在每个文件中,我必须按字母顺序按域排序,然后按子域排序等 谁能给我一个在perl中实现这一点的先机 用于解析URL 使用其host方法获取主机 使用的get\u root\u domain解析主机名 使用tld或suffix方法获取真实tld或伪tld 用于解析URL 使用其host方法获取主机 使用

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

谁能给我一个在perl中实现这一点的先机

  • 用于解析URL
  • 使用其
    host
    方法获取主机
  • 使用的
    get\u root\u domain
    解析主机名
  • 使用
    tld
    suffix
    方法获取真实tld或伪tld
  • 用于解析URL
  • 使用其
    host
    方法获取主机
  • 使用的
    get\u root\u domain
    解析主机名
  • 使用
    tld
    suffix
    方法获取真实tld或伪tld

  • 这可能是一个不切实际的问题,但我不能停下来问:在第二行和第三行中使用qw()有什么意义吗?使用uriqw();据我所知,qw()用于将其转换为逗号分隔的参数字符串。@Sahil Shah,我总是显式列出导入
    qw(…)
    很方便。当我不想导入任何内容时,我不会从
    qw()
    切换到
    ()
    <代码>使用域::PublicSuffix qw();使用uriqw()的意思与使用域::PublicSuffix()相同;使用URI(),在这种特殊情况下,它可能与
    使用域::PublicSuffix相同;使用URI,但这不是我的机会。谢谢。如果输入没有http(比如google.com),您的代码会给我错误:无法通过第行的包“URI::_generic”找到对象方法“host”:(my$host=URI->new($url)->host();)@Sahil Shah,url“google.com”是一个没有主机的相对url。当然它会失败。如果没有主机,则没有TLD。如果您想假装相对URL是缺少“http://”的格式错误的URL,请继续<代码>$url=“http://”$如果$url!~/^\w+:/非常感谢!。我有个问题。我混淆了TLD、域名和主机名这三个术语。tld是否始终是url最右边的最后一部分?比如,如果url是google.com,我理解com是TLD。但是如果url像www.sub1.sub2.co.cc?co.cc现在是我的TLD还是仅.cc我的TLD?在你上面的代码中,dps->后缀是给域名的对吗?(co.uk)你能澄清一下吗?这可能是一个不切实际的问题,但我不能停下来问:当你在第二行和第三行中使用qw()时,有什么意义吗?使用uriqw();据我所知,qw()用于将其转换为逗号分隔的参数字符串。@Sahil Shah,我总是显式列出导入
    qw(…)
    很方便。当我不想导入任何内容时,我不会从
    qw()
    切换到
    ()
    <代码>使用域::PublicSuffix qw();使用uriqw()的意思与使用域::PublicSuffix()相同;使用URI(),在这种特殊情况下,它可能与
    使用域::PublicSuffix相同;使用URI,但这不是我的机会。谢谢。如果输入没有http(比如google.com),您的代码会给我错误:无法通过第行的包“URI::_generic”找到对象方法“host”:(my$host=URI->new($url)->host();)@Sahil Shah,url“google.com”是一个没有主机的相对url。当然它会失败。如果没有主机,则没有TLD。如果您想假装相对URL是缺少“http://”的格式错误的URL,请继续<代码>$url=“http://”$如果$url!~/^\w+:/非常感谢!。我有个问题。我混淆了TLD、域名和主机名这三个术语。tld是否始终是url最右边的最后一部分?比如,如果url是google.com,我理解com是TLD。但是如果url像www.sub1.sub2.co.cc?co.cc现在是我的TLD还是仅.cc我的TLD?在你上面的代码中,dps->后缀是给域名的对吗?(co.uk)你能澄清一下吗?
    
    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
    }