2013-04-22 77 views
2

我创建了一个新的蜘蛛来抓取网站。 这种履带获得网站清单当然每个视频游戏,并为它创建一个对象:Scrapy动态创建对象+ json导出

class gameInfos(Item): 
    title = Field() 
    desc = Field() 
    kind = Field() 

每场比赛,本网站包含的经销商变量列表。我得到的每一个经销商在对象:

class buyInfos(Item): 
    name = Field() 
    address = Field() 
    price = Field() 

现在,我的问题:

我希望把buyInfos对象(S)内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 
] 

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

感谢您的帮助

回答

1

解决办法很简单。创建一个对象:

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

然后,在你的蜘蛛,实例的GameInfo:

gameInfo = GameInfo() 

然后,实例为所需字段Python列表:

gameInfo['listeBuys'] = [] 

最后,添加你想要的:

gameInfo['listeBuys'].append(asyouwant) 

感谢dm03514的帮助!

1

Scrapy Field类是dict一个子类。如果您想让其中一个字段能够包含Item列表,我相信您可以创建一个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) 
+0

感谢您的回答,但我有一个问题。 我创建了“ListField”,就像你我在主对象中添加了一个字段“infos = ListField()”。

然后,在我的蜘蛛:我创建我的主要对象(game_info = GameInfo())和我的子对象。
后,我尝试:
game_info.append(new_buy_info)
但错误传来=>

'game_info.append(子对象) 文件“/usr/lib/python2.7/site-packages/scrapy/ item.py“,第64行,在__getattr__ raise AttributeError(name) exceptions.AttributeError:append' – user2240632 2013-04-22 13:59:32

+0

@ user2240632对不起固定示例 – dm03514 2013-04-22 14:01:49

+0

我得到一个错误:'File”/root/mycrawler/mycrawler/spiders/jiwire.py “,第107行,在parse_hotspot game_info [”buys“]。append(”test“) 文件”/usr/lib/python2.7/site-packages/scrapy/item。py“,第49行,在__getitem__ return self._values [key] exceptions.KeyError:'buys'' – user2240632 2013-04-22 16:09:52