我正在尝试使用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属性?
答案 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),这也是一样的。