第四章 使用Item封装数据

回顾之前的BookSpider代码,我们使用Python字典存储一本书的信息,但字典可能有以下缺点:
1. 无法一目了然的了解数据中包含那些字段,影响代码可读性
2. 缺乏对字段名的检测,容易因程序猿笔误而出错
3. 不便于携带元数据(传递给其他组件的信息)

为解决上述问题,在Scrapy中可以使用自定义的Item类封装爬取到的数据

1. Item和Field

Scrapy提供了两个类,用户可以使用它们自定义数据类(如书籍信息),封装爬取到的数据:

  • Item基类

    自定义数据类的基类
    
  • Field类

    用来描述自定义数据类包含那些字段
    

改造之前的代码吧,打开items.py文件

from scrapy import Item, Field

class BookItem(Item):
    name = Field()
    price = Field()

修改之前的BookSpider,使用BookItem代替Python字典

    def parse(self, response):
        # 提取数据
        for book in response.css('article.product_pod'):
            bk = BookItem()
            bk['name'] = book.xpath('./h3/a/@title').extract_first()
            bk['price'] = book.css('p.price_color::text').extract_first()
            yield bk
           #...代码省略

2. 拓展Item子类

可能要根据需求对已有的自定义数据类(Item子类)进行拓展,例如,example项目中又添加了一个新的Spider,它负责在另外的图书网站爬取国外书籍的信息,此书籍的信息比之前多了一个译者字段,此时可以继承BookItem定义一个ForeignBookItem类,在其中添加一个译者字段

简单的说,类的继承

class ForeignBookItem(BookItem):
    translator = Field()

3. Field元数据

暂未更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值