使用item来封装数据:

时间:2021-10-15 08:35:02

一、item和field类:

  1、使用Item类:

    使用item来封装数据:

    创建了类Bookitem,然后就可以使用:

      使用item来封装数据:

  2、item_pipeline:

    我们可以使用item_pipeline对爬取的数据进行处理。

    步骤:

      (1)在items.py文件中定义数据格式:

        需要继承Item类。

 class BookItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name=scrapy.Field()
price=scrapy.Field()

        (2)然后在pipelines.py文件夹中定义pipeline的类:

        

 class Toprice(object):
def process_item(self,item,spider):
price=item['price']
title=item['name']
exchange_rate=8.5309
price=float(item['price'][1:])*exchange_rate
item['price']='¥%.2f'%price
return item

      定义类时,不需要继承特殊的类,但需要实现一些特定的方法。

        process_item(self,item,spider)  用于处理每一项由spider爬取到的数据。

        open_spider(self,spider)   (处理数据前),回调这个方法。通常该方法用于处理所有数据之前完成某项初始化工作,如连接数据库。

        close_spider(self,spider)    (处理数据后)回调该方法,通常该方法用于在处理完所有的数据之后完成某项处理工作。

        from_crawler(cls,crawler)  创建itempipeline对象时回调该类方法。通常,在该方法中用过crawler.setting读取配置,根据配置创建itemPineline对象。

      (3)启用itempineline:

        需要在settings.py文件中进行配置:

          优先级大小:0~100

ITEM_PIPELINES = {
'book.pipelines.BookPipeline': 300,
'book.pipelines.Toprice':400,
} //后面的数字代表优先级,数字小的pipeline的优先级高,会先被调用