【发布时间】:2017-03-15 14:19:36
【问题描述】:
我在 Rails 5 中的应用程序有问题。我创建了 scrape.rb 类
通过 Nokogiri gem 抓取 HTML 并可以将这些数据保存在另一个模型中,但是当我在 rails 控制台中创建新对象时,它返回 nil 并且不废弃任何值:
2.3.0 :018 > s = Scrape.new
=> #<Scrape:0x007fba68b79e98>
2.3.0 :019 > s.scrape_new_movie
=> nil
2.3.0 :020 >
这里是scrape.rb模型
class Scrape
attr_accessor :title, :vote, :image_url, :description,
def scrape_new_movie
begin
doc = Nokogiri::HTML(open("https://zalukaj.com/zalukaj-film/26280/barbie_w_wiecie_gier_barbie_video_game_hero_2017_.html").read, nil, 'utf-8')
doc.css('script').remove
self.title = doc.css('#pw_title.about_movie_title').text
v = doc.css('#success_vote').text
self.vote = v.slice(2...5)
self.image_url = doc.css('.about_movie img').attr('src').text
self.description = doc.css('#pw_description.e_s3k').text
return true
rescue Exception => e
self.failure = "Something went wrong with the scrape"
end
end
def save_movie
movie = Movie.new(
title: self.title,
vote: self.vote,
image_url: self.image_url,
description: self.description
)
movie.save
end
end
【问题讨论】:
-
运行
s.scrape_new_movie后,s.failure返回什么? -
尝试删除
begin/rescue/end,看看会发生什么错误。 -
当我删除它时,值仍然为零。我如何检查
s.failure返回的内容? -
在您运行
s.scrape_new_movie的同一个控制台实例中,输入s.failure -
好的,所以当我输入
s.failure时,它现在返回NoMethodError: undefined methodfailure' for #<0x007f92e69f37f8>0x007f92e69f37f8>
标签: ruby web-scraping nokogiri ruby-on-rails-5 activemodel