• scrapy Items


    scrapy框架-Items

    使用的原因: 爬取的主要目标就是从非结构性的数据源提取结构性数据,例如网页。 Scrapy spider可以以python的dict来返回提取的数据.虽然dict很方便,并且用起来也熟悉,但是其缺少结构性,容易打错字段的名字或者返回不一致的数据,尤其在具有多个spider的大项目中。

    简介: 为了定义常用的输出数据,Scrapy提供了 Item类 ,其提供了 类似于词典(dictionary-like)的API以及用于声明可用字段的简单语法

    一、声明Item

    Item使用简单的class定义语法以及 Field 对象来声明。例如:

    import scrapy
    
    class Product(scrapy.Item):
        name = scrapy.Field()
        price = scrapy.Field()
        stock = scrapy.Field()
        last_updated = scrapy.Field(serializer=str)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、Item字段(Item Fields)

    • Field对象指明了每个字段的元数据(metadata)

    • 您可以为每个字段指明任何类型的元数据。 Field` 对象对接受的值没有任何限制。

    • 用来声明item的Field 对象并没有被赋值为class的属性。 不过您可以通过 Item.fields属性进行访问

    三、创建Item

    #创建Item
    item = Product()
    
    • 1
    • 2

    四、赋值

    #赋值
    item['name'] = 'scrapy'
    item['price'] = 100
    
    • 1
    • 2
    • 3

    五、获取item对象的值

    #获取Item对象的值
    print(item.get('name'))
    print(item['name'])
    print(item.get('price'))
    print(item['price'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    import scrapy
    #声明Item
    class Product(scrapy.Item):
        name = scrapy.Field()
        price = scrapy.Field()
        stock = scrapy.Field()
        last_updated = scrapy.Field(serializer=str)
    
    #创建Item
    item = Product()
    #赋值
    item['name'] = 'scrapy'
    item['price'] = 100
    #获取Item对象的值
    print(item.get('name'))
    print(item['name'])
    print(item.get('price'))
    print(item['price'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4h5JKDtY-1662687363958)(images\20191205152726.png)]

    六、其他操作

    • 复制item
    >>> product.keys()
    ['price', 'name']
    
    >>> product.items()
    [('price', 1000), ('name', 'Desktop PC')]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 根据item创建字典(dict):

      >>> dict(product) # create a dict from all populated values
      {'price': 1000, 'name': 'Desktop PC'}
      
      • 1
      • 2
    • 根据字典(dict)创建item:

      >>> Product({'name': 'Laptop PC', 'price': 1500})
      Product(price=1500, name='Laptop PC')
      
      >>> Product({'name': 'Laptop PC', 'lala': 1500}) # warning: unknown field in dict
      Traceback (most recent call last):
          ...
      KeyError: 'Product does not support field: lala'
      ```**加粗样式**
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
  • 相关阅读:
    GO微服务实战第十节 案例:微服务 Docker 容器化部署和 Kubernete 容器编排
    2022-08-29 第六小组 瞒春 学习笔记
    【建议收藏】15755字,讲透MySQL性能优化(包含MySQL架构、存储引擎、调优工具、SQL、索引、建议等等)
    爱上开源之golang入门至实战第四章函数(Func)(五)
    云服务器使用及Linux基本命令
    大数据开发(Spark面试真题-卷四)
    与归并排序相关的一些问题
    Nginx的块、变量以及重定向
    JVM GC概念,问题及调优
    Angular React Vue 比较 - 前言
  • 原文地址:https://blog.csdn.net/zhongjianboy/article/details/126776665