ScrapyRT vs Scrapyd

时间:2016-05-17 18:16:06

标签: python web-scraping scrapy scrapyd

到目前为止,我们一直在使用Scrapyd service一段时间。它为scrapy项目提供了一个很好的包装器,它的蜘蛛可以通过HTTP API来控制蜘蛛:

  

Scrapyd是一种运行Scrapy蜘蛛的服务。

     

它允许您部署Scrapy项目并控制其蜘蛛   使用HTTP JSON API。

但是,最近,我注意到另一个&#34;新鲜&#34;包 - ScrapyRT,根据项目描述,听起来非常有前途,与public RelayCommand<int> MyCommand = new RelayCommand<int>((i) => { if (i != 0) { DoSomething(i); } }); 类似:

  

HTTP服务器,提供用于调度Scrapy蜘蛛并使用蜘蛛发出请求的API。

此套餐是Scrapyd的替代品吗?如果是,那两者之间有什么区别?

1 个答案:

答案 0 :(得分:17)

他们没有多少共同之处。正如您已经看到的,您必须将您的蜘蛛部署到报废,然后安排爬网。 scrapyd是一个在服务器上运行的独立服务,您可以在其中部署和运行您喜欢的每个项目/蜘蛛。

使用ScrapyRT,您可以选择一个项目,并选择cd到该目录。然后你运行,例如scrapyrt并且您通过一个简单的(和非常类似于scrapyd&#39; s)REST API开始为该项目上的蜘蛛进行爬网。然后,您将获取已爬网的项目作为JSON响应的一部分。

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

以下是一些主要差异:

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

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