我是红宝石的初学者。我想要一个ruby脚本来获取与该域相关联的每个链接而不使用gem。 (e.x) 如果我输入网址为http://hsps.in
我的预期输出是:
hsps.in/contacts
hsps.in/projects
hsps.in/blog ..etc
谁能告诉我怎样才能实现这个目标?
答案 0 :(得分:1)
open-uri是标准库的一部分,你需要安装nokogiri gem,它会让事情变得更容易
require 'open-uri'
require 'nokogiri'
url = 'http://hsps.in'
doc = Nokogiri::HTML(open(url))
links = doc.css('a')
links.each { |link| puts link['href'] }
答案 1 :(得分:1)
RegExp是你的朋友:)
Maybe this gist would help you i created a while ago.
在第570行,我使用Regexp扫描链接:
toScan[:links] = toScan[:response].body.scan(/https?:\/\/[^:\s"'<>#\(\)\[\]\{\},;]+/mi)
在第572行,我使用此正则表达式扫描实习链接:
interneLinks = toScan[:response].body.scan(/href\s*=\s*['"]\/?[^\s:'"<>#\(\)\[\]\{\},;]+/im )
我也不想使用宝石而是自己做。所以我使用了RegExp。使用Regexpressions,您可以处理Textpatterns。它就像一个小语言,你可以用它来识别字符串中的文本(在你的情况下是网址)。 :)也许有一个更好的regexp链接(谷歌可以找到它们),但我想自己处理它。
我可以帮助你解决这个问题。
答案 2 :(得分:0)
在您的控制器操作中
arr = []
routes = %x[rake routes]
routes.split(' ').map{|rt| arr << rt if rt.count('/') > 0 && rt.count('#') == 0}
puts arr.uniq
答案 3 :(得分:0)
require 'open-uri'
class PageLinks
attr_reader :page
include OpenURI
def initialize(url)
@page = open(url).readlines
end
def links
@page.grep(/href/)
end
end
url = 'http://www.hsps.in'
doc = PageLinks.new url
puts doc.links.inspect
正如你所说'不使用任何宝石',我会接受它包含Rails,即使它被标记为。
这不是一个“干净”的答案,因为它不会提取a
代码href
值的值。但它应该证明它确实可以在没有宝石的情况下完成,只有Ruby附带的宝石。