Scrapy HTTP Cache Hit для различных ценных запросов - PullRequest
0 голосов
/ 21 февраля 2020

У меня проблема с http-кэшированием scrapy - это вычисление попадания в кеш, даже когда я передаю разные аргументы. Вот пример паука:

def exampleSpider(scrapy.Spider):
    name = "example"

    def start_requests(self):
        # http://foo and http://bar both contain the same link: http://baz
        start_urls = ['http://foo', 'http://bar']
        for url in start_urls:
            example_item = ExampleScraperItem()
            example_item['url'] = url
            yield scrapy.Request(url=url,
                                 callback=self.parse,
                                 cb_kwargs=('example_item': example_item))

    def parse(self, response, example_item):
        links = response.xpath("//@href")  # == ['http://baz'] for both
        for link in links:
            example_item2 = ExampleScraperItem(example_item)  # avoid concurrency issues
            yield scrapy.Request(url=link,
                                 callback=self.parse_nested,
                                 cb_kwargs=('example_item': example_item2))

    def parse_nested(self, response, example_item):
        # 'foo_key' = 'foo_value'
        example_item['foo_key'] = response.xpath('//text()').extract_first()
        yield example_item

Проблема в scrapy.Request (...) в функции разбора (...). Поскольку http://baz кэшируется при сканировании http://foo, когда сканируется http://bar, scrapy возвращает кэшированный объект ExampleScraperItem при scrapy.Request (. ..) называется.

Однако я действительно хочу, чтобы сканирование http://foo дало {'url': 'http://foo', 'foo_key ':' foo_value '} и сканирование http://bar для получения {' url ':' http://bar ',' foo_key ':' foo_value '}. Как мне это сделать?

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