2013-04-26 5 views
0

Heyo,Saisie de données récupérées dans la base de données

J'ai donc construit un grattoir fonctionnel et ajouté le fichier à mon application. J'essaie maintenant de prendre l'information dans le grattoir et de le placer dans ma base de données. J'essaye d'employer la méthode de find_or_create mais j'obtiens toujours l'erreur suivante.

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

Mon code ressemble à ceci. Ma théorie est que j'utilise find_or_create de manière incorrecte, ou le fichier ne sait pas comment atteindre la méthode pain et le contrôleur.

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 

Merci!

+0

Il vous semble que vous attendez votre environnement de rails disponibles , qui dépend de la façon dont vous exécutez le script. – pguardiario

+0

Des suggestions sur la façon dont je peux charger la classe? Merci – DynastySS

+0

À partir d'une tâche de rake avec l'environnement défini. Vous pouvez omettre les exigences aussi. – pguardiario

Répondre

2

Appelez le racloir à partir d'une tâche de râteau.

lib/tâches/scraper.rake

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

Maintenant, vous pouvez exécuter la tâche de coupe comme suit:

rake app:scrape_breads 
+0

Merci, cela semble très utile! – DynastySS

0

Il semble que la classe Pain n'est pas chargée.

+0

J'avais le sentiment que c'était le problème. Je serai honnête cependant, je ne sais pas comment le charger ... – DynastySS

Questions connexes