scrapy框架-Items
使用的原因: 爬取的主要目标就是从非结构性的数据源提取结构性数据,例如网页。 Scrapy spider可以以python的dict来返回提取的数据.虽然dict很方便,并且用起来也熟悉,但是其缺少结构性,容易打错字段的名字或者返回不一致的数据,尤其在具有多个spider的大项目中。
简介: 为了定义常用的输出数据,Scrapy提供了 Item类 ,其提供了 类似于词典(dictionary-like)的API以及用于声明可用字段的简单语法
一、声明Item
Item使用简单的class定义语法以及 Field 对象来声明。例如:
import scrapy
class Product(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
last_updated = scrapy.Field(serializer=str)
二、Item字段(Item Fields)
-
Field
对象指明了每个字段的元数据(metadata) -
您可以为每个字段指明任何类型的元数据。 Field` 对象对接受的值没有任何限制。
-
用来声明item的
Field
对象并没有被赋值为class的属性。 不过您可以通过Item.fields
属性进行访问
三、创建Item
#创建Item
item = Product()
四、赋值
#赋值
item['name'] = 'scrapy'
item['price'] = 100
五、获取item对象的值
#获取Item对象的值
print(item.get('name'))
print(item['name'])
print(item.get('price'))
print(item['price'])
import scrapy
#声明Item
class Product(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
last_updated = scrapy.Field(serializer=str)
#创建Item
item = Product()
#赋值
item['name'] = 'scrapy'
item['price'] = 100
#获取Item对象的值
print(item.get('name'))
print(item['name'])
print(item.get('price'))
print(item['price'])
结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4h5JKDtY-1662687363958)(images\20191205152726.png)]
六、其他操作
- 复制item
>>> product.keys()
['price', 'name']
>>> product.items()
[('price', 1000), ('name', 'Desktop PC')]
-
根据item创建字典(dict):
>>> dict(product) # create a dict from all populated values {'price': 1000, 'name': 'Desktop PC'}
-
根据字典(dict)创建item:
>>> Product({'name': 'Laptop PC', 'price': 1500}) Product(price=1500, name='Laptop PC') >>> Product({'name': 'Laptop PC', 'lala': 1500}) # warning: unknown field in dict Traceback (most recent call last): ... KeyError: 'Product does not support field: lala' ```**加粗样式**