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

  • Wie greife ich auf Session-Daten in Jinja2-Vorlagen zu (Flaschen-Framework auf App-Engine)?
  • Python Pandas df.info
  • BeautifulSoup, ein Wörterbuch aus einer HTML-Tabelle
  • Probleme mit PIL in Django App unter Windows
  • Gibt es so etwas wie `ForeignKey` in der Google App Engine` webapp`?
  • Seaborn tsplot zeigt nicht datetimes auf x-Achse gut
  • 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.