Sha*_*Lau 24 python json scrapy
我正在使用复杂的分层信息来抓取一些数据,并且需要将结果导出到json.
我将这些项目定义为
class FamilyItem():
name = Field()
sons = Field()
class SonsItem():
name = Field()
grandsons = Field()
class GrandsonsItem():
name = Field()
age = Field()
weight = Field()
sex = Field()
Run Code Online (Sandbox Code Playgroud)
当蜘蛛完成时,我会得到一个打印的项目输出
{'name': 'Jenny',
'sons': [
{'name': u'S1',
'grandsons': [
{'name': u'GS1',
'age': 18,
'weight': 50
},
{
'name':u'GS2',
'age': 19,
'weight':51}]
}]
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行时scrapy crawl myscaper -o a.json
,它总是说结果"不是JSON可序列化的".然后我将项目输出复制并粘贴到ipython控制台并使用json.dumps(),它工作正常.所以问题出在哪里?这是我的疯狂......
Myl*_*Ott 27
保存嵌套项时,请确保将它们包装在对dict()的调用中,例如:
gs1 = GrandsonsItem()
gs1['name'] = 'GS1'
gs1['age'] = 18
gs1['weight'] = 50
gs2 = GrandsonsItem()
gs2['name'] = 'GS2'
gs2['age'] = 19
gs2['weight'] = 51
s1 = SonsItem()
s1['name'] = 'S1'
s1['grandsons'] = [dict(gs1), dict(gs2)]
jenny = FamilyItem()
jenny['name'] = 'Jenny'
jenny['sons'] = [dict(s1)]
Run Code Online (Sandbox Code Playgroud)
不确定是否有办法在 scrapy 中使用类来执行嵌套项目,但数组工作正常。你可以这样做:
grandson = Grandson(name = 'Grandson', age = 2)
son = Son(name = 'Son', grandsons = [grandson])
item = Item(name = 'Name', son = [son])
Run Code Online (Sandbox Code Playgroud)