Wie kann ich Scrapy mitteilen, dass alle erarbeiteten Elemente in zwei Listen aufgeteilt werden sollen? Nehmen wir zum Beispiel an, ich habe zwei Haupttypen von Elementen - article
und author
. Ich möchte sie in zwei getrennten Listen haben. Gerade jetzt bekomme ich Ausgabe JSON:Scrapy Yield-Elemente als Unterelemente in JSON
[
{
"article_title":"foo",
"article_published":"1.1.1972",
"author": "John Doe"
},
{
"name": "John Doe",
"age": 42,
"email": "[email protected]"
}
]
Wie konvertiere ich es in so etwas?
{
"articles": [
{
"article_title": "foo",
"article_published": "1.1.1972",
"author": "John Doe"
}
],
"authors": [
{
"name": "John Doe",
"age": 42,
"email": "[email protected]"
}
]
}
Meine Funktionen für diese Ausgabe von einfach sind, ähnlich wie diese:
def parse_author(self, response):
name = response.css('div.author-info a::text').extract_first()
print("Parsing author: {}".format(name))
yield {
'author_name': name
}
Ich bin mir immer noch nicht sicher, wie man alle Elemente eines bestimmten Typs unter einem JSON Schlüssel zusammenfasst . Wenn die Pipeline so geändert wird, dass '{'author': item} zurückgegeben wird, wird immer noch ein einziger Autorschlüssel für jedes Element erstellt. Ich denke, ich muss alle Elemente in meiner eigenen Liste irgendwo sammeln und dann ganz am Ende als JSON ausgeben, aber ich weiß nicht wohin. ::: Ihre vorgeschlagene Architektur ist gut, wenn ich hauptsächlich Artikel durchblättern möchte. Es macht es beispielsweise sehr viel schwieriger, alle Autoren aufzulisten. –
@MartinMelka Ich habe meine Antwort bearbeitet –