如何在 spider 上重用 yield

How to reuse yield on spider

我是 Scrapy 的新手,也是 python 的新手。 我在蜘蛛中有多个 yield 具有相同的 body。

yield {
    'url'  : response.url,
    'html' : response.css('body').extract(),
    'title': response.css('title::text').extract_first(),
}

每个 yield 都在不同的解析方法中,但我只想写一次 yield 并重用它。

我首先尝试了一种方法,将响应作为参数并 returns yield。 然后我从 parse 方法中调用了那个方法,但是 Scrapy 声称我不能 return yield.

看起来你想要这样的东西

item = {
            'url'  : response.url,
            'html' : response.css('body').extract(),
            'title': response.css('title::text').extract_first(),
        }

yield item
yield item
yield item

您可以为该代码定义一个方法,例如:

def parse_item(self, response): 
    yield {
        'url'  : response.url,
        'html' : response.css('body').extract(),
        'title': response.css('title::text').extract_first(),
    }

并使用 yield from 从另一个方法调用它。例如:

def another_method(self, response)
    # ...
    yield from self.parse_item(response)