我创建了一个新蜘蛛来抓取一个网站。 这个爬虫在网站上获取每个视频游戏,并为它创建一个对象:
class gameInfos(Item):
title = Field()
desc = Field()
kind = Field()
对于每个游戏,该网站包含一个变量列表的经销商。我将每个经销商都放在对象中:
class buyInfos(Item):
name = Field()
address = Field()
price = Field()
现在,我的问题:
我希望在buyInfos
对象中放置gameInfos
个对象,并且我的json文件看起来是:
[
{
"title": "BF3",
"desc": "a beautiful game",
"kind" : "FPS",
"buy" :
[
{name : "cdiscount", "address" : "example", "price" : "45 €"},
{name : "amazon", "address" : "example amazon", "price" : "40 €"},
//... other resellers
]
},
{
"title": "COD 42",
"desc": "a game",
"kind" : "FPS",
"buy" :
},
//... other games
]
所以我尝试在主对象中创建一个对象。它工作但最后,我只有一个对象要填充,而我想在我的主对象中创建一些对象。
感谢您的帮助
答案 0 :(得分:1)
Scrapy Field
类是dict
的子类。如果您想使其中一个字段能够包含Item
的列表,我相信您可以创建一个列表字段。
class ListField(list):
pass
class GameInfo(Item):
title = Field()
desc = Field()
kind = Field()
buys = ListField()
现在你的蜘蛛可以创建gameInfos
,它可以包含所有相关的buyInfos
game_info = GameInfo()
# create your buy info and append to game info
game_info['buys'].append(new_buy_info)
答案 1 :(得分:1)
解决方案很简单。创建一个对象:
class GameInfo(Item):
title = Field()
desc = Field()
kind = Field()
listeBuys = Field()
然后,在你的蜘蛛中,实例GameInfo:
gameInfo = GameInfo()
然后,所需字段的实例python列表:
gameInfo['listeBuys'] = []
最后,根据需要添加:
gameInfo['listeBuys'].append(asyouwant)
感谢dm03514的帮助!