使用Nokogiri和Ruby从html doc获取链接和href文本?

我正在尝试使用nokogiri gem来提取页面上的所有url以及它们的链接文本,并将链接文本和url存储在哈希中。

  Foo Bar    

我想回来

 {"Foo" => "#foo", "Bar" => "#bar"} 

这是一个单行:

 Hash[doc.xpath('//a[@href]').map {|link| [link.text.strip, link["href"]]}] #=> {"Foo"=>"#foo", "Bar"=>"#bar"} 

分开一点可以说是更具可读性:

 h = {} doc.xpath('//a[@href]').each do |link| h[link.text.strip] = link['href'] end puts h #=> {"Foo"=>"#foo", "Bar"=>"#bar"} 

其他方式:

 h = doc.css('a[href]').each_with_object({}) { |n, h| h[n.text.strip] = n['href'] } # yields {"Foo"=>"#foo", "Bar"=>"#bar"} 

如果你担心你可能有相同的文本链接到不同的东西,那么你收集数组中的href

 h = doc.css('a[href]').each_with_object(Hash.new { |h,k| h[k] = [ ]}) { |n, h| h[n.text.strip] << n['href'] } # yields {"Foo"=>["#foo"], "Bar"=>["#bar"]}