如何从红宝石中获取网址的网站名称?

时间:2013-03-14 20:34:22

标签: ruby parsing url

我有一个网址,例如:

http://www.relevantmagazine.com/life/relationship/blog/23317-pursuing-singleness 

并希望从中提取 relatedmagazine

目前我有:

@urlroot = URI.parse(@link.url).host

但它返回 www.relevantmagazine.com 任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:6)

使用宝石可能有点矫枉过正,但无论如何:有一个名为domainatrix的方便宝石,它可以为你处理两个元素顶级域等内容提供网站名称。

url = Domainatrix.parse("http://www.pauldix.net")
url.url       # => "http://www.pauldix.net" (the original url)
url.public_suffix       # => "net"
url.domain    # => "pauldix"
url.canonical # => "net.pauldix"

url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg")
url.public_suffix       # => "co.uk"
url.domain    # => "pauldix"
url.subdomain # => "foo.bar"
url.path      # => "/asdf.html?q=arg"
url.canonical # => "uk.co.pauldix.bar.foo/asdf.html?q=arg"

答案 1 :(得分:1)

怎么样

@urlroot = URI.parse(@ link.url).host.gsub(“www。”,“”)。split(“。”)[0]

答案 2 :(得分:1)

试试这个正则表达式:

regex = %r{http://[w]*[\.]*[^/|$]*}

如果您有以下网址字符串,则会提供以下内容:

url = 'http://www.google.com/?q=blah'
url.scan(regex) => ["http://www.google.com"]

url = 'http://google.com/?q=blah'
url.scan(regex) => ["http://google.com"]

url = 'http://google.com'
url.scan(regex) => ["http://google.com"]

url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo.bar.pauldix.co.uk"]

它并不完美,但除了前缀和主机名外,它将删除所有内容。然后,您可以使用其他一些代码轻松清理前缀,因为现在您只需要在字符串的开头查找http://http://www.。另一个想法是你可能需要调整我给你一点的正则表达式,如果你也要解析https://。我希望这可以帮助你开始!

编辑:

我重读了这个问题,并意识到我的回答并没有真正按照你的要求行事。我想如果你知道你所解析的网址是否会有一个像以前一样的设置格式,这可能会有所帮助。如果是这样,您可以使用正则表达式提取网址中第一个和第二个句点之间的所有内容。如果没有,也许你可以调整我的正则表达式,以便它是/或www之间的所有内容。和第一个时期。这可能是获取网站名称而不使用www的最简单方法。或.com或.au.uk等。

修订的正则表达式:

regex = %r{http://[w]*[\.]*[^\.]*}
url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo"]

这很奇怪。如果你使用正则表达式的东西,你可能必须以增量方式来清理网址以提取你想要的部分。

答案 3 :(得分:0)

也许你可以分开它?

 URI.parse(@link.url).host.split('.')[1]

请注意,某些注册域名可能包含多个注册国家/地区域的组件,例如.co.uk.co.jp.com.au

答案 4 :(得分:0)

我发现答案受到了tadman的回答和the answer in another question

的启发
@urlroot = URI.parse(item.url).host
@urlroot = @urlroot.start_with?('www.') ? @urlroot[4..-1] : @urlroot
@urlroot = @urlroot.split('.')[0]

第一行获取主机,第二行获取删除www。如果他们是第一行,那么在下一个点之前获取所有内容。