2011-07-20 97 views
0

如果我使用有没有办法用ruby选择某个类的html元素?

require 'net/http' 

source = Net::HTTP.get('stackoverflow.com', '/index.html') 

从URL中提取的源代码,是有办法,在Ruby中,找到与某一类的所有链接元素,然后提取这些网址的href属性,把它们放在一个数组中? (我知道我会如何做到这一点在JavaScript,但不是在红宝石。)

也许我不想用net/http

回答

0

你可以使用HTML/XML解析器:引入nokogiri,机械化

0

Hpricot是一个很好的XML/HTML解析器,你可以用它来做到这一点。

1
require 'open-uri' 
require 'hpricot' 

source = open('stackoverflow.com/index.html').read # get raw html 

doc = Hpricot(source) # parse with Hpricot 
links = doc.search("//a[@class~='foo_bar']").collect { |a| a[:href] } # search for all links with 'foo_bar' class and then collect array of links 

注:代码没有经过优化,所以阅读角度来说,Hpricot文档,如果你想改善它;)

3

听起来好像Nokogiri将是您的最佳选择。

require 'nokogiri' 
require 'openuri' 

doc = Nokogiri::HTML(open('http://stackoverflow.com/index.html')) 
doc.xpath('//h3/a[@class="foo"]').each do |element| 
    # do something with element 
end 
相关问题