在Rails应用程序中填充来自其他站点的抓取内容

时间:2018-12-28 00:39:55

标签: ruby-on-rails

我需要从另一个站点播种或抓取数据,以便获得项目的内容。

如何使用自己的Rails应用程序从另一个站点抓取数据?您是否使用单独的应用程序/服务器来运行某种Cron作业,然后将该数据添加到Rails应用程序中?还是可以让您自己的网站抓取数据并直接显示?

我的第一个想法是使用Mechanize刮取一个站点,然后将数据作为种子数据添加到我的rails应用程序的“夹具”中。有没有更好的办法?甚至还有一种方法可以使用我自己的Rails应用程序连续抓取其他站点以显示数据?

3 个答案:

答案 0 :(得分:1)

您可以使用rufus调度程序和watir-dom-wait gem作为您的问题解决方案。我也为抓取亚马逊Kdp图书清单抓取完成了类似的任务 通过使用watir-dom-wait gem,您还可以获取机械化请求的ajax调用请求的数据,而Nokogiri将不适用于Ajax

require 'rufus-scheduler'
require 'watir-dom-wait'
require 'selenium-webdriver'
scheduler = Rufus::Scheduler.new

scheduler.in '1d' do
  download_report
end
#download the report form amazon kdp
def download_report
  #login
  @browser = Watir::Browser.new :chrome, options: {prefs: prefs}
  @browser.goto 'https://kdp.amazon.com/en_US/reports-new'
  @browser.input(:name => "email").send_keys("test@gmail.com")
  @browser.input(:name => "password").send_keys("password")
  @browser.input(:id => 'signInSubmit').click
  @browser.span(:text => "Generate Report").click
end

答案 1 :(得分:0)

我使用heroku,它带有一个称为Scheduler的东西,对于我的小项目来说效果很好。我相信它与cron非常相似。

Heroku Scheduler

一旦数据被废弃。它直接进入数据库(psql),然后您可以通过数据库查询显示所需的内容

答案 2 :(得分:0)

我使用Nokogiri抓取网站。

您不需要单独的应用程序。您可以在模型内部使用一些方法来处理所有刮取和填充数据库的操作,然后可以创建一个运行这些功能的rake文件。

我为我的Scheduler.rake命名

它在/ lib / tasks /

然后,如果您使用的是Heroku,则可以添加Scheduler插件(免费提供2018年12月28日)

Heroku有一些漂亮的good docs,解释了如何在事物的Heroku端配置事物。