2012-06-25 11 views
21

Skrobię niektóre dane o złożonych informacji hierarchicznych i trzeba wyeksportować wynik do json.jak zaimplementować zagnieżdżony element w scrapy?

I zdefiniowane elementy jak

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

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

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

a gdy pająk biegnie kompletne, dostanę wyjście artykuł wydrukowany jak

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

ale gdy uruchamiam scrapy crawl myscaper -o a.json, to zawsze mówi, że wynik " nie jest serializowany przez JSON ". Następnie kopiuję i wklejam dane wyjściowe do konsoli ipython i używam json.dumps(), działa dobrze. Więc gdzie jest problem? to napędza moje nakrętki ...

Odpowiedz

2

Nie jestem pewien, czy istnieje sposób na zagnieżdżanie przedmiotów w scrappy z klasami, ale tablice działają dobrze. Można zrobić coś takiego:

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

Podczas zapisywania elementy zagnieżdżone, należy owinąć je w zaproszeniu do dict(), np .:

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

Sir, zasługujesz cookie! –

Powiązane problemy