1

Ruby と Nokogiri を使用してこの Web サイトを解析しようとしています。

これが私のコードです:

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']

これをもう少し安全にしたい場合は、nil をチェックすることができます:

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

またはat_css、同じことを行うヘルパー (@AJcodez など) を使用することもできます。

于 2013-01-15T22:40:02.183 に答える