2

我创建了一个新的蜘蛛来抓取一个网站。这个爬虫在网站上获取 liste 的每个视频游戏并为其创建一个对象:

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
]

所以我试图在我的主要对象中创建一个对象。它可以工作,但最后,我只有一个要填充的对象,而我想在我的主要对象中创建一些对象。

谢谢你的帮助

4

2 回答 2

1

ScrapyField类是dict. 如果您想让其中一个字段能够包含Items 列表,我相信您可以创建一个 List 字段。

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)
于 2013-04-22T13:24:54.130 回答
1

解决方案很简单。创建一个对象:

class GameInfo(Item):
    title = Field()
    desc = Field()
    kind = Field()
    listeBuys = Field()

然后,在您的蜘蛛中,实例 GameInfo:

gameInfo = GameInfo()

然后,所需字段的实例 python 列表:

gameInfo['listeBuys'] = []

最后,根据需要添加:

gameInfo['listeBuys'].append(asyouwant)

感谢 dm03514 的帮助!

于 2013-04-22T16:56:00.453 回答