0

ねえ、

そこで、機能するスクレーパーを作成し、そのファイルをアプリに追加しました。現在、スクレーパーの情報を取得してデータベースに配置しようとしています。find_or_create メソッドを使用しようとしていますが、次のエラーが発生し続けます。

 breads_scraper.rb:49:in `block in summary': uninitialized constant Scraper::Bread    (NameError)   
from /Users/Cameron/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-  1.5.9/lib/nokogiri/xml/node_set.rb:239:in `block in each'
from /Users/Cameron/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.5.9/lib/nokogiri/xml/node_set.rb:238:in `upto'
from /Users/Cameron/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.5.9/lib/nokogiri/xml/node_set.rb:238:in `each'
from breads_scraper.rb:24:in `map'
from breads_scraper.rb:24:in `summary'
from breads_scraper.rb:57:in `<class:Scraper>'
from breads_scraper.rb:9:in `<main>'

私のコードは次のようになります。私の理論は、私が find_or_create を間違って使用しているか、ファイルがパンのメソッドとコントローラーに到達する方法を知らないということです。

require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'uri'
require 'json'

url = Nokogiri::HTML(open("http://en.wikipedia.org/wiki/List_of_breads"))

class Scraper 

def initialize
  @url = "http://en.wikipedia.org/wiki/List_of_breads"
  @nodes = Nokogiri::HTML(open(@url))

end

def summary

  bread_data = @nodes

  breads = bread_data.css('div.mw-content-ltr table.wikitable tr') 
     bread_data.search('sup').remove

    bread_hashes = breads.map {|x| 

      if content = x.css('td')[0]
        name = content.text
      end
       if content = x.css('td a.image').map {|link| link ['href']}
        image =content[0]
      end
      if content = x.css('td')[2]
        type = content.text
      end
       if content = x.css('td')[3]
        country = content.text
      end
       if content = x.css('td')[4]
        description =content.text
      end

   {
      :name => name,
      :image => image,
      :type => type,
      :country => country,
      :description => description,
    }
    Bread.find_or_create(:title => name, :description => description, :image_url => image, :country_origin => country, :type => type)

        }

   end


bready = Scraper.new
bready.summary
puts "atta boy"
end

ありがとう!

4

2 に答える 2

2

rake タスクからスクレーパーを呼び出します。

lib/tasks/scraper.rake

  namespace :app do
    desc "Scrape breads"
    task :scrape_breads => :environment do
      Scraper.new.summary
    end
  end

これで、次のように rake タスクを実行できます。

rake app:scrape_breads
于 2013-04-26T01:55:22.937 に答える
0

Bread クラスがロードされていないようです。

于 2013-04-26T01:19:40.767 に答える