我今天在Scrapy中查看项目的文档,并遇到了以下行:
字段对象用于为每个字段指定元数据...您可以为每个字段指定任何类型的元数据。对字段对象接受的值没有限制。
然而,在文档中,传递给Field对象的唯一“元数据”似乎是函数(在本例中是序列化程序)或输入/输出处理器。
因此我进入Python并尝试创建以下Item:
class ScrapyPracticeItem(scrapy.Item):
name = scrapy.Field()
age = scrapy.Field('color':'purple')
但这也不是公认的语法。
我现在很困惑--有没有人能给予我一个更好的定义,他们所说的元数据是什么意思?他们只是指项目中数据的转换吗?它能包含更多的信息吗?
1条答案
按热度按时间lg40wkob1#
field对象只是标准python字典的一个别名。
字段([arg])¶
Field类只是内置dict类的一个别名,并不提供任何额外的功能或属性。换句话说,Field对象是普通的Python dict。一个单独的类用于支持基于类属性的项声明语法。
因此,任何可以用作字典值的内容都可以赋给scrapy字段,而无需在其构造函数中使用任何参数。
当他们说您可以设置元数据时,字段就是您正在设置的项的元数据。添加序列化程序的选项实际上并不是由Field直接处理的,而是由Item对象或其MetaClass处理的。
这是scrapy.field类的实际源代码:
所有的数据处理和名称分配都由
scrapy
的一个自定义元类负责。Scrapy的结构是有意的,它从
django
框架中借用了很多方法。Item类及其关联的元类被设计成类似于django
的Model
类,它用来与存储后端(通常是数据库)进行通信。然而,因为零碎的项目可以以无数种方式提取和使用,
Item
类比它的对应物django
允许更大的灵活性,所以对于什么可以被认为是元数据或者什么可以存储在Item
类中,实际上没有限制。