7

我有一个 nokigiri 网络爬虫,它发布到我试图发布到 heroku 的数据库。我有一个想从数据库中提取的 sinatra 应用程序前端。我是 Heroku 和 Web 开发的新手,不知道处理此类事情的最佳方法。

我是否必须将上传到数据库的网络爬虫脚本放在 sinatra 路由下(例如 mywebsite.com/scraper ),然后让它变得如此晦涩以至于没有人访问它?最后,我想让 sinatra 部分成为从数据库中提取的 rest api。

感谢所有输入

4

2 回答 2

3

您可以采取两种方法。

第一个是通过控制台运行刮板来使用一次性测功机heroku run YOURCMD。只要确保刮板不写入磁盘而是使用数据库即可。

更多信息: https ://devcenter.heroku.com/articles/one-off-dynos

第二个是区分爬虫和 Web 进程的方式,你有一个用于正常 UI 交互的 Web 进程和一个 Web 进程可以生成/对话的爬虫进程。如果您采用这条路线,则取决于您如何保护它免受世界其他地方的影响(auth/url 混淆等)。

更多信息: https ://devcenter.heroku.com/articles/background-jobs-queueing

于 2013-08-06T11:28:32.813 回答
0

我通过创建一个 rake 任务并使用 XLII 提到的一次性测功机来做到这一点

这是我的 rake 任务文件

require 'bundler/setup'
Bundler.require

desc "Scrape Site"
 task :scrape, [:companyname]  => :environment do |t, args|
    puts "Company Name is :" + args[:companyname]

    agent = Mechanize.new
    agent.user_agent_alias = 'Mac Safari'
    puts "Agent (Mac Safari Created)"
        # MORE SCRAPING CODE

 end

您可以通过调用简单地运行它

heroku run rake scrape[google]
于 2014-05-14T10:47:13.327 回答