ScrapyRT 与 Scrapyd

ScrapyRT vs Scrapyd

到目前为止,我们已经使用 Scrapyd service 一段时间了。它为 scrapy 项目及其蜘蛛提供了一个很好的包装器,允许通过 HTTP API:

控制蜘蛛

Scrapyd is a service for running Scrapy spiders.

It allows you to deploy your Scrapy projects and control their spiders using a HTTP JSON API.

但是,最近,我注意到另一个 "fresh" 包 - ScrapyRT,根据项目描述,它听起来很有前途并且类似于 Scrapyd:

HTTP server which provides API for scheduling Scrapy spiders and making requests with spiders.

这个包是 Scrapyd 的替代品吗?如果是,两者有什么区别?

他们没有多少共同点。正如您已经看到的,您必须将蜘蛛部署到 scrapyd,然后安排抓取。 scrapyd 是一个独立的服务 运行ning 在服务器上,您可以在其中部署和 运行 每个 project/spider 你喜欢的。

使用 ScrapyRT,您可以选择一个项目,然后 cd 进入该目录。那么你 运行 例如scrapyrt 并且您通过一个简单的(并且非常类似于 scrapyd 的)REST API 在该项目 上开始抓取蜘蛛 。然后,作为 JSON 响应的一部分,您会取回已抓取的项目。

这是一个非常好的主意,它看起来快速、精简且定义明确。另一方面,Scrapyd 更成熟也更通用。

以下是一些主要区别:

  • Scrapyd支持多版本爬虫和多项目。据我所知,如果您想 运行 使用 ScrapyRT 的两个不同项目(或版本),您将不得不为每个项目使用不同的端口。
  • Scrapyd 提供了将项目保存在服务器中的基础设施,而 ScrapyRT 将它们发送回给你响应,对我来说,这意味着它们应该在几 MB 的数量级(而不是潜在的 GB)。类似地,与 ScrapyRT 相比,scrapyd 中处理日志记录的方式更为通用。
  • Scrapyd(可能持续)对作业进行排队,并让您控制 运行 并行的 Scrapy 进程的数量。 ScrapyRT 做了一些简单的事情,据我所知就是在请求到达后立即开始对每个请求进行爬网。在其中一个蜘蛛中阻止代码也会阻止其他蜘蛛。
  • ScrapyRT 需要一个 url 参数,据我所知,它会覆盖任何 start_urls 相关逻辑。

我想说 ScrapyRT 和 Scrapyd 非常巧妙地在这个时间点没有重叠。当然你永远不知道未来会怎样。