如何告诉Scrapy将所有已获得的项目分为两个列表?例如,假设我有两种主要类型的项目 - article
和author
。我想把它们放在两个单独的列表中。现在我得到输出JSON:Scrapy将项目作为JSON中的子项目
[
{
"article_title":"foo",
"article_published":"1.1.1972",
"author": "John Doe"
},
{
"name": "John Doe",
"age": 42,
"email": "[email protected]"
}
]
如何将它转换为这样的东西?
{
"articles": [
{
"article_title": "foo",
"article_published": "1.1.1972",
"author": "John Doe"
}
],
"authors": [
{
"name": "John Doe",
"age": 42,
"email": "[email protected]"
}
]
}
我对输出这些功能都很简单,与此类似:
def parse_author(self, response):
name = response.css('div.author-info a::text').extract_first()
print("Parsing author: {}".format(name))
yield {
'author_name': name
}
管道访问我仍然不确定如何将给定类型的所有项目分组在一个JSON密钥下。修改管道返回'{'author':item}'仍然为每个项目创建一个'author'键。我想我需要在我自己的列表中的某个地方累积所有项目,然后在最后输出它们作为JSON,但我不知道该怎么做。 :::如果我想主要遍历文章,您建议的架构很好。例如,列出所有作者就会变得更加困难。 –
@MartinMelka我编辑了我的答案 –