Reputation: 1990
Final JSON will be :
"address": ----,
"state": ----,
year: {
"first": ----,
"second": {
"basic": ----,
"Information": ----,
}
},
I want to create my items.py like (just example):
class Item(scrapy.Item):
address = scrapy.Field()
state = scrapy.Field()
year = scrapy.Field(first), scrapy.Field(second)
class first(scrapy.Item):
amounts = scrapy.Field()
class second(scrapy.Item):
basic = scrapy.Field()
information = scrapy.Field()
How to implement this , already checked this https://doc.scrapy.org/en/latest/topics/items.html#extending-items
how to implement nested item in scrapy?
but there are no clue about this concept ... any suggestion?
Upvotes: 0
Views: 292
Reputation: 1981
class Item(scrapy.Item):
address = scrapy.Field()
state = scrapy.Field()
year = scrapy.Field(serializer=dict)
class Year(scrapy.Item):
first = scrapy.Field(serializer=dict)
second = scrapy.Field(serializer=dict)
class first(scrapy.Item):
amounts = scrapy.Field()
class second(scrapy.Item):
basic = scrapy.Field()
information = scrapy.Field()
This way you can do this:
>>> b = second(basic="hello", information="hello world")
>>> a = first(amounts=3)
>>> year = Year(first=a, second=b)
>>> year
{'first': {'amounts': 3},
'second': {'basic': 'hello', 'information': 'hello world'}}
>>> item = Item(address='address value', state='state value', year=year)
>>> item
{'address': 'address value',
'state': 'state value',
'year': {'first': {'amounts': 3}, 'second': {'basic': 'hello', 'information': 'hello world'}}}
Upvotes: 1
Reputation: 799
class Item(scrapy.Item):
address = scrapy.Field()
state = scrapy.Field()
year = scrapy.Field(first), scrapy.Field(second) #You dont need to do like this
class first(scrapy.Item):
amounts = scrapy.Field() #this work and below
class second(scrapy.Item): #and yes this work, you can do it in spider level or pipelines, just make your desired data, and pas it to year variable as you want. it will accumulate that
basic = scrapy.Field()
information = scrapy.Field()
Let me give you example,
first = {'first': first}
second = {'basic': basic, 'info': info}
year = {'first': first, 'second': second}
Upvotes: 0