首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想在item类中添加item类

我想在item类中添加item类
EN

Stack Overflow用户
提问于 2019-01-18 14:07:48
回答 2查看 194关注 0票数 0

最终的JSON将是:

代码语言:javascript
运行
复制
            "address": ----,
            "state": ----,
            year: {
                "first": ----,
                "second": {
                    "basic": ----,
                    "Information": ----,
                    }
            },

我想创建如下所示的items.py (仅举个例子):

代码语言:javascript
运行
复制
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()

如何实现这个,已经检查过这个https://doc.scrapy.org/en/latest/topics/items.html#extending-items

how to implement nested item in scrapy?

但是关于这个概念没有任何线索。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2019-01-18 19:58:13

代码语言:javascript
运行
复制
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()

通过这种方式,您可以执行以下操作:

代码语言:javascript
运行
复制
>>> 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'}}}
票数 1
EN

Stack Overflow用户

发布于 2019-01-18 14:25:10

代码语言:javascript
运行
复制
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()

让我给你举个例子

代码语言:javascript
运行
复制
first = {'first': first}
second = {'basic': basic, 'info': info}

year = {'first': first, 'second': second}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54248547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档