我有一个nokigiri网络抓取工具,该抓取工具发布到了我要发布到heroku的数据库中。我有一个想要从数据库中提取的sinatra应用程序前端。我不熟悉Heroku和Web开发,也不知道处理此类问题的最佳方法。
我是否必须将上传到数据库的网络抓取脚本放置在sinatra路由下(例如mywebsite.com/scraper),并且使其变得如此晦涩,以至于没有人访问它?最后,我想让sinatra部分成为从数据库中提取的rest api。
感谢所有输入
您可以采用两种方法。
第一个是使用heroku run YOURCMD
通过控制台运行刮板来使用一次性测功机。只要确保刮板不要写入磁盘而是使用数据库即可。
更多信息:https://devcenter.heroku.com/articles/one-off-dynos
第二个区别是,您具有用于常规UI交互的Web流程和该Web进程可以生成/与之对话的scraper进程,从而区分了scraper和Web进程。如果您采用此路线,则取决于您如何保护它免受世界其他地区的影响(身份验证/网址混淆等)。
更多信息:https://devcenter.heroku.com/articles/background-jobs-queueing
我通过创建rake任务并使用XLII提到的一次性测功机来做到这一点
这是我的耙任务文件
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]
[使用python观看有关在Heroku上进行网络废弃和硒网络自动化的视频,https://youtu.be/GMXqSsbQhos