Scrapy学习笔记V--Items 爬虫数据的存储.数据模板
2017-04-06 17:52
471 查看
当我们利用爬虫程序从源数据中提取(extract)自己所需要的数据,如N个电影名,N个电影作者,不同排名,不同点赞数,不同下载地址,文章内容或者一些其他数据,并把这些提取的内容存储到一个Python字典中返回
但是字典存储数据会出现排版或者前后不一致的情况,尤其是在大型的爬虫程序中
那提取的数据应该保存在哪里?又能保持数据的一致性呢?
Getting field values (获取field中的值)
Setting field values #设置field的值
Accessing all populated values #获得已定义好的数据
Other common tasks
Extending Items 你可以通过子类扩展你的item数据模型,增加或者改变一些元数据
可以把最开始定义的元数据字段(previous metadata)
Item objects
重写字典标准,唯一属性fields
Field objects
字典的别名,没有额外的功能和属性
如有错误请指正
但是字典存储数据会出现排版或者前后不一致的情况,尤其是在大型的爬虫程序中
那提取的数据应该保存在哪里?又能保持数据的一致性呢?
Item scrapy中item 类 中提供容器收集这些爬取的数据并定义这些数据的存储格式
declaring items声明item对象
import scrapy class Product(scrapy.Item): name = scrapy.Field() price = scrapy.Field() stock = scrapy.Field() last_updated = scrapy.Field(serializer=str)
field对象为每一个field指定元数据,各种类型的元数据都可,组件会找到各自的元数据的keys。field为Item.field中的属性元素
Working with Items操作items 和dict(字典)类似
Creating items (Product类已经在上面声明,定义items)>>> product = Product(name='Desktop PC', price=1000) >>> print product Product(name='Desktop PC', price=1000)
Getting field values (获取field中的值)
>>> product['name'] Desktop PC >>> product.get('name') Desktop PC >>> product['price'] 1000 >>> product['last_updated'] Traceback (most recent call last): ... KeyError: 'last_updated' >>> product.get('last_updated', 'not set') not set >>> product['lala'] # getting unknown field Traceback (most recent call last): ... KeyError: 'lala' >>> product.get('lala', 'unknown field') 'unknown field' >>> 'name' in product # is name field populated? True >>> 'last_updated' in product # is last_updated populated? False >>> 'last_updated' in product.fields # is last_updated a declared field? True >>> 'lala' in product.fields # is lala a declared field? False
Setting field values #设置field的值
>>> product['last_updated'] = 'today' >>> product['last_updated'] today >>> product['lala'] = 'test' # setting unknown field Traceback (most recent call last): ... KeyError: 'Product does not support field: lala'
Accessing all populated values #获得已定义好的数据
>>> product.keys() #获取键值 ['price', 'name'] >>> product.items() #获取键值和数据 [('price', 1000), ('name', 'Desktop PC')]
Other common tasks
- Copying items : product2 = Product(product) product3=product2.copy #复制item对象 - Creating dicts from items : dict(product) # 从所有已经填入field字段中 创建一个字典容器 - Creating items from dicts : Product({'name': 'Laptop PC', 'price': 1500}) #从字典中创建item 键值需已经声明过
Extending Items 你可以通过子类扩展你的item数据模型,增加或者改变一些元数据
class DiscountedProduct(Product): discount_percent = scrapy.Field(serializer=str) discount_expiration_date = scrapy.Field()
可以把最开始定义的元数据字段(previous metadata)
class SpecificProduct(Product): name = scrapy.Field(Product.fields['name'], serializer=my_serializer) #保持最初定义的name字段key-value
Item objects
class scrapy.item.Item([arg])
重写字典标准,唯一属性fields
Field objects
class scrapy.item.Field([arg])
字典的别名,没有额外的功能和属性
如有错误请指正
相关文章推荐
- C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件
- python爬虫:使用Mongodb数据库存储数据学习笔记
- Android 学习笔记7---数据存储与访问
- python爬虫框架scrapy学习笔记
- c语言学习笔记_数据格式_int与char的存储方式小节
- HTML5学习笔记之客户端存储数据方法:localStorage(),sessionStorage()
- Windows Phone 7 学习笔记:数据存储与获取的方式介绍
- 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)
- IOS学习笔记 -- Segue、数据存储、UITabBarController
- 学习笔记 第7章 数据存储与访问
- Cocos2d-X 学习笔记 16 使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码加密
- Windows 8学习笔记(四)--Storage数据存储
- Java 学习笔记10:获取POST数据以及简单模板输出
- IOS 学习笔记17 iPhone开发之使用NSUserDefaults存储数据
- SilverLight学习笔记--本地(客户端)数据存储
- Redis学习笔记4--Redis数据存储优化机制
- 【OpenCV学习笔记】之三:Mat初始创建方法----要求数据连续存储
- 【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)
- Chap 4 学习笔记-使用C#存储变量数据
- cocos2d-x 3.1.1 学习笔记[14] UserDefault 用户数据存储