1

我有以下 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。如果满足某个条件,我需要让 Scrapy 从该页面抓取其他链接......类似于......图像内容的校验和与哈希列表匹配。


我的问题是,一旦在 ImagesPipeline 中完成并填充了所有数据,我不知道如何访问该项目。item['images_matched']解析方法中没有填充含义,而是在管道中填充了含义。在访问该项目或对此的不同方法方面需要帮助


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

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

然而,这对我来说似乎是非常糟糕的编码,因为项目字典有时可能非常大。传递它只是为了检查一个属性是很奇怪的。有没有更好的办法?

4

1 回答 1

1

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

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

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

于 2017-07-29T09:22:15.850 回答