首页 > 解决方案 > 我如何在 Rails(Web Scraping)中写出永无止境的工作?

问题描述

目标:我想在 Rails 应用程序中制作一个可以无限期运行并且可以扩展的网络爬虫。

当前堆栈应用程序正在运行: ROR/Heroku/Redis/Postgres

想法:我正在考虑运行每n分钟运行一次的Sidekiq作业, 并检查是否有任何代理可用于抓取(这些代理将存储在状态为休眠/抓取的表中)。

假设有一个可用于抓取的代理,它将检查(使用Sidekiq API)是否有任何可用的工作人员来启动另一个作业以使用可用的代理进行抓取。

这意味着我可以通过增加工人数量和可用代理的数量来扩展刮板。如果由于任何原因作业失败,则寻找可用代理的作业将再次启动它。

问题:这是实现我目标的最佳解决方案吗?利用长期运行的 Sidekiq 作业是最好的主意还是会失败?

标签: ruby-on-railsweb-scrapingsidekiq

解决方案


Sidekiq 旨在运行对您的组织来说是“工作单元”的单个作业。

您可以构建自己的循环,并在该循环内为要抓取的每个页面创建作业,但循环本身不应该是作业。


推荐阅读