2013-04-26 2 views
0

Heyo,Ввод скребковых данных в базу данных

Поэтому я построил рабочий скребок и добавил файл в свое приложение. Теперь я пытаюсь взять информацию в скребке и поместить ее в свою базу данных. Я пытаюсь использовать метод 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 

Спасибо!

+0

Похоже, вы ждете вашей среды рельсы должны быть доступны , что зависит от того, как вы запускаете скрипт. – pguardiario

+0

Любые предложения о том, как я могу загрузить класс? Спасибо – DynastySS

+0

Из задачи грабли с установленной средой. Вы также можете отказаться от необходимости. – pguardiario

ответ

2

Вызвать скребок из грабли.

Библиотека/Задачи/scraper.rake

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

Теперь вы можете запустить задачу грабли следующим образом:

rake app:scrape_breads 
+0

Спасибо, это выглядит очень полезно! – DynastySS

0

Похоже, класс Хлеба не загружен.

+0

У меня было ощущение, что это проблема. Я буду честен, хотя, я не уверен, как загрузить его ... – DynastySS

Смежные вопросы