我有以下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()})
然而,这对我来说似乎是非常糟糕的编码,因为项目字典有时可能非常大。传递它只是为了检查一个属性是很奇怪的。还有更好的方法吗?
答案 0 :(得分:1)
只需将项目分配给变量,然后产生该变量:
item = item_loader.load_item()
yield item
if item['images_matched']:
yield Request(links, callback=parse)
' if'语句将在管道之后运行。