Scrapy 基于刮擦条件的爬行

Scrapy 基于刮擦条件的爬行,scrapy,scrapy-spider,scrapy-pipeline,Scrapy,Scrapy Spider,Scrapy Pipeline,我有下面的Scrapy解析方法: def parse(self, response): item_loader = ItemLoader(item=MyItem(), response=response) for url in response.xpath('//img/@src').extract(): item_loader.add_value('image_urls', response.urljoin(url)) y

我有下面的Scrapy解析方法:

def parse(self, response):
        item_loader = ItemLoader(item=MyItem(), response=response)
        for url in response.xpath('//img/@src').extract():
            item_loader.add_value('image_urls', response.urljoin(url))
        yield item_loader.load_item()
        # If item['images_matched'] == True:
        # yield Request(links, callback=parse)
这会将提取的图像URL发送到ImagePipelines。我需要从该页面上做额外的链接,如果满足一定条件。。。类似于。。。图像内容的校验和与哈希列表匹配


我的问题是,一旦项目在ImagesPipeline中完成并填充了所有数据,我就不知道如何访问该项目。意思是
项['images\u matched']
不会在解析方法中填充,而是在管道中填充。需要有关访问项目或使用其他方法的帮助吗


编辑:我发现在
yield
之后添加以下内容是有效的

yield Request(link, callback=parse, meta={'item': item_loader.load_item()})

然而,对我来说,这似乎是难以置信的糟糕编码,因为条目dict有时可能相当大。传递它只是为了检查一个属性是很奇怪的。有更好的方法吗?

只需将项目分配给一个变量,然后生成该变量:

item = item_loader.load_item()
yield item
if item['images_matched']:
    yield Request(links, callback=parse)

“if”语句将在管道之后运行。

谢谢。我真的试过类似的东西,但没用。我不确定我删除代码时的错误在哪里。好吧,我有个问题。项目中的变量最初设置为
false
,但随后在管道中更新为
true
(有时)。问题是,使用这种方法,变量在被管道更改之前就被访问了,因此它几乎总是
false
。我怎样才能让它工作呢?