如何使用Rails 3从其他网站获取数据

时间:2013-08-12 02:18:58

标签: ruby-on-rails ruby web-scraping nokogiri

我有一个Rails 3.2.13网站,需要抓取另一个网站来获取产品说明。在Rails 3中执行此操作的最佳方法是什么?

我听说nokogiri很快。我应该使用nokogiri吗?如果我使用nokogiri,我可能不再需要保存已删除的数据吗?我想它就像从API获取json数据一样,是这样的吗?

2 个答案:

答案 0 :(得分:4)

我推荐Nokogiri和open-uri的组合。需要两个宝石,然后按照doc = Nokogiri::HTML(open(YOUR_URL))的方式做一些事情。然后找到要捕获的元素(使用chrome中的开发人员工具(或等效的)或类似Selector Gadget的内容。然后,您可以将doc.at_css(SELECTOR)用于单个元素,或doc.search(SELECTOR)用于多个元素选择器。调用文本方法响应应该为您提供您正在寻找的产品描述。无需向数据库保存任何内容(除非您愿意)希望有所帮助!

答案 1 :(得分:2)

mechanize是抓取其他网站为html 的数据的绝佳宝石。它简单,强大,并使用nokogiri gem作为结果包装。

以下代码段将向您展示如何从url中获取所需的数据,这些数据被视为Safari浏览器:

require 'htmlentities'
require "mechanize"
a = Mechanize.new { |agent|
    agent.user_agent_alias = 'Mac Safari'
}
@resultHash = {}

a.get(url) do |page|
    parsedPage = page.parser
    @resultHash[:some_data_name] = parsedPage.at_xpath("//h1[@class='any-class']").text.split(/\s+/).join(" ")
end