Как создать скрап-ответы без запросов? - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно повторно обработать ранее загруженные веб-сайты, не загружая их снова.

Итак, я хочу создать несколько 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(...)?

Есть ли возможность контролировать, где (до / где-то между / после промежуточного ПО загрузчика / промежуточного ПО паука) вводится ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...