Мне нужно повторно обработать ранее загруженные веб-сайты, не загружая их снова.
Итак, я хочу создать несколько scrapy.Response без каких-либо scrapy.Request's.
- Эти ответы должны быть обработаны перед любым новым загруженным ответом.
- Предположим, что содержимое ответа (url, body, ...) загружено откуда-то.
- Сборка в HTTP-кэше не подходит, так как требует запросов ...
- Я не хочу, чтобы Пауки позаботились об этом.
Может быть, расширение может сделать это - Middleware тоже подойдет. Минимальный пример:
from scrapy import signals
from scrapy.http import Response
class ReprocessSnapshotsOnSpiderOpenExtension(object):
def __init__(self, crawler):
self.crawler = crawler
crawler.signals.connect(self.send_the_existing_snapshots_as_new_response, signal=signals.spider_opened)
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def send_the_existing_snapshots_as_new_response(self, spider):
print("##### now in ReprocessSnapshotsOnSpiderOpenExtension.send_the_existing_snapshots_as_new_responses()")
response1 = Response("http://the_url_of_resp1", body=b"the body of resp1")
response2 = Response("http://the_url_of_resp2", body=b"the body of resp2")
# ....
responseN = Response("http://the_url_of_respN", body=b"the body of respN")
inject_response_somehow(response1)
inject_response_somehow(response2)
# ...
inject_response_somehow(responseN)
Итак, вопрос: как реализовать inject_response_somehow(...)
?
Есть ли возможность контролировать, где (до / где-то между / после промежуточного ПО загрузчика / промежуточного ПО паука) вводится ответ?