2013-05-18 37 views
3

我正在使用scrapy在内部Web应用程序上执行测试。 一旦我所有的测试都完成了,我使用CrawlSpider来检查每个地方,并且我为每个响应运行一个HTML验证器,然后查找404个媒体文件。动态更改scrapy请求调度程序优先级

它工作得很好,除了这个:最后抓取,GET东西以随机顺序... 因此,执行DELETE操作的URL正在其他操作之前执行。

我想安排在最后删除所有内容。我试过很多方法,用这类调度:

从scrapy导入日志

class DeleteDelayer(object): 
    def enqueue_request(self, spider, request): 
     if request.url.find('delete') != -1: 
      log.msg("delay %s" % request.url, log.DEBUG) 
      request.priority = 50 

但它不工作...我看到删除被“延迟”在日志中,但他们是在执行执行。

我想过使用一个中间件,它可以在内存中堆积所有的删除URL,并且当调用spider_idle信号将它们重新放回去,但我不知道如何做到这一点。

实现这个目标的最佳方法是什么?对于要求

回答

0
  1. 默认优先级为0,因此需要设置优先级,以50行不通
  2. 可以使用中间件来收集(插入请求到自己的队列,例如,Redis的设置),并忽略(返程IngnoreRequest Exception)那些'删除'请求
  3. 开始第二次抓取,请求从您的队列中加载第二步中的内容