SCRAPY_part4_Items

来源:互联网 发布:程序员的技术栈 编辑:程序博客网 时间:2024/06/06 18:31
  • 用 scrapy 的主要目的是从非结构性的数据源–网页中提取结构性的数据。scrapy 可以将抽取的数据以字典的形式返回。虽然使用字典很简单方便,但是字典形式缺乏结构性,如发生拼写错误,或返回缺乏一致性的数据,尤其是有很多 spider 的大工程中。Scrapy 提供了 Item 类来定义通用的输出数据格式。Item 对象是一个简单的容器,来盛放抽取的数据。它提供了dictionary-like的 API 及简便的语法来声明它可用的 fields。

  • #一个简单的item类定义,Item 提供一个 dictionary-like API. Product() 类似于dict()....#Field 类没有特别的属性或方法。使用一个单独的类用于支持基于 class 属性的 item 声明语法。可以定义对象的元数据。比如:    last_updated = scrapy.Field(serializer=str)class Product(scrapy.Item):name = scrapy.Field()price = scrapy.Field()stock = scrapy.Field()last_updated = scrapy.Field(serializer=str)#Item基本操作(类似dict)product = Product(name='Desktop PC', price=1000)>>>product['name']Desktop PC>>>product.get('last_updated', 'not set')not set# 没定义这个Field>>> product['lala'] Traceback (most recent call last):>>> product.keys()['price', 'name']>>> product.items()[('price', 1000), ('name', 'Desktop PC')]#获取 Item 的 Field>>> product.fields {'last_updated': {'serializer': <class 'str'>}, 'name': {}, 'price': {}, 'stock': {}}#复制Item>>> product2 = Product(product)>>> print product2Product(name='Desktop PC', price=1000)# 继承:您可以通过声明原始项目的子类来扩展项目(以添加更多字段或更改某些字段的某些元数据)。#添加属性class DiscountedProduct(Product):    discount_percent = scrapy.Field(serializer=str)    discount_expiration_date = scrapy.Field()# 修改原来的属性class SpecificProduct(Product):    name = scrapy.Field(Product.fields['name'], serializer=my_serializer)       
原创粉丝点击