使用item来封装数据:

一、item和field类:

  1、使用Item类:

    

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

      

  2、item_pipeline:

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

    步骤:

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

        需要继承Item类。

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

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

        

1 class Toprice(object):
2     def process_item(self,item,spider):
3         price=item['price']
4         title=item['name']
5         exchange_rate=8.5309
6         price=float(item['price'][1:])*exchange_rate
7         item['price']='¥%.2f'%price
8         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的优先级高,会先被调用

        

原文地址:https://www.cnblogs.com/monty12/p/10105462.html