从Ruby中的URL中删除除网站名称以外的所有内容[复制]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我正在迭代一个URL列表。网址有不同的格式,如:

https://twitter.com/sdfaskj... 
https://www.linkedin.com/asdkfjasd...
http://google.com/asdfjasdj...

等等

我想使用Gsub或类似的东西来删除除网站名称之外的所有内容,分别只获得“twitter”,“linkedin”和“google”。

在我的脑海里,理想情况下我想要像.gsub一样可以检查多种可能性(url.gsub(“https://或https://www。或http:// etc.”,“”)并在找到时替换它们没有“”。还需要删除名称后面的所有内容,所以“.com / wkadslflj ......”

attributes.css("a").each do |attribute|
  attribute_url = attribute["href"]
  attribute_scrape = attribute_url.gsub("https://", "")
  binding.pry
end
ruby url gsub
2个回答
5
投票

我会考虑URI.parse的组合来获取URL的主机名和PublicSuffix gem来获得二级域名:

require 'public_suffix'
require 'uri'

url  = 'https://www.linkedin.com/asdkfjasd'
host = URI.parse(url).host                 # => 'www.linkedin.com'
PublicSuffix.parse(host).sld               # => 'linkedin'

1
投票

你可以使用这个gsub正则表达式:

gsub(/http(s)?:\/\/(www.)?|.(com|net|co.uk|us)+.*/, '')

输出:

list = ["https://twitter.com/sdfaskj...", "https://www.linkedin.com/asdkfjasd...", "http://google.com/asdfjasdj..."] 

list.map { |u| u.gsub(/http(s)?:\/\/(www.)?|.(com|net|co.uk|us)+.*/, '') }
 => ["twitter", "linkedin", "google"] 
© www.soinside.com 2019 - 2024. All rights reserved.