Wie man verschachtelte Gegenstände in scrapy implementiert?

Ich kratze einige Daten mit komplexen hierarchischen Informationen und muss das Ergebnis nach json exportieren.

Ich habe die Artikel als

  • Finden Sie die beste Untermenge aus der Liste der Zeichenfolgen, um eine gegebene Zeichenfolge zu entsprechen
  • Django, Filter nach festgelegten Monat und Jahr im Datumsbereich
  • Python: Konvertieren Sie die Liste, um die Schlüssel für mehrdimensionale Diktate mit Ausnahmebehandlung zu dict
  • Rückruffunktion tkinter-Taste mit Variablenparameter
  • Logging Training und Validierung Verlust in Tensorboard
  • Python File Creation Date & Umbenennen - Request for Critique
  • class FamilyItem(): name = Field() sons = Field() class SonsItem(): name = Field() grandsons = Field() class GrandsonsItem(): name = Field() age = Field() weight = Field() sex = Field() 

    Und wenn die Spinne komplett läuft, bekomme ich eine gedruckte Artikelausgabe wie

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

    Aber wenn ich scrapy crawl myscaper -o a.json , es sagt immer das Ergebnis "ist nicht JSON serializable". Dann kopiere ich und füge die Item-Ausgabe in ipython-Konsole ein und verwende json.dumps (), es funktioniert gut.So wo ist das Problem? Das treibt meine Nüsse …

    2 Solutions collect form web for “Wie man verschachtelte Gegenstände in scrapy implementiert?”

    Beim Speichern der verschachtelten Elemente, vergewissern Sie sich, sie in einen Aufruf zu dict (), zB:

     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)] 

    Nicht sicher, ob es eine Möglichkeit gibt, verschachtelte Gegenstände in scrappy mit Klassen zu machen, aber Arrays funktionieren gut. Du könntest so etwas machen:

     grandson['name'] = 'Grandson' grandson['age'] = 2 gransons.append(grandson) son['name'] = 'Son' sons['grandson'] = grandsons sons.append(son) item.name = 'Name' item.son = sons 
    Python ist die beste Programmiersprache der Welt.