为了保持条理清晰,我确定爬行器将填充三个item类。
每个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()有多个页面要抓取相同的项目。在爬虫中,我使用XPathItemLoader来填充“容器”。
目标是将这些项传递到mysql管道,以填充单个表。但这里有个问题。
当我产生三个容器(每页)时,它们被作为三个单独的容器传递到管道中。它们作为自己的BaseItem遍历管道,只填充mysql表中自己的部分,将其他列保留为“NULL”。
我想要做的是将这三个容器重新打包到一个BaseItem中,这样它们就可以作为一个单独的项目传递到管道中。
有没有人对重新包装这些商品有什么建议?要么在蜘蛛中,要么在管道中?
谢谢
发布于 2012-07-24 00:56:52
我这样做是为了推动事情的发展,但如果有人可以改进或暗示更好的解决方案,请分享它。
如下所示在爬行器中加载我的项目:
items = [item1.load_item(), item2.load_item(), item3.load_item()] 然后我在爬行器外部定义了一个函数:
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
在process_item中,为了解压该项目,我执行了以下操作:
def process_item(self, item, spider):
items = item.fieldsitems现在是一个字典,其中包含从爬行器中提取的所有字段,然后我使用这些字段插入到单个数据库表中
https://stackoverflow.com/questions/11616014
复制相似问题