1

我正在尝试使用 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 属性?

4

2 回答 2

4

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

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

于 2013-01-15T22:39:48.187 回答
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)指出的,它做同样的事情。

于 2013-01-15T22:40:02.183 回答