Динамическое изменение приоритета планировщика запросов 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 ответ
- приоритет по умолчанию для запроса равен 0, поэтому, если вы установите приоритет 50, работать не будет
- вы можете использовать промежуточное программное обеспечение для сбора (вставки запросов в свою очередь, например, redis set) и игнорирования (возврата исключения IngnoreRequest) этих запросов на удаление
- начать второй обход с запросами, загруженными из вашей очереди на шаге 2