使用Ruby从页面中提取所有URL

时间:2014-08-02 12:44:29

标签: ruby url extract

我试图从一些Ruby代码的原始输出中提取所有URL:

require 'open-uri'

reqt = open("http://www.google.com").read
reqt.each_line { |line|
 if line =~/http/ then
 puts URI.extract(line)
 end }  

我做错了什么?我正在获取额外的行和URL。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

require 'open-uri'
reqt = open("http://www.google.com").read
urls = reqt.scan(/[[:lower:]]+:\/\/[^\s"]+/)

答案 1 :(得分:1)

请记住,网址并非必须以" http" - 它可以是相对URL,即当前页面的路径。 IMO最好使用Nokogiri来解析HTML:

require 'open-uri'
require 'nokogiri'
reqt = open("http://www.google.com")
doc = Nokogiri::HTML(reqt)
doc.xpath('//a[@href]').each do |a|
  puts a.attr('href')
end

但是,如果您真的只想找到绝对URL,请添加一个简单的条件:

 puts a.attr('href') if a.attr('href') =~ /^http/i