粗糙的嵌套项目图像管道

时间:2019-05-13 15:22:01

标签: python class scrapy pipeline

我有一个嵌套的刮板物品。

class MyItem(scrapy.Item):
    name= scrapy.Field()
    sub_item_id = scrapy.Field()
    sub_item = scrapy.Field() # Another MyItem()
    image_urls = scrapy.Field()
    image_paths = scrapy.Field()

我已经编写了管道,因此如果MyItem()parent_item,那么我先递归并处理parent_item,如果parent_item有自己的parent_item,那么我再递归...

当函数返回时,它们返回一个ID值,因此我知道已完成操作。例如,经过处理后,item1->item2->item3可能为:

item1['name'] = 'item1'
item1['sub_item_id'] = 10
item1['sub_item'] = item2

item2['name'] = 'item2'
item2['parent_item_id'] = 15
item2['parent_item'] = item3

item3['name'] = 'item3'
item3['parent_item_id'] = None
item3['parent_item'] = None

因此在我的数据库中,我有id, parent_id, name字段,当我输入项目时,我就能输入正确的parent_id

这非常适合普通项目管道。但是现在我正在尝试使用ImagesPipeline做类似的事情,但是ImagesPipeline执行get_media_requests()然后将结果返回到item_completed()。使用其他管道,我可以调用内部方法以深入嵌套Item结构。因此,问题是如何从嵌套的Item开始向后的嵌套ImagesPipeline上进行操作?

如我所想,我将需要在get_media_requests()中递归,并再次将parent_item发送到ImagesPipeline并等待它返回一个项目。但是我不确定如何确切地做到这一点。在普通管道中,我只是简单地递归调用方法,但是现在我需要手动将parent_item传递给管道类,然后等待其返回?

如果我从嵌套项目中提取所有图像URL并一次性解析所有内容,那么以后我将需要弄清楚哪个项目是来自哪个项目等。我不确定这是否容易。可能需要对所有URL进行哈希处理并与文件名等进行比较。它可能会变得混乱...

有什么想法吗?

谢谢!

0 个答案:

没有答案