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