使用Nokogiri从链接获取href时无法将String转换为Integer

时间:2013-01-15 22:27:08

标签: ruby html-parsing nokogiri

我正在尝试使用Ruby和Nokogiri来解析这个网站:

这是我的代码:

require 'nokogiri'
require 'open-uri'

class StreamsController < ApplicationController
  def index
  end

  def updateall
    doc = Nokogiri::HTML(open('http://www.own3d.tv/game/League+of+Legends'))

    # Grab all the Live streams from the front page.
    doc.css('div#top_live .VIDEOS-1grid-box').each do |stream|
      s = Stream.new

      # Parse the URL.
      s.url = stream.css('a.small-tn')['href']
    end
  end
end

# Parse the URL位,我收到错误Cannot convert String to Integer.

我对如何使用Nokogiri这个简单的用例感到困惑。

如何获取每个|stream|对象中每个链接的href属性?

2 个答案:

答案 0 :(得分:4)

问题是stream.css返回匹配的NodeSet(如数组),因此字符串无法转换为数组索引。

要获得第一场比赛,请使用stream.at_css,这是我认为您想要的。

答案 1 :(得分:3)

stream.css('a.small-tn')将返回一组节点。所以在集合上调用['href']不会起作用,因为集合充当数组,它认为你正在尝试访问某个索引处的元素(因此错误)。相反,你需要决定是否想要遍历它们,或者只是抓住第一个:

s.url = stream.css('a.small-tn').first['href']

如果你想让它更安全,你可以检查nils:

node = stream.css('a.small-tn').first
s.url = node['href'] if node

或者您可以使用指出的at_css助手(如@AJcodez),这也是一样的。