zoukankan      html  css  js  c++  java
  • 使用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的优先级高,会先被调用

            

  • 相关阅读:
    数值的整数次方
    二进制中1的个数
    SpingBoot 启动自动给MongoDB建库
    Java 依赖冲突的解决办法
    Http协议
    你被限流了吗?
    LeetCode 783. 二叉搜索树节点最小距离
    Leetcode 687. 最长同值路径
    LeetCode 784. 字母大小写全排列
    LeetCode 面试题 08.06. 汉诺塔问题
  • 原文地址:https://www.cnblogs.com/monty12/p/10105462.html
Copyright © 2011-2022 走看看