我们一直在使用 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.
但是,最近,我注意到另一个“新鲜”包 - ScrapyRT
根据项目描述,这听起来很有前途,类似于 Scrapyd
:
HTTP server which provides API for scheduling Scrapy spiders and making requests with spiders.
这个包是 Scrapyd
的替代品吗?如果有,两者有什么区别?
最佳答案
他们没有太多共同点。正如您已经看到的,您必须将您的蜘蛛部署到scrapyd,然后安排爬网。 scrapyd 是在服务器上运行的独立服务,您可以在其中部署和运行您喜欢的每个项目/蜘蛛。
使用 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 非常巧妙地不会在这个时间点重叠。当然,你永远不知道 future 会怎样。
关于python - ScrapyRT 与 Scrapyd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37283531/