3

我有一个网址,例如:

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

并想从中提取相关杂志。

目前我有:

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

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

4

5 回答 5

6

为此使用 gem 可能有点矫枉过正,但无论如何:有一个名为domainatrix的方便 gem ,可以在处理两个元素顶级域等事务时为您提取站点名称。

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"
于 2013-03-14T21:17:13.833 回答
2

怎么样

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

于 2013-03-14T21:19:04.067 回答
1

试试这个正则表达式:

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

如果您有以下 url 字符串,它会提供以下内容:

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://or即可。http://www.另一个想法是,如果您还要 parse ,您可能需要稍微调整我给您的正则表达式https://。我希望这可以帮助您入门!

编辑:

我重新阅读了这个问题,并意识到我的回答并没有真正做到你所要求的。我想知道你是否知道你正在解析的 URL 是否有一个固定的格式可能会有所帮助,就像总是有 www。如果是这样,您可以使用正则表达式来提取 url 中第一个和第二个句点之间的所有内容。如果没有,也许您可​​以调整我的正则表达式,使其成为 / 或 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"]

会很奇怪。如果您使用正则表达式的东西,您可能必须逐步清理 url 以提取您想要的部分。

于 2013-03-15T05:24:49.570 回答
0

也许你可以把它分开?

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

请记住,某些注册域可能具有多个注册国家域的组成部分,例如.co.uk.co.jp.com.au

于 2013-03-14T20:35:34.057 回答
0

我发现答案的灵感来自 tadman 的答案和另一个问题的答案

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

第一行获取主机,第二行获取删除 www。如果它们是第一行和第三行,则在下一个点之前获取所有内容。

于 2013-03-14T21:18:05.350 回答