Scrapy动态创建对象+ json导出

时间:2013-04-22 13:05:10

标签: python json scrapy

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

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
]

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

感谢您的帮助

2 个答案:

答案 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的帮助!