Scrapy 重新包装刮痕蜘蛛类物品

Scrapy 重新包装刮痕蜘蛛类物品,scrapy,pipeline,web-crawler,Scrapy,Pipeline,Web Crawler,为了使事情有条理,我决定蜘蛛将填充三个项目类 每个item类都有各种填充的字段 class item_01(Item): item1 = Field() item2 = Field() item3 = Field() class item_02(Item): item4 = Field() item5 = Field() class item_03(Item): item6 = Field() item7 = Field() i

为了使事情有条理,我决定蜘蛛将填充三个项目类

每个item类都有各种填充的字段

class item_01(Item):
    item1 = Field()
    item2 = Field()
    item3 = Field()

class item_02(Item):
    item4 = Field()
    item5 = Field()

class item_03(Item):
    item6 = Field()
    item7 = Field()
    item8 = Field()
有多个页面可以使用相同的项目进行爬网。 在spider中,我使用XPathItemLoader填充“容器”

目标是将项目传递到mysql管道以填充单个表。但问题是

当我给出三个容器(每页)时,它们作为三个单独的容器被传递到管道中。 它们作为自己的BaseItem通过管道,只填充mysql表中的部分,而将其他列保留为“NULL”

我想做的是将这三个容器重新打包到一个BaseItem中,以便将它们作为单个项传递到管道中

有人对重新包装这些物品有什么建议吗?蜘蛛网还是管道


谢谢

我这样做是为了让事情进展顺利,但如果有人能改进或提示更好的解决方案,请分享

在spider中加载我的项目,如下所示:

items = [item1.load_item(), item2.load_item(), item3.load_item()]  
然后,我在spider之外定义了一个函数:

def rePackIt(items):
    rePackage = rePackageItems()
    rePack = {}
    for item in items:
        rePack.update(dict(item))

    for key, value in rePack.items():
        rePackage.fields[key] = value
    return rePackage  
items.py
中,我添加了:

class rePackageItems(Item):
    """Repackage the items"""
    pass  
爬行器完成对页面的爬行并加载项目后,我生成:

yield rePackIt(items)  
这将带我到
pipelines.py

过程中\u item
打开物品包装时,我执行了以下操作:

def process_item(self, item, spider):
        items = item.fields

items现在是一个字典,包含从spider中提取的所有字段,然后我将这些字段插入到单个数据库表中

我这样做是为了让事情进展顺利,但是如果有人可以改进或提示更好的解决方案,请与大家分享

在spider中加载我的项目,如下所示:

items = [item1.load_item(), item2.load_item(), item3.load_item()]  
然后,我在spider之外定义了一个函数:

def rePackIt(items):
    rePackage = rePackageItems()
    rePack = {}
    for item in items:
        rePack.update(dict(item))

    for key, value in rePack.items():
        rePackage.fields[key] = value
    return rePackage  
items.py
中,我添加了:

class rePackageItems(Item):
    """Repackage the items"""
    pass  
爬行器完成对页面的爬行并加载项目后,我生成:

yield rePackIt(items)  
这将带我到
pipelines.py

过程中\u item
打开物品包装时,我执行了以下操作:

def process_item(self, item, spider):
        items = item.fields
items现在是一个字典,其中包含从spider提取的所有字段,然后我将这些字段插入到单个数据库表中