【问题标题】:Heroku and Web scrapingHeroku 和网页抓取
【发布时间】:2023-04-03 20:10:01
【问题描述】:

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

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

感谢大家的意见

【问题讨论】:

  • 这取决于你希望它多久触发一次——根据命令,在某个时间……?
  • 您的问题需要更多信息才能得到解答。你想从heroku内部刮吗? /scraper 的作用是什么,是启动抓取脚本还是检索抓取的内容?您是否更关心如何保护 http 端点而不是如何在 heroku 上托管应用程序?

标签: ruby web-services api heroku sinatra


【解决方案1】:

您可以采取两种方法。

第一个是通过使用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

【讨论】:

    【解决方案2】:

    我通过创建一个 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]
    

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多