Динамическое изменение приоритета планировщика запросов Scrapy

Я использую scrapy, чтобы выполнить тест на внутреннем веб-приложении. После того, как все мои тесты выполнены, я использую CrawlSpider для проверки везде, и для каждого ответа я запускаю валидатор HTML и ищу 404 медиа-файла.

Это работает очень хорошо, за исключением этого: ползать в конце, GET вещи в случайном порядке... Итак, URL, которые выполняют операцию DELETE, выполняются перед другими операциями.

Я хотел бы запланировать все удаления в конце. Я пробовал много способов, с таким планировщиком:

из журнала импорта скрапа

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 вызывается сигнал, чтобы вернуть их обратно, но я не уверен, как это сделать.

Каков наилучший способ добиться этого?

1 ответ

  1. приоритет по умолчанию для запроса равен 0, поэтому, если вы установите приоритет 50, работать не будет
  2. вы можете использовать промежуточное программное обеспечение для сбора (вставки запросов в свою очередь, например, redis set) и игнорирования (возврата исключения IngnoreRequest) этих запросов на удаление
  3. начать второй обход с запросами, загруженными из вашей очереди на шаге 2
Другие вопросы по тегам