Scrapy学习笔记V--Items 爬虫数据的存储.数据模板
来源:互联网 发布:现场音效软件 编辑:程序博客网 时间:2024/06/06 12:43
当我们利用爬虫程序从源数据中提取(extract)自己所需要的数据,如N个电影名,N个电影作者,不同排名,不同点赞数,不同下载地址,文章内容或者一些其他数据,并把这些提取的内容存储到一个Python字典中返回
但是字典存储数据会出现排版或者前后不一致的情况,尤其是在大型的爬虫程序中
那提取的数据应该保存在哪里?又能保持数据的一致性呢?
Item scrapy中item 类 中提供容器收集这些爬取的数据并定义这些数据的存储格式
declaring items声明item对象
import scrapyclass 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 productProduct(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 fieldTraceback (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 fieldTraceback (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])
字典的别名,没有额外的功能和属性
如有错误请指正
0 0
- Scrapy学习笔记V--Items 爬虫数据的存储.数据模板
- Scrapy爬虫(七):爬虫数据存储实例
- scrapy学习笔记--Items
- Scrapy学习笔记(4)---Items
- 数据抓取学习(爬虫via scrapy)
- 大数据-爬虫框架学习--scrapy
- python爬虫:使用Mongodb数据库存储数据学习笔记
- python,scrapy爬虫sql之爬取数据存储到mysql的piplelines.py配置
- Scrapy爬虫抓取网站数据
- 利用MongoDB存储scrapy的数据
- 爬虫学习笔记-Scrapy初识
- 爬虫学习笔记-Scrapy散记
- 搭建scrapy抓取javascript动态数据的爬虫
- Scrapy爬虫-大数据爬取时内存过大的解决办法(转)
- 我的python学习笔记、存储数据
- 【爬虫学习笔记01】基于miniconda的scrapy安装
- 我的Python学习笔记(6) 初探网络爬虫scrapy
- Scrapy爬虫入门教程六 Items(项目)
- Linux_tail
- Yii框架自定义默认控制器和方法
- Eclipse: The declared package does not match the expected package
- Linux_reboot tomcat
- 无分类域间路由选择相关计算题
- Scrapy学习笔记V--Items 爬虫数据的存储.数据模板
- Js_==&===
- Java-多线程
- Hibernate_配置说明
- 表情国际化
- Struts_token的令牌机制
- java反射机制
- 用GDB调试程序(五)
- Hibernate_检索策略