2012-06-25 2 views
21

일부 데이터를 복잡한 계층 정보로 스크랩하고 결과를 json으로 내 보내야합니다. 치료에서 중첩 된 항목을 구현하는 방법은 무엇입니까?

나는

class FamilyItem(): 
    name = Field() 
    sons = Field() 

class SonsItem(): 
    name = Field() 
    grandsons = Field() 

class GrandsonsItem(): 
    name = Field() 
    age = Field() 
    weight = Field() 
    sex = Field() 

로 항목을 정의 거미가 완료 실행될 때, 나는

{'name': 'Jenny', 
    'sons': [ 
      {'name': u'S1', 
      'grandsons': [ 
        {'name': u'GS1', 
        'age': 18, 
        'weight': 50 
        }, 
        { 
        'name':u'GS2', 
        'age': 19, 
        'weight':51}] 
        }] 
} 

같은 인쇄 항목의 출력을 얻을 것이다하지만 scrapy crawl myscaper -o a.json을 실행할 때, 항상 결과 "라고 JSON을 직렬화 할 수 없습니다. " 그런 다음 ipython 콘솔에 항목 출력을 복사하여 붙여 넣고 json.dumps()를 사용하면 문제가 없습니다. 이것은 내 견과를 몰고있다 ...

답변

2

중첩 된 항목을 클래스와 함께 쓸모 없지만 배열이 잘 작동하는지 확실하지는 않습니다. 당신은 이런 식으로 뭔가를 할 수 : 중첩 된 항목을 저장할 때

grandson['name'] = 'Grandson' 
grandson['age'] = 2 
gransons.append(grandson) 
son['name'] = 'Son' 
sons['grandson'] = grandsons 
sons.append(son) 
item.name = 'Name' 
item.son = sons 
21

가) (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)] 
+0

선생님, 당신은 쿠키 가치가있어! –

관련 문제